在ANTLR中使用子表达式解析表达式

我试图解析ANTLR中的递归表达式,例如:
(a + (b + C))
要么
((a + b))
我读了这个假设的解决方案 表达式的ANTLR语法 但是,当我尝试创建一个规则,如:
ParenthesisExpression: '(' (ParenthesisExpression | Expression) ')';
ANTLR抱怨“Rule ParenthesisExpression是左递归的”。 我如何解析本身可能具有相同形式的子表达式的表达式?     
已邀请:
你可以这样做:
parse
  :  addExp EOF
  ;

addExp
  :  multExp (('+' | '-') multExp)*
  ;

multExp
  :  atom (('*' | '/') atom)*
  ;

atom
  :  ID
  |  '(' addExp ')'
  ;

ID    : 'a'..'z' | 'A'..'Z';
你越接近
atom
规则,优先级越高:所以
+
-
具有最低优先级,接着是
*
/
,最后,
ID
( ... )
具有最高优先级。 它解析输入:
((a / b)) - x
如下: 和输入:
(a * (b + C))
解析如下:     

要回复问题请先登录注册