我正在使用 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>)
]
...