Eclipse Java コンパイラ (JDT.rsc) によって生成される構文ツリーにアクセスするために、Rascal ライブラリを使用しています。
抽象構文ツリーがどのように機能するかを修正しようとしています。私が見逃していることの1つは、「variableBinding」です。変数宣言という 1 つのステートメントを含む 1MyClass
つのメソッドを持つ非常に単純なクラスを想像してください。文字列変数の宣言は、以下の AST 抜粋で表されます。doNothing()
myVar
myVar
@bindings
注釈内のvariableBinding
キーの下に、変数へのパスの連続するコンポーネントを表すリストがありますmyVar
。最後の項目は、 Id コンストラクターによって表される実際の変数自体を表しvariable(str name, int id)
ます。
質問: ID の意味は何ですか?
doNothing()
メソッドを複製して名前を付けると、AST でandがdoNothing2()
見つかるため、これは確かに一意ではありません。それは正確に何を識別しますか?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>)
]
...