[HOP] ちょっと停滞ぎみ
簡単なパーサーを組み合わせて、複雑なパーサーを作るところではまる。
パーツとしてのパーサーは、HOPに合わせてクロージャを使って生成していますが、再帰的なパースが上手くクロージャにならない。
expressin -> INT + expression
という再帰的なルールを、こう書きたい
$expression = concatenate(lookfor('INT'), lookfor(['OP', '+']), $expression));
これは、perlでもエラーになる。HOPでは、my $Expression = parser { $expression->(@_) };と書いて上手くリンクさせているのだが、Pythonでは、僕の実力的にどうにもこうにもならない。クロージャの中には、クロージャのリストがあって、そこを書き換えれば良さそうなんだけど、それが出来たらすでにクロージャじゃない。
しょうがないのでclassで書き直してみた。__setitem__で[]のアクセスができて感激。
それっぽくパースができた。
The comments to this entry are closed.


Comments