かとじゅんの技術日誌

技術の話をするところ

コンパイラは作らないけど字句解析や構文解析は役に立つかも

今日、アキバにいったら、調子に乗ってこんな本を買ってしまいました。

ふつうのコンパイラをつくろう 言語処理系をつくりながら学ぶコンパイルと実行環境の仕組み

ふつうのコンパイラをつくろう 言語処理系をつくりながら学ぶコンパイルと実行環境の仕組み

コンパイラかー、うーん作ってみてもよいかな。一生のうち1回なら言語のひとつぐらい作っていてもよいか。。。あ、いや、そこまでしなくてもテキストを解析するような字句解析や構文解析は知っているとよいことがあるかも知れない。
ちょうどid:ashigeruからLL(k)のパーサとはってことで勉強会に参加していたので、勢いで買ってみた。手のひらサイズなのに600ページ超え超大作というのは間違いないw読み応えありそうw

この書籍ではパーサジェネレータとしてJavaCCを使ってLinux/x86ターゲットのバイナリをコンパイルできるCb言語*1コンパイラを実装します。目次の後半は、アセンブリ言語や関数呼び出しや変数、スタックフレームとかハードウェアにより近い分野のキーワードであふれているが、前半のパーサで構文を解析して抽象構文木(AST)を作るところは勉強会で学んだ知識で読めそう。
自分もJavaCCを使ってスクリプト言語的な何かを実装してみようかなと。

とりあえず、作ってみたいもの

  1. CROND形式の文字列のパース
  2. コマンドラインパラメータのパース
  3. トランスレータ(Java<-->PHP5, Java<-->Ruby)

1,2はすでにあるもの使えばよいのですが、勉強の意味も込めてやるといいかもしれない。トランスレータは妄想w

追記:
数日JavaCCでEBNFを弄ってみてCRONDの文字列の解析をEBNFで表現するのは向いてないことがわかった。単純に文字の形式で分解したほうがメリットがあるw

*1:C言語拡張