ANTLR中的初学者递归,没有调用堆栈?

时间:2011-10-04 23:32:21

标签: recursion antlr antlrworks

在存在调用堆栈的意义上,ANTLR中是否存在递归?例如:

parenset
:   LPAREN
    parenset*
    RPAREN
;

LPAREN: '(';
RPAREN: ')';

应该验证左边的括号是否正确。但是在ANTLRWorks 1.4.3中,当我输入'((()))时,在解释器中,我得到了

enter image description here

我的其他权利在哪里?!我做错了吗?谢谢!

1 个答案:

答案 0 :(得分:1)

不要使用ANTLRWorks的解释器:它是出了名的错误。

如果我在ANTLRWorks中使用调试器(与解释器不同!)并使用语法:

grammar T;

parenset
  :  LPAREN parenset* RPAREN
  ;

LPAREN : '(';
RPAREN : ')';

并提供输入((()))我得到以下解析树:

enter image description here

所以,回答你的问题:

  

我的其他权利在哪里?!我做错了吗?

不,你没有做错任何事:ANTLRWorks的翻译正在为你搞砸。每当你的语法包含谓词或递归规则调用时,最好使用调试器或编写自己的测试类。