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