« Rapid System Prototyping with FPGAs | Main | 今日の日記 »

2007.12.11

[HOP] ちょっと停滞ぎみ

簡単なパーサーを組み合わせて、複雑なパーサーを作るところではまる。
パーツとしてのパーサーは、HOPに合わせてクロージャを使って生成していますが、再帰的なパースが上手くクロージャにならない。

expressin -> INT + expression

という再帰的なルールを、こう書きたい

$expression = concatenate(lookfor('INT'), lookfor(['OP', '+']), $expression));

これは、perlでもエラーになる。HOPでは、my $Expression = parser { $expression->(@_) };と書いて上手くリンクさせているのだが、Pythonでは、僕の実力的にどうにもこうにもならない。クロージャの中には、クロージャのリストがあって、そこを書き換えれば良さそうなんだけど、それが出来たらすでにクロージャじゃない。
しょうがないのでclassで書き直してみた。__setitem__で[]のアクセスができて感激。
それっぽくパースができた。

|

« Rapid System Prototyping with FPGAs | Main | 今日の日記 »

Comments

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/17341530

Listed below are links to weblogs that reference [HOP] ちょっと停滞ぎみ:

« Rapid System Prototyping with FPGAs | Main | 今日の日記 »