gpt4 book ai didi

antlr - 求解 ANTLR 相互左递归规则

转载 作者:行者123 更新时间:2023-12-01 11:58:49 29 4
gpt4 key购买 nike

下面的 ANTLR 文法中的 'expr' 规则显然是相互左递归的。作为一个 ANTLR 新手,我很难解决这个问题。我已经阅读了 ANTLR 引用书中的“解决非 LL(*) 冲突”,但我仍然没有看到解决方案。有什么指点吗?

LPAREN : ( '(' ) ;RPAREN : ( ')' );AND : ( 'AND' | '&' | 'EN' ) ;OR : ( 'OR' | '|' | 'OF' );NOT : ('-' | 'NOT' | 'NIET' );WS :  ( ' ' | '\t' | '\r' | '\n' ) {$channel=HIDDEN;}  ;WORD :  (~( ' ' | '\t' | '\r' | '\n' | '(' | ')' | '"' ))*;input : expr EOF;expr : (andexpr | orexpr | notexpr | atom);andexpr : expr AND expr;orexpr :  expr OR expr;notexpr : NOT expr;phrase : '"' WORD* '"';atom : (phrase | WORD); 

最佳答案

我建议看一下 antlr 站点上的语法示例。 java 语法做你想做的事。

基本上你可以这样做:

expr : andexpr;
andexpr : orexpr (AND andexpr)*;
orexpr : notexpr (OR orexpr)*;
notexpr : atom | NOT expr;

关键是,每个表达式都可以结束为一个原子。

关于antlr - 求解 ANTLR 相互左递归规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3556078/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com