正しく解析する次の if ステートメントがあります。
ifStatement
: 'IF' expression 'THEN' statementBlock
(options {greedy=true;}
: 'ELSE' statementBlock)?
;
ここで、これを AST に解析したいと思います。これが私がやった方法です:
ifStatement
: 'IF'^ expression 'THEN'! statementBlock
(options {greedy=true;}
: 'ELSE'! statementBlock)?
;
組み立て説明書がうまくいかないようだったので、!
とを追加しました。^
->
私の結果は、3 つの子を持つ AST です。1 は条件、2 と 3 はステートメント ブロックです。else の部分はオプションです。else がない場合、ノード 3 はありません。
問題は、ステートメント ブロックが常に空であることです。それを修正する方法は?