如何使用递归使 ANTLR 消耗所有可用元素?
How to make ANTLR consume all available elements using recursion?
这是我的语法:
grammar test;
text: foo EOF;
foo:
'X'
|
'('
foo
')'
|
foo
'!'
|
foo
tail
;
tail: (' ' foo)+;
这是它完美解析的输入:
X (X! (X)! (X X X)!!!) X
但是,正如我之前解释的 ,输出树有太多 tail
个元素。有可能解决这个问题吗?
感谢@kaby76,找到解决方案:
foo:
'X' tail?
|
'(' foo ')' tail?
|
foo '!' tail?
;
tail:
(
' ' 'X'
|
' ' '(' foo ')'
|
' ' foo '!'
)+
;
这是我的语法:
grammar test;
text: foo EOF;
foo:
'X'
|
'('
foo
')'
|
foo
'!'
|
foo
tail
;
tail: (' ' foo)+;
这是它完美解析的输入:
X (X! (X)! (X X X)!!!) X
但是,正如我之前解释的 tail
个元素。有可能解决这个问题吗?
感谢@kaby76,找到解决方案:
foo:
'X' tail?
|
'(' foo ')' tail?
|
foo '!' tail?
;
tail:
(
' ' 'X'
|
' ' '(' foo ')'
|
' ' foo '!'
)+
;