kmyacc - 多言語対応LALRパーサー生成系

What is KMyacc?

kmyaccはyaccやbisonと同じLALRパーサージェネレータです。 yaccと互換性があり、生成される表が小さく、ホスト言語としてC以外にJava, JavaScript,Perlでも使うことができます。

News

ダウンロード

こちらからどうぞ→kmyacc-4.1.4.tar.gz

ソースのみです。Windowsでも使えると思いますがためしていません。

インストール

  1. アーカイブを展開
    gzip -d kmyacc-4.1.4.tar.gz | tar xvf -
    
  2. ディレクトリ kmyacc-4.1.4 に cd
  3. Makefileの以下の部分を修正
    BIN = /usr/local/bin
    PARLIB = /usr/local/lib
    
    それぞれ、kmyaccバイナリ、プロトタイプファイルを置く場所
  4. 以下を実行
    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の作者のもの)ですので、 使用上の制限は全くありません。

TODO リスト


Last update: 2006/02/28
森 公一郎
Email: kmori at acm dot org