BitMaPT:
おそらく、これは重複質問ですが、私はここに掲載ので、私は、私が読みたい質問を見つけることができません。
私はANTLRの初心者だ、と私はスカラ座でのビジターパターンを抽象構文木を作るためにAntlr4を使用するようにしてください。
しかし、私は1つのリストに以下のように複数のルールの結果をまとめる方法を考え出すことはできません。
foo: (rule0 | rule1)*
rule0: ...
rule1: ...
私は、各リスト(すなわちのリストを取得する方法がある知っているrule0
のとのリストrule1
sが)。しかし、その方法はおそらく(私は秩序を維持したい)出現順序を壊します。以下のような方法はrules=(rule0 | rule1)*
、私は以下のように書くことができないので、また、許可されていません
ctx.rules().asScala.map(...).toArray`
私の質問は、ビジターパターンの出現の順序を維持しつつ、複数のルールの結果のリストにまとめる方法です。
マイクLischke:
訪問者は自分の解析の実行によって生成された解析木の上に歩行器です。ビジタークラスは、各パーサコンテキストの子を反復処理し、ビジター関数を呼び出します。手段は実際の情報は、解析ツリーに格納され、あなたはそれを直接使用することができます。
あなたが得るときFooContext
FOUND含まれているその子のリストに対して繰り返しRule0Context
そしてRule1Context
それらは、ソースコードで使用された順にインスタンスを。これは、あなたは、両方のサブパーツの位置情報だけでなく、サブ部分のそれぞれについての情報を提供します。