0
我目前正在尝试实现以文本电子表格作为输入(每个“单元”由选项卡分隔)的Antlr v4语法。语法支持引用其他单元格,包括在算术表达式中使用的引用。输出与输入相同,但所有表达式都已完成,每个引用都被引用的单元格的整数值替换。Antlr:引用尚未解析的数据
例输入:
1 9 5
4 3 A3
=A2+C3 6
输出:
1 9 5
4 3 5
15
我不确定如何实现我的Java应用程序分析器。由于单元格可能包含尚未分析过的单元格的引用,因此语法必须在计算表达式之前完成分析单元格。根据我的理解,语法访问者可以在解析期间返回值,但无法评估包含对尚未解析的单元格的引用的表达式。
解决此问题的最佳方法是什么?我能够确定的唯一解决方案是将语法分成两个更小的语法,一个解析单元格,另一个解析单元格内的表达式。但是,我宁愿保持简单,只需一个解析过程。
在一句话中,在Antlr4中,处理尚未解析数据的引用的最佳方法是什么?
+1恕我直言,使用自己的模型进行评估总是一个好主意。而不是由antlr生成的* Context对象。 – Yevgeniy
我第一次看这个答案时误解了这个答案。在Antlr中究竟如何执行评估步骤?根据我的理解,访问者进行深度优先遍历。我需要的是细胞第一个宽度,然后深入细胞内的表达式 – bgregor
如果您需要不同的步行策略,然后创建您自己的访客类。 AbstractParseTreeVisitor中的所有内容都可以被覆盖。实现'visitChildren()'方法的自己的变体。 –