【发布时间】:2022-01-10 19:16:11
【问题描述】:
我正在尝试基于现有的 Java 语法构建自己的解析器。
即使我使用来自 the source repo 的 Java7 语法,生成解析器并使用来自 antlr-4.9.3-complete.jar 的 TestRig 给定代码:
1 public class Test {
2 public static void main() {
3 test
4 int b = 1;
5 }
6 }
我收到以下错误:
第 4:8 行在输入 'test\n int' 处没有可行的替代方案
因此,由于某种原因,它将不正确的“test”行与正确的“int”行连接起来。 当它应该指向“test”(第3行)时,它还说“line 4:8”指向“int”行。
(在常规的 Java 编辑器中,我会看到“测试”一词的正确错误突出显示,听起来像):
“语法错误,插入“VariableDeclarators”以完成LocalVariableDeclaration”
我该怎么做才能在 ANTLR 中遇到类似的错误,所以它只会选择错误的“测试”行? 很可能只是我误解了antlr如何解释错误,那么我该如何让听众至少正确报告起跑线?
【问题讨论】:
-
不是 ANTLR 用户,但 Java 不是面向行的。第 3 行和第 4 行是单个语句或声明。
test后跟某些符号(例如,'='、'['、'(')可能没问题。在处理完下一行之前,您不能说它是错误的。