【发布时间】:2016-02-17 10:20:51
【问题描述】:
对于一个编译项目,我和我的团队正在使用 Antlr 定义一个语法。 我们目前对这些规则有疑问:
expr: ...
| lvalue expr3 expr2
| ID '('exprList')' expr2
|... ;
lvalue: ID lvalue2;
lvalue2: '.' ID lvalue2
| '[' expr ']' lvalue2
| ;
如您所见,左值可以产生 ID,从而导致非 LL() 语法。 所以我的问题是:我们如何修改语法以使其成为 LL() 而不允许额外的东西。
提前谢谢你!
【问题讨论】:
-
你必须考虑到它:
expr : ID (lvalue2 expr3 | '(' exprList ')') expr2; -
哦,是的,现在看起来很明显。谢谢!