2005年02月22日

ミニ言語(2)

  
ミニ言語がなんとか動き始めました。ちょっと感動ものですね。構文ツリーをVisitorパターンを使ってたどりながら、実行するインタープリターです。P−CODEのようなオブジェクトを吐き出し、それを実行するインタープリタにしたほうが、実行速度は速くなると思われたのですが、処理速度が命の言語ではないので、パーザーが吐き出した構文ツリーをたどりながら実行する方式としました。
なお、この方式の利点は、演算子の優先順位を構文ツリーの中に埋め込めることです。BNFを書くときに優先順位を考慮した構文にしておくのですが、こうすれば、演算子の優先順位を意識することなく、構文ツリーをたどるだけで、計算が出来てしまいます。
なかなか言葉だけでは表現が難しいですね。

とにかく、デザインパターンを適用することで、思いのほか短時間で動くようになりました。
State,Compsite,Interpreter, Visiter, Iterator ,Singleton, NullObjectといったパターンを使っています。
このようなパターンを知らなかったら、きっと数倍の時間がかかっていたと思います。まだまだ完成にはほど遠いですが、先が見えました。


 

この記事へのトラックバックURL