gpt4 book ai didi

java - 使用 TestRig 时 ANTLR 解析有效,但使用 Java 解析时失败

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

我有一个用于评估 csv 文件的语法,并且根据 TestRig 它可以正常工作。生成以下解析树:

enter image description here

但是,如果我在应用程序中使用以下 java 代码,则解析失败并出现错误:

line 2:33 no viable alternative at input '=A2+B2+C1'

更新:我现在直接使用文件中的 Char 流,但错误仍然存​​在。

 private static void parseFile(String fileName) throws IOException {
CSVLexer lexer = new CSVLexer(CharStreams.fromFileName("test.csv", StandardCharsets.UTF_8));
CSVParser parser = new CSVParser(new CommonTokenStream(lexer));
ParseTree tree = parser.start(); //start is the start rule
}

据我了解,TestRig 也是这样做的,那么它怎么会成功,而这个却失败呢?

这是我用来测试的test.csv:

12;=35.5+6*2;=A1+B1
"szoveg";"masik szoveg";=A2+B2+C1

至于如何调用 TestRig,我使用命令行:

java -cp path\to\antln\jar org.antlr.v4.gui.TestRig CSV start -gui

更新:使用时

java -cp path\to\antln\jar org.antlr.v4.gui.TestRig CSV start -gui test.csv

我也遇到同样的错误。

最佳答案

所以问题是我的语法要求在每行末尾有一个换行符,而 test.csv 在最后一行没有换行符!

在最后一行按回车键并保存后,它现在可以工作了。

解决方案:重写行规则以使最后一个换行符可选使用java在从文件读取的字符串末尾添加换行符(我选择这个)

if(!fileContent.endsWith("\n")) {
fileContent += "\n";
}

关于java - 使用 TestRig 时 ANTLR 解析有效,但使用 Java 解析时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60247681/

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