gpt4 book ai didi

java - antlr4 - 如何实现递归

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:42 24 4
gpt4 key购买 nike

我想解析以下输入:

<name 1> WITH <name 2> WITH <name 3> WITH <name 4> ...

我尝试了以下语法:

WITH        : 'WITH'
;
NAME : ('a'..'z' | 'A'..'Z' | '0'..'9' | '-' | '_')+
;
query : NAME (WITH query)?
;

但这似乎不起作用。如何实现递归?

供您引用

我的最终目标是解析像这样的树状结构:

<name 1> WITH (<name 2> WITH <name 3> WITH <name 4>) WITH <name 5>

这会产生以下树:

<name 1>
<name 2>
<name 3>
<name 4>
<name 5>

但是让我们首先从第一个表达式开始。

我的代码:

new TParser(new CommonTokenStream(new TLexer(new ANTLRInputStream( "hello WITH world" )))).query()

导致消息:

line 1:16 no viable alternative at input '<EOF>'

最佳答案

当添加消耗(并跳过)空格的词法分析器规则时,我没有问题。

语法:

grammar T;

SPACE : [ \t\r\n]+ -> skip
;
WITH : 'WITH'
;
NAME : ('a'..'z' | 'A'..'Z' | '0'..'9' | '-' | '_')+
;
query : NAME (WITH query)?
;

将匹配输入aWITHbWITHcWITHd如下:

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

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

要摆脱 EOF 消息,只需引入一个以 EOF 结尾的语法入口点:

parse : query EOF;

然后执行:

new TParser(...).parse()

关于java - antlr4 - 如何实现递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28352650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com