VARIABLE: ...
UNARYOP: 'not' Expression; // unary operation
BINARYOP: 'or' VARIABLE;
Expression : (NIL | INTEGER | UNARYOP) BINARYOP?;
在上面的场景中,'或'可以通过
到达Expression-> BINARYOP
或
EXPRESSION-> UNARYOP-> Expression-> BINARYOP
是否有一种系统的方法来消除上述歧义?
答案 0 :(得分:1)
我认为消除语法中的含糊不清是一项不可自动解决的任务,因为如果选择哪一种选择是正确的,那就是'主观'选择。
确定问题后,构建不同的替代树并添加新的生产规则以禁止无效的解析树。
我担心没有像移除左递归那样的神奇解决方案......也许我错了。
在您的情况下,您可以定义
Expression : NIL
| INTEGER
| VARIABLE
| 'not' Expression
| Expression 'or' Expression;
或者您是否只想将'或'的右侧限制为变量?