Upgrade to Pro — share decks privately, control downloads, hide ads and more …

自作コンパイラやっていきの巻💪💪/making my own compiler!

66487f93d23ed4f64752cffbafdb938a?s=47 convto
August 21, 2019

自作コンパイラやっていきの巻💪💪/making my own compiler!

自作コンパイラで関数定義、呼び出しが動くところまでやったので勉強会で話したよ

参考リンク:
- https://www.sigbus.info/compilerbook
- https://github.com/BNFC/bnfc/blob/master/examples/C/C.cf

66487f93d23ed4f64752cffbafdb938a?s=128

convto

August 21, 2019
Tweet

More Decks by convto

Other Decks in Programming

Transcript

  1. 自作コンパイラやっていきの巻 2019/08/21 piece of cake x マクアケ 合同 beer bash

  2. convto jisibari Twitter: @convto Github: convto 2

  3. おもむろにDEMO

  4. 関数定義までうごく

  5. 関数定義までうごく

  6. もくじ - どうしてCコンパイラ? - コンパイラってどういうプログラム? - 生の文字は無理!トークンにしちゃうよ編 - トークンを構文木にしちゃうよ編 -

    構文木からアセンブリ生成すっぞオラ編 - まとめ
  7. もくじ - どうしてCコンパイラ? - コンパイラってどういうプログラム? - 生の文字は無理!トークンにしちゃうよ編 - トークンを構文木にしちゃうよ編 -

    構文木からアセンブリ生成すっぞオラ編 - まとめ
  8. これが気になってたか ら

  9. https://www.sigbus .info/compilerbook

  10. お盆にノリで着手した - レイヤの低い部分に興味があった - ブラックボックス感を減らしたかった - ドメイン特化のソフトウェアだから実装が面白いか もとおもった

  11. 乗るしかない、 このビックウェーブに

  12. もくじ - どうしてCコンパイラ? - コンパイラってどういうプログラム? - 生の文字は無理!トークンにしちゃうよ編 - トークンを構文木にしちゃうよ編 -

    構文木からアセンブリ生成すっぞオラ編 - まとめ
  13. コードを実行可能(またはそれに近い)形式に変換

  14. コンパイラの仕事 - 文字を解析する - 解析した文字の関係性を整理する - 整理された情報からアセンブリ、機械語、特定ラ ンタイム向けバイトコードなどを吐く

  15. もくじ - どうしてCコンパイラ? - コンパイラってどういうプログラム? - 生の文字は無理!トークンにしちゃうよ編 - トークンを構文木にしちゃうよ編 -

    構文木からアセンブリ生成すっぞオラ編 - まとめ
  16. イメージはこんな感じです

  17. トークナイズ - 生の文字列を意味のある粒度で区切る。空白文 字スキップとかもする - メタ情報を付与する(予約語、識別子、終端、etc) - 関係性の整理はせず、使いやすくするだけ

  18. トークナイズ - 生の文字列を意味のある粒度で区切る。空白文 字スキップとかもする - メタ情報を付与する(予約語、識別子、終端、etc) - 関係性の整理はせず、使いやすくするだけ 料理でいうと下ごしらえ

  19. もくじ - どうしてCコンパイラ? - コンパイラってどういうプログラム? - 生の文字は無理!トークンにしちゃうよ編 - トークンを構文木にしちゃうよ編 -

    構文木からアセンブリ生成すっぞオラ編 - まとめ
  20. イメージはこんな感じです + foo = 1 2

  21. 抽象構文木(AST)にパース - トークンをBNFに則って再帰下降法でパース - 木構造にして関係性の情報をあたえる - それぞれのノードにメタ情報を付与(IF文ノード、 関数定義ノード、など)

  22. BNF?(!bmf) - Backus-Naur form の略 - 文脈自由文法の記法の一つ - C の定義はここ

    https://github.com/BNFC/bnfc/blob/master/example s/C/C.cf - ノリは `再帰的な正規表現` みたいな感じ
  23. 再帰下降法? - パースしたい構文を上から順に再帰的に降って いって末端から値を確定させていく - BNF どうりに書くだけでパースできて魔法っぽい

  24. ブラック・マジシャン

  25. もくじ - どうしてCコンパイラ? - コンパイラってどういうプログラム? - 生の文字は無理!トークンにしちゃうよ編 - トークンを構文木にしちゃうよ編 -

    構文木からアセンブリ生成すっぞオラ編 - まとめ
  26. イメージはこんな感じです + foo = 1 2

  27. ASTからアセンブリ生成 - ASTの種類などの情報からアセンブリ生成 - 再帰的にASTをたどってコード生成

  28. = foo + 1 2 構文木から生成

  29. もくじ - どうしてCコンパイラ? - コンパイラってどういうプログラム? - 生の文字は無理!トークンにしちゃうよ編 - トークンを構文木にしちゃうよ編 -

    構文木からアセンブリ生成すっぞオラ編 - まとめ
  30. まとめ(1/2) - 構文解析についての知見が増えた、いまなら JSONパーサーとか作れそう - Cとアセンブリ触ったことなかったので新鮮で面白 かった - コンパイラ一般の仕事のイメージが何となくつい た

  31. まとめ(2/2) - 黒・魔・導 を一つ覚えた(半分冗談、不思議な感 じはするけど全然黒くないです) - 全体的に興味ある人はこれを読んでください!! めっちゃおすすめです!!!! https://www.sigbus.info/compilerbook#index12

  32. - プレゼンテーションテーマは SlidesCarnival の ヨークプレゼンテーションテンプレー ト を利用しています クレジット表記

  33. ご清聴 ありがとうございました