ANTLR递归模糊问题

ANTLR递归模糊问题,antlr,ambiguity,Antlr,Ambiguity,在上述场景中,“或”可以通过 表达式->二进制操作 或 EXPRESSION->UNARYOP->EXPRESSION->BINARYOP 有没有一种系统的方法来消除上述歧义?我认为消除语法中的歧义是一项无法自动解决的任务,因为如果选择哪一个选项是正确的,那就是一种“主观”选择 确定问题后,构建不同的替代树并添加新的生成规则以禁止无效的解析树 恐怕没有像删除左递归这样神奇的解决方案。。。也许我错了 在您的情况下,您可以定义 VARIABLE: ... UNARYOP: 'not' Expres

在上述场景中,“或”可以通过

表达式->二进制操作

EXPRESSION->UNARYOP->EXPRESSION->BINARYOP


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

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

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

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

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

VARIABLE: ...

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

Expression : (NIL | INTEGER | UNARYOP) BINARYOP?;
还是要将“或”的右侧仅限于变量

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