gpt4 book ai didi

java - ANTLR 仅匹配流中的特定字符串并忽略其余字符串

转载 作者:行者123 更新时间:2023-11-29 06:00:32 32 4
gpt4 key购买 nike

首先,我是 ANTLR 的新手。我问的问题对你们其他人来说可能微不足道,但我需要你们的帮助。

我想匹配流中的所有限定名称,并忽略流中的其余字符。

我尝试了以下方法:

findAllQualifiedNames
: qualifiedName+
;

qualifiedName
: IDENTIFIER
('.' IDENTIFIER)*
;

IDENTIFIER
: ('_'
| '$'
| ('a'..'z' | 'A'..'Z'))
('a'..'z' | 'A'..'Z' | '0'..'9' | '_' | '$')*
;
AnyOtherChar
: .
{$channel=HIDDEN;}
;

但它并不像我预期的那样工作:对于输入 a.b.c;d.e.f;,它只匹配 a.b.c 作为限定名称。我得到了错误:

No viable alternative at ;

编辑:

对于上面的语法,我尝试了以下输入:a.b.c;d.e.f; .. {x.y;}

我希望匹配 a.b.c、d.e.fx.y,但我得到以下结果:

Eclipse plugin interpreter

最佳答案

But it doesn't work the way i expected: for the input a.b.c;d.e.f;, it matches only a.b.c as a qualified name. And i get the error: ...

我无法重现。

使用 ANTLRWorks 1.4.3 中的调试器,我得到以下解析树:

enter image description here

(如您所见,输出屏幕(左下角)上未打印任何错误/警告)

当然,您需要考虑字符串文字中的文本和“看起来”像限定名称的注释,但我在 previous Q&A of yours 中展示了这一点(我将最后一条评论更多地发布给 future 的读者,他们可能认为从 Java 源文件中获取所有限定名称很容易

编辑

事实是 a.b.c; d.e.f; .. {x.y;} 产生错误是因为那里有两个 .(点)。点被单独标记,而不是作为 AnyOtherChar 标记。

在解析器规则中定义文字标记(就像您在 qualifiedName 中使用 '.' 所做的那样)不是导致这些标记仅在那些解析器规则中创建。以下两种语法是相同的:

1

qualifiedName : IDENTIFIER ('.' IDENTIFIER)*;
IDENTIFIER : ('_' | '$' | 'a'..'z' | 'A'..'Z')+;

2

qualifiedName : IDENTIFIER (DOT IDENTIFIER)*;
IDENTIFIER : ('_' | '$' | 'a'..'z' | 'A'..'Z')+;
DOT : '.';

关于java - ANTLR 仅匹配流中的特定字符串并忽略其余字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10287620/

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