antlr是否自动考虑顶级候补



我已经编写了以下两种语法,一种是对算术表达式进行分组(如果可能(,另一种则不分组:

grammar NoPrefix;
root: (expr ';')* EOF;
expr
: '(' expr ')'
| expr '*' expr
| expr '/' expr
| expr '+' expr
| expr '-' expr
| Atom
;
Atom: [a-z]+ | [0-9]+ | ''' Atom ''';
WHITESPACE: [ trn] -> skip;
grammar YesPrefix;
root: (expr ';')* EOF;
expr
: '(' expr ')'
| expr ('*'|'/') expr
| expr ('+'|'-') expr
| Atom
;
Atom:[a-z]+ | [0-9]+ | ''' Atom ''';
WHITESPACE: [ trn] -> skip;

这两者的运行时、构建大小等似乎几乎相同。antlr是否会自动将两种形式的替代方案转换为相同的输出,例如:

expr: expr '*' expr | expr '/' expr    <==> expr: expr ('*'|'/') expr;

否。Antlr怎么知道您希望*/具有相同的绑定优先级,而不是+-?你需要明确这一点。

相关内容

  • 没有找到相关文章

最新更新