Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
VARIABLE: ... UNARYOP: 'not' Expression; // unary operation BINARYOP: 'or' VARIABLE; Expression : (NIL | INTEGER | UNARYOP) BINARYOP?;
在上述情况下,“或”可以通过
表达式->BINARYOP
或者
表达式->一元运算->表达式->二进制运算
是否有系统的方法来消除上述歧义?
我认为消除语法中的歧义是一项无法自动解决的任务,因为如果选择哪个选项是正确的选项是“主观”选择。
确定问题后,构建不同的替代树并添加新的生产规则以禁止无效的解析树。
恐怕没有像删除左递归这样的神奇解决方案......也许我错了。
在您的情况下,您可以定义
Expression : NIL | INTEGER | VARIABLE | 'not' Expression | Expression 'or' Expression;
还是您只想将“或”的右侧限制为变量?