gpt4 book ai didi

lexer - 为什么 'a' 。 ANTLR 中的 .'z' 匹配通配符,如 $ 或 £

转载 作者:行者123 更新时间:2023-12-04 06:50:31 25 4
gpt4 key购买 nike

当我运行以下语法时:

test : WORD+;

WORD : ('a'..'z')+;
WS : ' '+ {$channel = HIDDEN;};

我给输入“?测试”为什么 antlr 接受它作为有效输入?我认为 ('a'..'z') 只会匹配小写字母表中的字符?

最佳答案

ANTLR 在解析输入字符串时确实会产生错误 ?test使用您发布的语法。通常情况下,错误在于围绕 ANTLR 使用的工具(不幸的是,我发现 ANTLRWorks 也经常发生这种情况!)。

要自己(正确)测试它,请创建一个文件 Test.g :

grammar Test;

test : WORD+;

WORD : ('a'..'z')+;

WS : ' '+ {$channel = HIDDEN;};

和一个文件 Main.java :
import org.antlr.runtime.*;

public class Main {
public static void main(String[] args) throws Exception {
ANTLRStringStream in = new ANTLRStringStream("?test");
TestLexer lexer = new TestLexer(in);
CommonTokenStream tokens = new CommonTokenStream(lexer);
TestParser parser = new TestParser(tokens);
parser.test();
}
}

并下载 ANTLR 3.2 JAR 的副本在同一个目录中。

现在生成一个词法分析器和解析器:
java -cp antlr-3.2.jar org.antlr.Tool Test.g 

编译所有Java源文件:
javac -cp antlr-3.2.jar *.java

并运行主类:
java -cp .:antlr-3.2.jar Main 

(如果您使用的是 Windows,请将 : 替换为 ;!)

这将产生以下错误消息:
line 1:0 no viable alternative at character '?'

关于lexer - 为什么 'a' 。 ANTLR 中的 .'z' 匹配通配符,如 $ 或 £,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3188574/

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