在存在调用堆栈的意义上,ANTLR中是否存在递归?例如:
parenset
: LPAREN
parenset*
RPAREN
;
LPAREN: '(';
RPAREN: ')';
应该验证左边的括号是否正确。但是在ANTLRWorks 1.4.3中,当我输入'((()))时,在解释器中,我得到了
我的其他权利在哪里?!我做错了吗?谢谢!
答案 0 :(得分:1)
不要使用ANTLRWorks的解释器:它是出了名的错误。
如果我在ANTLRWorks中使用调试器(与解释器不同!)并使用语法:
grammar T;
parenset
: LPAREN parenset* RPAREN
;
LPAREN : '(';
RPAREN : ')';
并提供输入((()))
我得到以下解析树:
所以,回答你的问题:
我的其他权利在哪里?!我做错了吗?
不,你没有做错任何事:ANTLRWorks的翻译正在为你搞砸。每当你的语法包含谓词或递归规则调用时,最好使用调试器或编写自己的测试类。