ANTLR中的简单算术语法的不正确解析

时间:2012-07-25 15:41:34

标签: parsing antlr

我最近开始研究ANTLR。下面是算术表达式的语法。 问题是当我在term规则中放置(调用)表达式规则时,即使对于(9 + 8)它也正在解析。它在某种程度上忽略了右括号。

当我放置add规则而不是从规则术语调用表达式规则时,它正常工作。

如:

term:
INTEGER
| '(' add ')'
;

任何人都可以告诉我它为什么会发生,因为它们两者都是相同的。

Grammer的结果不正确

term
  :
  INTEGER
  | '(' expression ')'
  ;

mult
  :
  term ('*' term)*
  ;

add
  :
  mult ('+' mult)*
  ;

expression
  :
  add
  ;

1 个答案:

答案 0 :(得分:2)

当我使用从语法生成的解析器解析"(8+9)"时,从expression规则开始,我得到以下解析树:

enter image description here

换句话说:它运作得很好。

也许您正在使用ANTLRWorks(或ANTLR IDE)解释器来测试您的语法?在这种情况下:不要使用解释器,它是马车。改为使用ANTLRWorks的调试器(图像从ANTLRWorks的调试器导出)。