ANTLR でリストの戻り値を処理する方法
-
09-09-2019 - |
質問
ANTLR でこの問題を解決する正しい方法は何ですか:
たとえば、任意の数の要素を含むリストについての単純な文法規則があります。
list
: '[]'
| '[' value (COMMA value)* ']'
list の戻り値を割り当て、その値をプロダクションからの戻り値の実際のリストにしたい場合、適切な方法は何でしょうか?私が考えている代替案は次のとおりです。
- これらのリストを追跡するためにグローバル スコープで独自のスタックを作成します
- 私の下のツリーノードを調べて、そのようにして情報を抽出してみてください
- スマートでクールな方法でそれにアクセスします。ルールに関連付けられたアクション内からそのようなリストに簡単にアクセスできる方法を知りたいと思っています。
質問は次のとおりだと思います。クールな子供たちはどうやってやっているのでしょうか?
(参考までに、私は ANTLR に Python API を使用していますが、別の言語を教えてもらえれば、それを処理できます)
解決
C#では、それは次のようになります。
list returns [ List<string> ValueList ]
@init
{
$ValueList = new List<string>();
}
: '[]'
| '[' value {$ValueList.Add(value);} (COMMA value {$ValueList.Add(value);})* ']'
;
他のヒント
私はもっと簡単な方法があることことができると思います。
list returns [ List values ]
: '[]'
| '[' vs+=value (COMMA vs+=value)* ']' {
$values = $vs;
}
所属していません StackOverflow