如何让 ANTLR 规则消耗所有可能的元素,而不仅仅是第一个?
How to make ANTLR rule consume all possible elements, not only the first one?
这是我的语法:
grammar test;
text: foo EOF;
foo: 'X' | foo tail;
tail: (' ' foo)+;
这是输入:
X X X X
树看起来像这样:
相反,我希望输出树中只存在一个 tail
,它必须包含三个 foo
元素。我该怎么做?
通过从 foo: 'X' | foo tail;
中删除左递归,您可以更好地了解为什么得到多个 tail
:
foo: 'X' tail*;
这也适用于多个 'X',因为 tail
包含另一个递归(回到 foo
)。
这是我的语法:
grammar test;
text: foo EOF;
foo: 'X' | foo tail;
tail: (' ' foo)+;
这是输入:
X X X X
树看起来像这样:
相反,我希望输出树中只存在一个 tail
,它必须包含三个 foo
元素。我该怎么做?
通过从 foo: 'X' | foo tail;
中删除左递归,您可以更好地了解为什么得到多个 tail
:
foo: 'X' tail*;
这也适用于多个 'X',因为 tail
包含另一个递归(回到 foo
)。