ちょっと研究上の都合から、小さな小さなインタプリタを書く必要性が生じました。作ったプログラミング言語の拡張 BNF はこんな感じ。
program ::= (command* command ::= | <変数> = e | <変数> := e | if e then { (command
* } [ else { (command
* } ] | while e { (command
* } | print e | dump e ::= <整数> | <変数> | unary e | e binary e unary ::= - binary ::= + | - | * | / | % | = | == | <> | < | > | <= | >=
全部でぴったり 300 行です。バイト数が 8,837 というのはつまらなかった。コメントでも書いて 8,888 バイトにすればよかった。Objective Caml を使いました。ビルドには OMake を使っています。
よかったらzip を公開してますので拾って行って下さい。ダウンロードされた方はコメントしてね。LALR 文法の shift/reduce 衝突が 13 個も出るので文法記述のお手本にはなりませんね。S 先生@東工大かN 先生@筑波大にお願いして直してもらおうか。。。
-
ピンバック : KW · 300行で書いたインタプリタ から - 2010年2月20日 12:28 PM
-
エラーメッセージが丁寧ですね.


4個のコメント
この投稿記事に対するコメントのフィード
トラック・バックのリンク: http://ken-wakita.net/research/ja/2010/02/interpreter-in-300-loc-8kb/trackback/