gpt4 book ai didi

java - ANTLR Decision 可以使用多种选择来匹配输入

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:49:11 25 4
gpt4 key购买 nike

我有这个简单的语法:

expr: factor;

factor: atom (('*' ^ | '/'^) atom)*;

atom: INT
| ':' expr;

INT: ('0'..'9')+

当我运行它时它说:

Decision 可以使用多个备选方案 1,2 来匹配诸如 '*' 之类的输入

Decision 可以使用多个备选方案 1,2 来匹配诸如 '/' 之类的输入

我无法发现歧义。红色箭头是怎么指的?任何帮助将不胜感激。

enter image description here

最佳答案

假设您要解析输入:

:3*4*:5*6

由您的语法生成的解析器可以将此输入匹配到以下解析树中:

enter image description here

和:

enter image description here

(我省略了冒号以使树更清晰)

请注意,您看到的只是一个警告。通过特别指示 ANTLR (('*' | '/') atom)* 需要贪婪地匹配,如下所示:

factor
: atom (options{greedy=true;}: ('*'^ | '/'^) atom)*
;

解析器“知道”采用哪个替代方案,并且不会发出警告。

编辑

我用 ANTLR 3.3 测试语法如下:

grammar T;

options {
output=AST;
}

parse
: expr EOF!
;

expr
: factor
;

factor
: atom (options{greedy=true;}: ('*'^ | '/'^) atom)*
;

atom
: INT
| ':'^ expr
;

INT : ('0'..'9')+;

然后从命令行:

java -cp antlr-3.3.jar org.antlr.Tool T.g

不会产生任何警告(或错误)。

关于java - ANTLR Decision 可以使用多种选择来匹配输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7954142/

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