Feedforce Developer Blog

フィードフォース開発者ブログ

『雰囲気でコンパイラを書いたら大変だった話』というタイトルで発表しました

最高ウデマエ S+12 の id:mizukmb です。

社内勉強会で『雰囲気でコンパイラを書いたら大変だった話』という内容でお話しました。

成果物

github.com

ソースコードの読み込み〜構文解析を行います。

github.com

解析木を読み込んで実行します。書籍:『RubyでつくるRuby ゼロから学びなおすプログラミング言語入門』の写経コードです。

↓実行結果

=== Source code ===
if(1 < 3) {
    10 + 2
    if(1< 10) { 100 }
}

=== AST ===
["if",
 ["<", ["lit", 1], ["lit", 3]],
 ["stmts",
  ["+", ["lit", 10], ["lit", 2]],
  ["if", ["<", ["lit", 1], ["lit", 10]], ["lit", 100]]]]

 === output ===
100

感想

  • コンパイラちゃん育成ゲーム欲しい!
    • ちょっとずつ言葉を覚えてくれるのでたのしいです!
  • 既存言語のインタプリタじゃなくてオリジナル言語作るのすごい
  • 実際にやってみるところがすごいと思う!!
    • ありがとうございます!
  • スライドが簡潔で読みやすい
    • Google スライド便利!
  • コンパイラ作成はやり始めると楽しそう。しかし沼の匂いも…
    • ちゃんと動いた時は感動します
  • DB 移行もある中、お疲れ様でした!
    • 仕事とプライベートは別にする派なので(?)
  • 私は四則演算までしか作らなかった
    • ミニマルプログラミング言語良いですね!
  • ISUCON もがんばってください!!
    • 頑張ります!
  • AST がほぼ Lisp
    • S 式意識していました
  • 自分は挫折しそう
    • 私も挫折しかけました…
  • 面白い!!
  • めちゃ良かったです!
    • やったー!!
  • 1から言語をデザインしているのか(写経ではなく)
    • 全角スペースを許容するのがこの言語の強みです(!?)
  • 少しずつ大きくなっていく感がよくわかる発表だった
    • レベルを上げて技を覚える感覚があってたのしいです。RPGゲームっぽさがありますね
  • コンパイラーの話はムズカシイ
    • 私も理解不足なところが多くて未熟な発表になってしまいました…
  • ドラゴンブック読むしか
    • 買うかー

ありがとうございました!

f:id:mizukmb:20171020182947p:plain

f:id:mizukmb:20171020183004p:plain

f:id:mizukmb:20171020183011p:plain

参考図書

本発表に向けてコンパイラを実装した際に参考にした本です。

コンパイラ (新コンピュータサイエンス講座)

コンパイラ (新コンピュータサイエンス講座)

字句解析、構文解析は『コンパイラ』という本を参考に実装しました(Amazon リンクとなっています)。

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門(紙書籍)www.lambdanote.com

解析木を読み込んで実行するまでは前述した『RubyでつくるRuby ゼロから学びなおすプログラミング言語入門』の中で登場するコードを写経したものを流用しています。