我正在尝试创建一个简单的现在仅用于整数算术表达式的解析器。现在我有:
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书中给出的符号语法。
有人可以告诉我我的小语法怎么了吗?
| 归档时间: |
|
| 查看次数: |
706 次 |
| 最近记录: |