Как получить тип переменной в объявлении ANTLR - PullRequest
0 голосов
/ 31 марта 2020

Я разрабатываю DSL с ANTLR, и в правиле назначения я хочу знать, что тип переменной - это моя грамматика.

assign: name = ID '=' value = ( INT  |STRING | DATE )
            {
                // get type here
                parameters.add(new java.util.AbstractMap.SimpleImmutableEntry($name.text, $value.text));
            };

1 Ответ

0 голосов
/ 31 марта 2020

Я предлагаю не засорять вашу грамматику кодом, а делать это внутри слушателя:

@Override
public void enterAssign(StudyParserParser.AssignContext ctx) {

    String id = ctx.name.getText();
    String value = ctx.value.getText();

    switch (ctx.value.getType()) {
        case StudyParserLexer.INT:
            System.out.println(id + " is an INT: " + value);
            break;
        case StudyParserLexer.STRING:
            System.out.println(id + " is a STRING: " + value);
            break;
        case StudyParserLexer.DATE:
            System.out.println(id + " is a DATE: " + value);
            break;
        default:
            throw new RuntimeException("Unknown type: " + ctx.value.getType() + ", value: " + value);
    }
}
...