我目前正在尝试实现一个Antlr v4语法,该语法将文本电子表格作为输入(每个'单元格由选项卡分隔)。语法支持引用其他单元格,包括算术表达式中使用的引用。输出与输入相同,但所有表达式都已完成,每个引用都被引用的单元格的整数值替换。
示例输入:
1 9 5
4 3 A3
=A2+C3 6
并输出:
1 9 5
4 3 5
15
我不确定如何在我的java应用程序中实现解析器。由于单元格可能包含尚未解析的单元格的引用,因此语法必须在计算表达式之前完成解析单元格。根据我的理解,语法访问者可以在解析期间返回值,但是无法计算包含对尚未解析的单元格的引用的表达式。
最好的方法是什么?我能够确定的唯一解决方案是将语法分成两个较小的语法,一个解析单元格,另一个解析单元格内的表达式。但是,我宁愿只用一个解析过程来保持简单。
在一句话中,在Antlr4中,处理对尚未解析的数据的引用的最佳方法是什么?
答案 0 :(得分:3)
在解析运行期间无需评估表达式。通过两个步骤完成整个过程:首先解析输入以获取解析树,然后使用访问者对其进行评估。在第一步之后,所有单元格都被解析为解析树,因此可以在评估步骤中解析。