我最近开始研究ANTLR。下面是算术表达式的语法。
问题是当我在term
规则中放置(调用)表达式规则时,即使对于(9 + 8)它也正在解析。它在某种程度上忽略了右括号。
当我放置add
规则而不是从规则术语调用表达式规则时,它正常工作。
如:
term:
INTEGER
| '(' add ')'
;
任何人都可以告诉我它为什么会发生,因为它们两者都是相同的。
Grammer的结果不正确
term
:
INTEGER
| '(' expression ')'
;
mult
:
term ('*' term)*
;
add
:
mult ('+' mult)*
;
expression
:
add
;
答案 0 :(得分:2)
当我使用从语法生成的解析器解析"(8+9)"
时,从expression
规则开始,我得到以下解析树:
换句话说:它运作得很好。
也许您正在使用ANTLRWorks(或ANTLR IDE)解释器来测试您的语法?在这种情况下:不要使用解释器,它是马车。改为使用ANTLRWorks的调试器(图像从ANTLRWorks的调试器导出)。