1
VARIABLE: ...

UNARYOP: 'not' Expression; // unary operation
BINARYOP: 'or' VARIABLE;

Expression : (NIL | INTEGER | UNARYOP) BINARYOP?;

在上述情况下,“或”可以通过

表达式->BINARYOP

或者

表达式->一元运算->表达式->二进制运算

是否有系统的方法来消除上述歧义?

4

1 回答 1

2

我认为消除语法中的歧义是一项无法自动解决的任务,因为如果选择哪个选项是正确的选项是“主观”选择。

确定问题后,构建不同的替代树并添加新的生产规则以禁止无效的解析树。

恐怕没有像删除左递归这样的神奇解决方案......也许我错了。

在您的情况下,您可以定义

Expression : NIL
           | INTEGER
           | VARIABLE
           | 'not' Expression
           | Expression 'or' Expression;

还是您只想将“或”的右侧限制为变量?

于 2009-09-20T21:49:22.783 回答