kmyaccはyaccやbisonと同じLALRパーサージェネレータです。 yaccと互換性があり、生成される表が小さく、ホスト言語としてC以外にJava, JavaScript,Perlでも使うことができます。
こちらからどうぞ→kmyacc-4.1.4.tar.gz。
ソースのみです。Windowsでも使えると思いますがためしていません。
gzip -d kmyacc-4.1.4.tar.gz | tar xvf -
BIN = /usr/local/bin PARLIB = /usr/local/libそれぞれ、kmyaccバイナリ、プロトタイプファイルを置く場所
make make install
まだ書きかけですが→kmyaccユーザースガイド
なお、C以外の言語のインターフェースは暫定的なもので、今後変更される 可能性があります。
JavaScriptでデモプログラムを作ってみました。 LR-Parserの動作をスタックと先読みトークンの変化で見せるものです。
ページ下のフォームに、2+3*4 のような数式(整数と加減乗除のみ)を入力し、 [START]ボタンを押すと、パーシングが始まります。次いで[STEP]ボタンを押 すと、1ステップだけパーサーの動作が進みます。[AUTO]を押すと連続実行されます。
ソースはこちらです。 複数のブラウザで動作させるために、JavaScript Tips Collectionのライブラリを使用しています。
初版(2.*)は1987年ごろに、8086とZ80で動作するように書かれました。この版 は、表をシーケンシャルサーチしていたため少し動作が遅いという欠点があり ましたが、CP/Mでフル仕様のC言語パーサを処理し動かすことができました。
その次の版(3.*)は1993年にリリースされ、SunOS/Linux/DOSで動くようになり ました。表はシーケンシャルサーチをやめましたが、かなりがんばって圧縮 したので、Berkeley YaccやBisonよりは小さくなっています。
その後、自分としてはとくに改良の必要も感じず、いじる時間もなかった ため、12年間放っていました。最近になってJavaで言語処理系を開発すると いう機会があったので、Java対応のために久しぶりに手を入れました。 表の生成アルゴリズムも少し改良されて、バージョン3にくらべ、さらに小さくなりました。
ライセンスは、バージョン4からGPL2に変更されました。 ただし、kmyaccが生成するコードは(元になるプロトタイプも含め) 従来通りpublic domain(ないし*.yの作者のもの)ですので、 使用上の制限は全くありません。