ANTLR递归模糊问题

时间:2009-09-20 20:29:28

标签: antlr ambiguity

VARIABLE: ...

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

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

在上面的场景中,'或'可以通过

到达

Expression-> BINARYOP

EXPRESSION-> UNARYOP-> Expression-> BINARYOP

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

1 个答案:

答案 0 :(得分:1)

我认为消除语法中的含糊不清是一项不可自动解决的任务,因为如果选择哪一种选择是正确的,那就是'主观'选择。

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

我担心没有像移除左递归那样的神奇解决方案......也许我错了。

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

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

或者您是否只想将'或'的右侧限制为变量?