6

ANTLRでこの問題を解決する正しい方法は何ですか:

単純な文法規則があります。たとえば、任意の数の要素を持つリストです。

list
: '[]' 
| '[' value (COMMA value)* ']'

リストの戻り値を割り当て、その値をプロダクションからの戻り値の実際のリストにしたい場合、それを行う適切な方法は何ですか? 私が楽しんでいる代替案は次のとおりです。

  • これらのリストを追跡するために、グローバル スコープで独自のスタックを作成します
  • 私の下のツリーノードを調べて、そのように情報を抽出してみてください
  • ルールに関連付けられたアクション内からそのようなリストに簡単にアクセスできる方法を見つけたいと思っています。

問題は次のとおりだと思います。クールな子供たちはどのようにそれを行うのですか?

(参考までに、私はANTLRにpython APIを使用していますが、別の言語で私を襲った場合は、それを処理できます)

4

2 に答える 2

5

C# では、次のようになります。

list returns [ List<string> ValueList ]
    @init
    {
        $ValueList = new List<string>();
    }
    : '[]'
    | '[' value {$ValueList.Add(value);} (COMMA value {$ValueList.Add(value);})* ']'
    ;
于 2009-04-17T04:41:40.800 に答える
1

もっと簡単な方法があると思います

list returns [ List values ]
: '[]' 
| '[' vs+=value (COMMA vs+=value)* ']' {
        $values = $vs;
}
于 2009-05-24T17:38:37.150 に答える