当前位置: 首页 > 知识库问答 >
问题:

从抽象语法树中查找变量/方法引用

彭霄
2023-03-14

我想查找对给定变量或给定方法的调用方的引用,就像Eclipse中的“opencallhierarchy”和“(find)references”特性一样(当您右键单击变量或方法时)

现在我已经获得了源代码的抽象语法树。我使用 Eclipse JDT 来获取 AST,它也解析所有类型绑定。

所以我的问题是,是否可以仅使用此抽象语法树来查找变量/方法引用?(我知道一些代码分析库使用字节码来实现这一点。我想知道是否可以使用AST执行类似的分析。)

共有1个答案

孟和玉
2023-03-14

只使用这个抽象语法树?

您无法仅给定 AST 轻松确定引用或调用方。AST只是语法,并不直接编码它的含义(含义的子集是“这被引用调用”)。

为了确定什么被引用或调用,必须以非常复杂的方式分析AST,以建立符号范围并确定什么接触什么。(Java标准/书的大部分都是关于这个过程的,但是由于它的复杂性,信息分散在整本书中)。

一个好的前端通常会从AST中计算出这些信息,或者可以轻松提取的信息。我相信EclipseJDT有这个信息,并提供了一组API来访问它,但我对JDT一无所知。

但是你不能简单地从AST中得到它。

 类似资料:
  • 我对我的代码有个问题。我已经将类Employee声明为抽象。其下有3种抽象方法:抽象字符串部门、抽象int work_days和抽象void print_info。 现在,我创建了扩展Employee抽象类的第二类Tester。我实现了抽象方法。

  • 假设我有一个叫做book的类,它是抽象的,有一个私有变量price,它的getter方法也是抽象的。 现在让我们假设我有一个旧的Book类,它继承了Book的所有属性,但也有一个与之相关联的年龄。另外,我希望这个类从它的父类重写getPrice方法。这就是我陷入困境的地方,因为price变量是私有的,而父类有一个抽象的getter方法。 谢谢。

  • 目录类 驱动程序类

  • 在Java(Spring Boot)应用程序中,我使用JUnit和Mockito,并想测试以下服务方法: 方法在以下抽象类中: 我尝试使用和stub通过,但在我看来,它不能像在具体的类中那样被模拟。那么,我应该如何模拟抽象类中的变量和方法呢?

  • 所以我有一个类类型的列表。例如,我有一个教室和一个学生班。 我创建了一个学生列表:

  • 问题内容: 我想从令牌列表构造一个AST。我正在编写脚本语言,并且已经完成了词法分析部分,但是我不知道如何创建AST。所以问题是,我该如何处理: 并将其转换为抽象语法树?最好是,我想在 没有 ANTLR之类的库的 情况下 这样做,我想自己尝试从头开始。但是,如果这是一项非常复杂的任务,那么我不介意使用库:)谢谢 问题答案: 基本诀窍是要认识到,无论解析如何完成,都是以增量步骤进行的,包括逐一读取令