Antlr4 - 隐含定义

时间:2015-04-29 14:23:38

标签: antlr antlr4

我正在尝试创建一个简单的现在只有整数算术表达式解析器。现在我有:

grammar MyExpr;

input: (expr NEWLINE)+;


expr: '(' expr ')'
    | '-' expr
    | <assoc = right> expr '^' expr
    | expr ('*' | '/') expr
    | expr ('+' | '-') expr
    | ID '(' ExpressionList? ')'
    | INT;

ExpressionList : expr (',' expr)*; 


ID : [a-zA-Z]+;
INT : DIGIT+;
DIGIT: [0-9];
NEWLINE : '\r'?'\n';
WS : [\t]+ -> skip;

规则ExpressionList似乎会导致一些问题。如果我删除包含ExpressionList的所有内容,所有内容都会编译并且似乎运行正常。但是像上面一样,我得到的错误如下:

error(160): MyExpr.g4:14:17: reference to parser rule expr in lexer rule ExpressionList
error(126): MyExpr.g4:7:6: cannot create implicit token for string literal in non-combined grammar: '-'

我正在使用Eclipse和Antlr4插件。我试着按照antlr4-book中给出的cymbol语法进行定位。

有人能告诉我我的小语法出了什么问题吗?

1 个答案:

答案 0 :(得分:5)

自己找到它:

以大写字母开头的规则是指Lexer规则。因此,我所要做的就是将ExpressionList重命名为expressionList。

也许其他人会在某一天发现这个有用;)