2014年10月15日水曜日

書きたいことを並べてみよう(ブログ構想)

コンパイラ技術のブログを始めるにあたって、筆者(kimrin)が書きたいものと皆さん(オーディエンス)の知りたいことが一致するといいなと思ってます。
なので「この辺知りたい」「この辺解説してほしい」などありましたらコメントでお願いしますです。

基本的にパープルドラゴンブックを読む進めて行きたいと思います。ドラゴンブックを咀嚼して、反芻して、自分なりの直感的な解釈ができたらなと思います。

本来ならコンパイラ技術を蓄積するに当たって、フロントエンド(パーサーなど)からバックエンド(機械語生成)まで幅広く学ばねばとは思うのですが、最近はLLVMのような便利な物があるので、これを使わない手はなかろう、と言う感じで次のものを目指したいと思います。
  • 俺言語を作るw
  • (具体的には)LLVM用の俺言語フロントエンドを作る
さらに、フロントエンドを作るプログラミング言語として今回Julia言語(#JuliaLang)を選びました!ぱちぱち! Lexer, Parserは自分で手書きしてもいいのですが、せっかくなら機械の力を借りたいところです。しかしまだJulia言語には公式のlex, yacc相当のプログラムがありません。そこで、
  • Julia言語のLexical scanner generator (flexみたいなの)を作る!
  • そしてJulia言語のparser(LL(1)かLALR(1))を作る
  • そのために必要なJulia言語の基礎を与える
と、壮大な(ほんと壮大だ!)目標を掲げてみたいと思います!

ドラゴンブックで対応するのが3章のLexical scannerの章と、4章5章のparserやsyntax directed translationsのあたりでしょうか。最終的にIR(ドラゴンブックだと3番地コード)の生成が出来ればそれでOKかなぁということで、ドラゴンブック後半の最適化については全面的にLLVMにまかせちゃお♡という計画です。

最終的に目標として俺言語を作る、でもLLVMで楽して作っちゃおう、でもってコンパイルドライバを作って前処理からリンクまで一気にできるコマンドを開発しちゃおう、と、
これだけで3年は掛かるだろうって内容です。ご確認ください。。。

このブログを通してオーディエンスの方が、コンパイラの基礎知識が備わるだけでなくJulia言語の基礎が備わるようになればいいなと思っています。そして、試行錯誤の過程も惜しむ事無く公開して行きたいと思います。できればブログ自体が本に出来るようなcomplehensiveな内容を目指しているのですが、Lexer, Parserの章がかなり大きくなってしまうかな、って感じです。

まずはLLVMを僕が知らなすぎるので、まずは勉強って感じでしょうか(きつね本もありますし)。そしてflex,JLexなどのソースコードリーディングをして、オレオレLexer generatorをまずは作ってみるところを目指します!

自分でもどんなブログになるのか想像がつきませんが(おい)叱咤激励鞭でぺんぺんの程、どうぞ宜しくお願い致します。

どんな俺言語を作るかについてはまだ考えていません。
まずはJulia言語Lexer generatorを目指したいと思いますです。

個人的には二層の言語の層があって、下の簡単な言語を上位の言語が操作できるような体系を考えていますが、まだ具体的にその構想を形にはしていません。まだできてません。

まぁあの、正直どこまで続くか分かりませんが、どうぞ生暖かく見守っていただけたらと思う次第ですー。

あ、Julia言語を選んだ理由ですが、その言語が僕は好きだから、という単純な理由です。それ以上でもそれ以下でもありませんw

とりあえず、ここから読み始めてます。

http://llvm.org/docs/tutorial/LangImpl1.html

かしこw

0 件のコメント:

コメントを投稿