1

ANTLR の出力で小さな問題が発生しました。次のような非常に小さな文法があります。

test   : states;
states : '.states' state+;
state  : stateID=ID {
     System.out.println("state: " + $stateID.text);
       | stateID=ID '{' state* '}' {
     System.out.println("SubState: " + $stateID.text);};

そして、私が解析したいものは次のようになります:

a{
   b
   c{
      d
    }
}

問題は、取得する最初のトークンが 'b' で、その後に 'd' と 'c' が続くことです。しかし、私の意図はそれを私のデータ構造に解析することであり、それらの親を知る必要があります。この順番で分かっていることは、c は d の親ですが、b はどうでしょうか? この例を次の形式に書き直した場合:

a{
   c{
      d
    }
   b
}

すべて順調。では、最後の例でそれを書くという制約なしに、誰が b の親であるかを知る方法はありますか?

4

1 に答える 1