Antlr4-隐式定义

Not*_*You 4 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;
Run Code Online (Sandbox Code Playgroud)

规则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: '-'
Run Code Online (Sandbox Code Playgroud)

我正在使用Eclipse和Antlr4插件。我试图使自己适应于antlr4书中给出的符号语法。

有人可以告诉我我的小语法怎么了吗?

小智 6

自己发现的:

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

也许某天某人会发现这很有用;)