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