Irony ParseTreeに不要な項目を追加しないようにする。 | 妄想プログラマのらくがき帳

2012年10月15日月曜日

Irony ParseTreeに不要な項目を追加しないようにする。

IronyでParser.Parse()を使いParseTreeを構築すると、
1ステートメントの区切りである";"(セミコロン)や、単なる区切りの","(カンマ)といった文字まで、
1つのノードとしてParseTreeに追加されます。

以前のエントリーで定義した文法クラスで作成したParseTree。
画面右側のParseTreeに"; (Key symbol)"というノードが確認できます。














多くの場合、これらのノードはその後の処理において不要なノードであり、
ParseTreeを走査するうえで邪魔なノードになります。
なので、指定した項目をノードに追加しないようにする方法があったら便利ですよね。

そんな「あったらいいなぁ」な方法が、Ironyにはちゃんと用意されています。

方法はとっても簡単です。
文法クラスのコンストラクタでMarkPunctuation()を呼び出して、
ParseTreeに追加しない項目を登録するだけです。

下の例では、";"(セミコロン)をParseTreeに追加しないようにする命令です。
this.MarkPunctuation(";");
この命令をコンストラクタに追加した文法クラスでParseTreeを作成してみると…












画面右側のParseTreeから"; (Key symbol)"というノードが消えているのが分かります。

文法が複雑になればなるほど不要なノードが増えてくるので、MarkPunctuation()をうまく使って、
綺麗なParseTreeが作成されるようにしときましょう。

0 件のコメント:

コメントを投稿