ANTLR:递归规则导致的非LL(*)决策

ANTLR:递归规则导致的非LL(*)决策,antlr,grammar,Antlr,Grammar,我试图解决这个问题(删除语法中的回溯),但没有成功,这是我的语法代码:我在“条件”规则中遇到了问题 语法样本3; 选择权{ 语言=Java; 输出=AST; ASTLabelType=CommonTree; } 代币{ 否定; } @标题{ 包com.tuto.antlr; } @lexer::header{ 包com.tuto.antlr; } 程序 :条件EOF! ; 条件 :条件((‘and’^ |‘或’^)条件)* ; 条件 :关系(‘与’^ |‘或’^)关系)* ; 关系 :表达式(“

我试图解决这个问题(删除语法中的回溯),但没有成功,这是我的语法代码:我在“条件”规则中遇到了问题

语法样本3;
选择权{
语言=Java;
输出=AST;
ASTLabelType=CommonTree;
}
代币{
否定;
}
@标题{
包com.tuto.antlr;
}
@lexer::header{
包com.tuto.antlr;
}
程序
:条件EOF!
;
条件
:条件((‘and’^ |‘或’^)条件)*
;
条件
:关系(‘与’^ |‘或’^)关系)*
;
关系
:表达式(“=”^ |“^ |“=”^ |“^表达式)+
//|“(”表达式(“=”^ |“^ |“=”^ |“^”)表达式)+”
;
学期
:正数
|识别
|“(“!表达式”)”!
;   
一元
:(“+”!|否定^)*项
;
否定
:“-”->否定
;
多种
:一元((“*”^ |“/”^ |“%”一元)*
;   
表达
:multi((“+”^ |“-”^)multi)*
;
识别号:('a'..'z'|'a'..'z')('a'..'z'|'a'..'z'|'0'..'9')*;
正数:'0'..'9'+('0'..'9'+)?;
//负数:'-''0'..'9'+('.'0'..'9'+)?;
WS:(“”|’\n’|’\r’|’\t’+{$channel=HIDDEN;};
注释:'/'.*('\n'|'\r'){$channel=HIDDEN;};
多注释:'/*'.'*/'{$channel=HIDDEN;};
我试图在选项中添加backtrack=true,但什么都没有。。。 有人能帮我吗?谢谢。试试这个:

conditions
    :   relation (('and'^ | 'or'^)conditions)*
    ;
这将匹配任何关系列表。删除“条件”生产。我建议你查一下龙书

conditions
    :   relation (('and'^ | 'or'^)conditions)*
    ;