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()