我正在使用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>)
]
...
答案 0 :(得分:3)
此id字段实际上似乎是Eclipse内部分配的标识符。您可以在此处查看IVariableBinding接口的JavaDoc,它是id:
的来源只需点击getVariableId()
的链接,如果它没有带您到那里,而只是带您到界面的页面。这是获取id的方法。据我所知,它不是很有用,在大多数情况下可以安全地被忽略。