Antlr解析树节点坐标?

Antlr parse Tree node coordinates?

我用的是Antlr4 4.9.2

我需要在分析的不同阶段对同一个解析树执行多次传递。我的应用程序处理的一些文件非常大,因此我希望能够避免将解析树保留在内存中,并且能够每次都重新生成不同的解析树实例。到目前为止一切顺利。

我的挑战是我需要一种方法来 (a) 比较节点和 (b) 快速访问与等效解析树的不同实例一起工作的节点。

例如,以下伪代码生成表示同一文件的解析树的两个独立实例(因此解析树及其节点是等效的)

ParseTree parseTree1 = parse(myFile, myGrammar)
ParseTree parseTree2 = parse(myFile, myGrammar) 

由于myFilemyGrammar相同,所以parseTree1parseTree2是等价的,但是是不同的实例,不满足Objects.equals()

在 ANTLR 中,我如何以这样的方式表示节点的坐标 C:

您可以使用 ANTLR4's XPath 实现来直接访问给定解析树路径中的节点。下面是我如何在 MySQL 代码中获取所有查询表达式,解析后:

const expressions = XPath.findAll(tree, "/query/simpleStatement//queryExpression", this.parser);