Java antlr4-如何实现递归

Java antlr4-如何实现递归,java,recursion,antlr,antlr4,Java,Recursion,Antlr,Antlr4,我想分析以下输入: <name 1> WITH <name 2> WITH <name 3> WITH <name 4> ... 但这似乎不起作用。如何实现递归 供您参考 我的最终目标是解析一个树状结构,如下所示: <name 1> WITH (<name 2> WITH <name 3> WITH <name 4>) WITH <name 5> 结果显示消息: line 1:16 n

我想分析以下输入:

<name 1> WITH <name 2> WITH <name 3> WITH <name 4> ...
但这似乎不起作用。如何实现递归

供您参考

我的最终目标是解析一个树状结构,如下所示:

<name 1> WITH (<name 2> WITH <name 3> WITH <name 4>) WITH <name 5>
结果显示消息:

line 1:16 no viable alternative at input '<EOF>'
第1:16行输入“”处无可行的替代方案

添加消耗(和跳过)空格的lexer规则时,我没有问题

语法:

grammar T;

SPACE       : [ \t\r\n]+ -> skip
            ;
WITH        : 'WITH'
            ;
NAME        : ('a'..'z' | 'A'..'Z' | '0'..'9' | '-' | '_')+
            ;
query       : NAME (WITH query)?
            ;
将输入
a与b匹配,c与d匹配,如下所示:

NAME        : [a-zA-Z0-9_-]+
            ;

请注意,您的
名称
规则可以编写如下:

NAME        : [a-zA-Z0-9_-]+
            ;
要消除
EOF
消息,只需在语法中引入一个以
EOF
结尾的入口点:

parse : query EOF;
然后做:

new TParser(...).parse()

谢谢你的回复!当我尝试你的语法时(我复制/粘贴了它),我得到了以下错误:“第1行:16在输入“”处没有可行的替代方案”。我的代码:
新TParser(新CommonTokenStream(新TLexer(新AntlInputStream(“hello WITH world”))))。query()
谢谢!我没有意识到你必须明确地考虑到
EOF
。顺便说一下。我试图对你的答案投赞成票,但我的声望还不够。“等我拿到它们以后再做。”巴特基尔斯:我把它作为对你答案的评论加上去了。再次感谢。很酷,谢谢,在你的原始帖子中复制粘贴准确的错误消息总是一个好主意(你可以在提交后编辑你的问题)。我以后会这样做的。我是第一次这样做,谢谢你指出这一点。也谢谢你把它添加到我的信息中。
parse : query EOF;
new TParser(...).parse()