1

我正在使用 Rascal 库来访问由 Eclipse Java 编译器 (JDT.rsc) 生成的语法树。

我正在尝试修复抽象语法树的工作原理。我无法理解的一件事是“variableBinding”。想象一个非常简单的类MyClass,其中一个方法doNothing()包含一个语句,一个变量声明myVar。字符串变量的声明myVar在下面的 AST 片段中表示。

@bindings注释内部,在variableBinding键下,有一个列表,表示变量路径的连续组件myVar。最后一项表示实际变量本身,由 Id 构造函数表示variable(str name, int id)

问: id是什么意思?

它当然不是唯一的,因为当我复制该方法doNothing()并为其命名时doNothing2(),我会在 AST 中找到variable("doNothing",0)和。variable("doNothing2",0)它究竟识别什么?

...
variableDeclarationFragment(
  "myVar",
  none())[
  @bindings=(
    "typeBinding":entity([
        package("java"),
        package("lang"),
        class("String")
      ]),
    "variableBinding":entity([
        class("MyClass"),
        method(
          "doNothing",
          [],
          entity([primitive(void())])),
        variable("myVar",0) // Here it's 0, but 
      ])
  ),
  @javaType=entity([
      package("java"),
      package("lang"),
      class("String")
    ]),
  @location=|project://my-project/src/MyClass.java|(60,5,<4,15>,<4,19>)
]
...
4

1 回答 1

3

这个 id 字段实际上似乎是 Eclipse 内部分配的标识符。您可以在此处查看 IVariableBinding 接口的 JavaDoc,它是 id 的来源:

http://help.eclipse.org/indigo/topic/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/dom/IVariableBinding.html#getVariableId()

getVariableId()如果它没有带您到那里,只需单击链接,而是将您带到界面页面。这是为获取 id 而调用的方法。据我所知,它不是很有用,在大多数情况下可以安全地忽略。

于 2013-08-15T02:32:04.467 回答