我试图解析ANTLR中的递归表达式,例如:
(a + (b + C))
或
((a + b))
我读了这个假设的解决方案: ANTLR Grammar for expressions
然而,当我尝试创建一个规则,例如:
ParenthesisExpression: '(' (ParenthesisExpression | Expression) ')';
ANTLR抱怨“规则ParenthesisExpression是左递归的”。
如何解析本身可能具有相同形式的子表达式的表达式?
答案 0 :(得分:4)
你可以这样做:
parse
: addExp EOF
;
addExp
: multExp (('+' | '-') multExp)*
;
multExp
: atom (('*' | '/') atom)*
;
atom
: ID
| '(' addExp ')'
;
ID : 'a'..'z' | 'A'..'Z';
您越接近atom
规则,优先级越高:+
和-
的优先级最低,其次是*
和{{1}最后,/
和ID
具有最高优先级。
它解析输入:
( ... )
如下:
和输入:
((a / b)) - x
被解析为: