0

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

parenset
:   LPAREN
    parenset*
    RPAREN
;

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

应该只验证左括号和右括号一样多。但是在 ANTLRWorks 1.4.3 中,当我在解释器中输入 '((()))' 时,我得到

在此处输入图像描述

我的其他正确的父母在哪里?!我做错了什么吗?谢谢!

4

1 回答 1

1

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

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

grammar T;

parenset
  :  LPAREN parenset* RPAREN
  ;

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

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

在此处输入图像描述

所以,回答你的问题:

我的其他正确的父母在哪里?!我做错了什么吗?

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

于 2011-10-05T07:39:19.763 回答