【发布时间】:2011-12-06 10:52:20
【问题描述】:
我正在尝试扩展 the grammar of the Tiny Language 以将赋值视为表达式。因此写是有效的
a = b = 1; // -> a = (b = 1)
a = 2 * (b = 1); // contrived but valid
a = 1 = 2; // invalid
赋值在两个方面不同于其他运算符。它是右关联的(没什么大不了的),它的左边必须是一个变量。所以我就这样改了语法
statement: assignmentExpr | functionCall ...;
assignmentExpr: Identifier indexes? '=' expression;
expression: assignmentExpr | condExpr;
它不起作用,因为它包含一个非 LL(*) 决定。我也试过这个变种:
assignmentExpr: Identifier indexes? '=' (expression | condExpr);
但我遇到了同样的错误。我有兴趣
- 这个具体问题
- 给定一个具有非 LL(*) 判定的文法,如何找到导致问题的两条路径
- 如何解决
【问题讨论】: