1

我最近开始学习ANTLR。下面是算术表达式的语法。问题是,当我将(调用)表达式规则放入规则中时,term即使对于(9+8),它也解析不正确。它以某种方式忽略了正确的括号。

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

如:

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

谁能告诉我为什么会这样,因为它们或多或少都是一样的。

给出错误结果的语法

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

mult
  :
  term ('*' term)*
  ;

add
  :
  mult ('+' mult)*
  ;

expression
  :
  add
  ;
4

1 回答 1

2

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

在此处输入图像描述

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

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

于 2012-07-25T17:55:38.750 回答