Eclipse JDT Java Parser中是否有任何类型的"line visitor"?如果没有,有人知道一个好的解决方法吗?



我想从 Java 文件中访问 AST 中的节点,并提取一些与这些节点相关的信息。但是,我想通过源代码文件中的行引导的 AST。我知道有关于与每个节点关联的行的信息,但问题是访问节点的默认方式是通过特定的访问者。因此:1. 为了避免对节点的冗余访问,2. 在尝试枚举所有可能的节点类型(或访问者(时不要产生开销,以及 3.为了有序地访问节点中的信息,我需要一种"线路访问者",以便我可以按照源代码文件中的行访问 AST 节点中的信息。有人知道使用 Eclipse JDT API 的标准方法甚至解决方法吗?

我不能从对Eclipse AST的直接了解中发言。 但是,在某种程度上,这些简单地用Java表示的传统AST,那么在没有任何其他帮助的情况下,您必须访问树节点的几乎就是通过走树。

当然,您可能可以通过 Eclipse 与此类节点关联的某种类型的文件位置信息(行、列等(来过滤 AST 节点,并简单地过滤带有所需行标记的 AST。 除非你真的,真的关心这需要多长时间(文件大小是最坏情况下的线性,我对其他系统的经验表明你每个源行平均有~5-7个节点(,这应该足以满足你的目的。

如果您想直接访问与特定行号关联的树节点,我猜您不走运。 显然,您可以通过走一次树并收集所有具有特定线号的节点来自己构建这样的地图;然后,您可以获得所需的访问权限。[您实际上只需要关联一条线的第一个 AST(在无序树行中最左边(即可使用此地图] 同样,构建此列表的树步道是线性时间,您只需支付一次。 FWIW,我一直在构建处理 AST 的工具~~30 年,并没有发现它特别有用。

如果你坚持,并且你想降低构建这张地图的成本,我会查看解析机制内部并修改它以完成这项工作。 它制造所有这些 AST 节点,并且在制造此类节点时知道正在处理的源的行号。 生成 AST 节点时,构建映射应该很容易。 如果你的解析器有任何好处,它实际上是线性时间,添加这项工作不会改变线性度。

最新更新