2017-10-18 3 views
0

パーズツリーに入力を解析するパーサーを作成する必要がありますが、トークンとトークンが自動的に生成されて問題が発生しました。次の例では、私の問題.Thisの短いバージョンである文法である:レクサーでANTLRトークンが自動生成される

s : a B a; 
    a : '-' C | C; 
    B : '-' | '+'; 
    C : '1' | '2';> 
    WS : (' ' | '\t' | '\r' | '\n')+ -> skip ; 

マイ入力:- 1 - 2

私の出力ツリーは(s (a - 1) <missing B> (a - 2))です。自動ファイルlexer.javaで生成されたT __ *のようないくつかのトークンがある(s (a - 1) - (a 2))

私が欲しいの出力ツリーがあります。私は彼らのうちの1人が私のトークンBを複製するT__* : '-'であると信じています。最初に現れるので、-というシンボルはBに通じません。シンボル-のすべてがT __ *につながります。私はこれが理由だと思う。私は正しい?

正しいツリーを取得するにはどうすればよいですか?

答えて

0

さて、私は解決策を得ました。新しい文法はこのようにすべきです。

s : a b a; 
    a : '-' c | c; 
    b : ADD | SUB; 
    c : ONE | TWO; 
    ADD : '+'; 
    SUB : '-'; 
    ONE : '1'; 
    TWO : '2'; 
    WS : (' ' | '\t' | '\r' | '\n')+ -> skip ; 

私は解決策を見つけることができますが、間違った文法で何が起こったのかまだ分かりません。とにかく、誰かが同じ問題を抱えているのを助けて欲しい。

関連する問題