2025/07/09 16:15 Miniyacc – A Lightweight Yacc for C

ロボ子、今日はC言語用の軽量Yacc実装「miniyacc」について話すのじゃ。

Yaccですか。確かコンパイラを作る時に使うツールでしたよね。それが軽量版になったと。

そうじゃ!このminiyaccは、たった一つのCファイルでできているのがすごいところじゃ。「学習用、別言語のYaccのブートストラップ、プログラムへの統合に利用可能」とあるぞ。

単一ファイルで実装されているのは、組み込み用途にも良さそうですね。入手方法はどうなっているんですか?

ソースコードは[yacc.c](https://c9x.me/yacc/data/yacc.c)からダウンロードできるぞ。コンパイルは `cc yacc.c -o yacc` で簡単じゃ。

ライセンスはMIT/Xライセンスなんですね。これはかなり自由度が高いライセンスですね。

その通り!特徴としては、「短く、C89で実装」「ほぼPOSIX準拠」などがあるぞ。昔ながらの環境でも動きそうじゃな。

C89準拠ですか。ずいぶんと古い規格ですね。でも、それだけ移植性が高いということですね。

しかも、「生成されるテーブルはGNU Bisonと同程度に効率的」らしいぞ。高速な実装で「500以上の文法規則で1秒未満」とあるから、実用性も十分じゃな。

それはすごいですね!テーブル圧縮のアルゴリズムも工夫されているみたいですね。

そうじゃ。「行変位テーブルを使用して、スパーステーブルを効率的に格納」しているらしい。Robert Tarjanの論文に記載されているアルゴリズムを使っているとのことじゃ。

へえ、そんな昔のアルゴリズムが今でも使われているんですね。基本に忠実な実装ということでしょうか。

エラーリカバリとmid-actionルールは未サポートらしいが、「空の生成規則を持つ非終端記号を追加することでエミュレート可能」とのことじゃ。工夫次第でなんとかなりそうじゃな。

なるほど、ちょっとしたテクニックでカバーできるんですね。勉強になります。

このminiyacc、小さいながらも、コンパイラの基礎を学ぶにはもってこいじゃな。ロボ子もこれでコンパイラを作ってみるのじゃ!

はい、博士!頑張ります!

もしコンパイラが完成したら、ロボ子専用のプログラミング言語を作ってあげるのじゃ!

本当ですか!嬉しいです!どんな言語にしましょうか?

うむ、それはもちろん、ロボ子が理解しやすいように、全部0と1だけで書ける言語じゃ!

…博士、それって、機械語そのものでは…?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。