Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
自作コンパイラやっていきの巻 2019/08/21 piece of cake x マクアケ 合同 beer bash
Slide 2
Slide 2 text
convto jisibari Twitter: @convto Github: convto 2
Slide 3
Slide 3 text
おもむろにDEMO
Slide 4
Slide 4 text
関数定義までうごく
Slide 5
Slide 5 text
関数定義までうごく
Slide 6
Slide 6 text
もくじ - どうしてCコンパイラ? - コンパイラってどういうプログラム? - 生の文字は無理!トークンにしちゃうよ編 - トークンを構文木にしちゃうよ編 - 構文木からアセンブリ生成すっぞオラ編 - まとめ
Slide 7
Slide 7 text
もくじ - どうしてCコンパイラ? - コンパイラってどういうプログラム? - 生の文字は無理!トークンにしちゃうよ編 - トークンを構文木にしちゃうよ編 - 構文木からアセンブリ生成すっぞオラ編 - まとめ
Slide 8
Slide 8 text
これが気になってたか ら
Slide 9
Slide 9 text
https://www.sigbus .info/compilerbook
Slide 10
Slide 10 text
お盆にノリで着手した - レイヤの低い部分に興味があった - ブラックボックス感を減らしたかった - ドメイン特化のソフトウェアだから実装が面白いか もとおもった
Slide 11
Slide 11 text
乗るしかない、 このビックウェーブに
Slide 12
Slide 12 text
もくじ - どうしてCコンパイラ? - コンパイラってどういうプログラム? - 生の文字は無理!トークンにしちゃうよ編 - トークンを構文木にしちゃうよ編 - 構文木からアセンブリ生成すっぞオラ編 - まとめ
Slide 13
Slide 13 text
コードを実行可能(またはそれに近い)形式に変換
Slide 14
Slide 14 text
コンパイラの仕事 - 文字を解析する - 解析した文字の関係性を整理する - 整理された情報からアセンブリ、機械語、特定ラ ンタイム向けバイトコードなどを吐く
Slide 15
Slide 15 text
もくじ - どうしてCコンパイラ? - コンパイラってどういうプログラム? - 生の文字は無理!トークンにしちゃうよ編 - トークンを構文木にしちゃうよ編 - 構文木からアセンブリ生成すっぞオラ編 - まとめ
Slide 16
Slide 16 text
イメージはこんな感じです
Slide 17
Slide 17 text
トークナイズ - 生の文字列を意味のある粒度で区切る。空白文 字スキップとかもする - メタ情報を付与する(予約語、識別子、終端、etc) - 関係性の整理はせず、使いやすくするだけ
Slide 18
Slide 18 text
トークナイズ - 生の文字列を意味のある粒度で区切る。空白文 字スキップとかもする - メタ情報を付与する(予約語、識別子、終端、etc) - 関係性の整理はせず、使いやすくするだけ 料理でいうと下ごしらえ
Slide 19
Slide 19 text
もくじ - どうしてCコンパイラ? - コンパイラってどういうプログラム? - 生の文字は無理!トークンにしちゃうよ編 - トークンを構文木にしちゃうよ編 - 構文木からアセンブリ生成すっぞオラ編 - まとめ
Slide 20
Slide 20 text
イメージはこんな感じです + foo = 1 2
Slide 21
Slide 21 text
抽象構文木(AST)にパース - トークンをBNFに則って再帰下降法でパース - 木構造にして関係性の情報をあたえる - それぞれのノードにメタ情報を付与(IF文ノード、 関数定義ノード、など)
Slide 22
Slide 22 text
BNF?(!bmf) - Backus-Naur form の略 - 文脈自由文法の記法の一つ - C の定義はここ https://github.com/BNFC/bnfc/blob/master/example s/C/C.cf - ノリは `再帰的な正規表現` みたいな感じ
Slide 23
Slide 23 text
再帰下降法? - パースしたい構文を上から順に再帰的に降って いって末端から値を確定させていく - BNF どうりに書くだけでパースできて魔法っぽい
Slide 24
Slide 24 text
ブラック・マジシャン
Slide 25
Slide 25 text
もくじ - どうしてCコンパイラ? - コンパイラってどういうプログラム? - 生の文字は無理!トークンにしちゃうよ編 - トークンを構文木にしちゃうよ編 - 構文木からアセンブリ生成すっぞオラ編 - まとめ
Slide 26
Slide 26 text
イメージはこんな感じです + foo = 1 2
Slide 27
Slide 27 text
ASTからアセンブリ生成 - ASTの種類などの情報からアセンブリ生成 - 再帰的にASTをたどってコード生成
Slide 28
Slide 28 text
= foo + 1 2 構文木から生成
Slide 29
Slide 29 text
もくじ - どうしてCコンパイラ? - コンパイラってどういうプログラム? - 生の文字は無理!トークンにしちゃうよ編 - トークンを構文木にしちゃうよ編 - 構文木からアセンブリ生成すっぞオラ編 - まとめ
Slide 30
Slide 30 text
まとめ(1/2) - 構文解析についての知見が増えた、いまなら JSONパーサーとか作れそう - Cとアセンブリ触ったことなかったので新鮮で面白 かった - コンパイラ一般の仕事のイメージが何となくつい た
Slide 31
Slide 31 text
まとめ(2/2) - 黒・魔・導 を一つ覚えた(半分冗談、不思議な感 じはするけど全然黒くないです) - 全体的に興味ある人はこれを読んでください!! めっちゃおすすめです!!!! https://www.sigbus.info/compilerbook#index12
Slide 32
Slide 32 text
- プレゼンテーションテーマは SlidesCarnival の ヨークプレゼンテーションテンプレー ト を利用しています クレジット表記
Slide 33
Slide 33 text
ご清聴 ありがとうございました