Antlr4に1つのリストに複数のルールの一緒にゼロ以上のパターンを配置する方法はありますか?

BitMaPT:

おそらく、これは重複質問ですが、私はここに掲載ので、私は、私が読みたい質問を見つけることができません。

私はANTLRの初心者だ、と私はスカラ座でのビジターパターンを抽象構文木を作るためにAntlr4を使用するようにしてください。

しかし、私は1つのリストに以下のように複数のルールの結果をまとめる方法を考え出すことはできません。

foo: (rule0 | rule1)*
rule0: ...
rule1: ...

私は、各リスト(すなわちのリストを取得する方法がある知っているrule0のとのリストrule1sが)。しかし、その方法はおそらく(私は秩序を維持したい)出現順序を壊します。以下のような方法はrules=(rule0 | rule1)*、私は以下のように書くことができないので、また、許可されていません

ctx.rules().asScala.map(...).toArray`

私の質問は、ビジターパターンの出現の順序を維持しつつ、複数のルールの結果のリストにまとめる方法です。

マイクLischke:

訪問者は自分の解析の実行によって生成された解析木の上に歩行器です。ビジタークラスは、各パーサコンテキストの子を反復処理し、ビジター関数を呼び出します。手段は実際の情報は、解析ツリーに格納され、あなたはそれを直接使用することができます。

あなたが得るときFooContextFOUND含まれているその子のリストに対して繰り返しRule0ContextそしてRule1Contextそれらは、ソースコードで使用された順にインスタンスを。これは、あなたは、両方のサブパーツの位置情報だけでなく、サブ部分のそれぞれについての情報を提供します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=362278&siteId=1