变量(str name,int id)中的“id”起什么作用?

时间:2013-08-14 14:44:06

标签: rascal

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

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

@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>)
]
...

1 个答案:

答案 0 :(得分: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的方法。据我所知,它不是很有用,在大多数情况下可以安全地被忽略。