Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Cコンパイラ自作はじめてみた
Search
mikiken
September 17, 2022
Programming
260
0
Share
Cコンパイラ自作はじめてみた
セキュリティ・キャンプ全国大会2022アフターイベント LT発表
mikiken
September 17, 2022
More Decks by mikiken
See All by mikiken
ライフゲームの製作
mikiken
0
230
簡単な4bitCPUの作成
mikiken
0
1.3k
Webブラウザでページが表示されるまで
mikiken
0
80
seccamp2022 成果発表
mikiken
0
44
Other Decks in Programming
See All in Programming
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
310
PHPで TLSのプロトコルを実装してみる
higaki_program
0
610
メッセージングを利用して時間的結合を分離しよう #phperkaigi
kajitack
3
520
へんな働き方
yusukebe
6
2.9k
ロボットのための工場に灯りは要らない
watany
12
3.2k
今からFlash開発できるわけないじゃん、ムリムリ! (※ムリじゃなかった!?)
arkw
0
170
Nuxt Server Components
wattanx
0
220
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
6
1.1k
Codex CLI でつくる、Issue から merge までの開発フロー
amata1219
0
260
PHP 7.4でもOpenTelemetryゼロコード計装がしたい! / PHPerKaigi 2026
arthur1
1
450
AI時代の脳疲弊と向き合う ~言語学としてのPHP~
sakuraikotone
1
1.7k
Kubernetesでセルフホストが簡単なNewSQLを求めて / Seeking a NewSQL Database That's Simple to Self-Host on Kubernetes
nnaka2992
0
190
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Building the Perfect Custom Keyboard
takai
2
720
Into the Great Unknown - MozCon
thekraken
40
2.3k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
140
Typedesign – Prime Four
hannesfritz
42
3k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
780
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
500
Information Architects: The Missing Link in Design Systems
soysaucechin
0
850
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
250
4 Signs Your Business is Dying
shpigford
187
22k
Transcript
セキュリティ・キャンプ全国大会2022アフターイベント
• 神戸大学 工学部 電気電子工学科 2年生 • セキュリティキャンプ全国大会 2022 L3 Cコンパイラゼミ
参加 • 多少プログラミングを触ったことはあったが、 本格的にやったことはなかった mikiken @mikikeen
• 去年、大学の授業でほぼ初めてC言語に触れた • セキュキャン応募時点(5月)では、ポインタがあまり理解できて いなかった()
• C(のサブセット)言語のコンパイラを作った • 現在も作っている
• 変数・1次元配列・関数定義までは実装済 • まだchar型がない https://github.com/mikiken/9cc
C言語のプログラム アセンブラ 機械語のプログラム コンパイル アセンブル・リンク
• • • • 中間コード生成 (やってない) • 最適化 (やってない) •
C言語のプログラム アセンブラ コンパイル
入力プログラムを意味のあるトークンに分ける
字句解析したトークンをもとに構文木を構築する
• 構文上正しいが間違っているプログラムを弾く は構文上正しいが、どうみてもおかしい • 型の情報を付与したり • キャストもここで行ったり
ここまでで生成した構文木を、再帰的に辿って アセンブラを出力する
None
• if・else・while・forといった制御構文はラベルとジャンプを 用いて実現されている
• if・else・while・forといった制御構文はラベルとジャンプを 用いて実現されている • ifやwhileをネストするとバグる
• ラベルのカウントにグローバル変数を用いていた • 関数が再帰的に呼ばれた際に、label_countがインクリメント され、ラベルに一貫した値を使えていなかった
• ここで初めてコンパイラに型を導入する必要が生じる • Compiler bookの解説が割とサラッとしていたので 実装方針が中々分からなかった • Discordでみなさんに教えてもらい、なんとか突破
他にも色々あるが、割愛
• Compiler bookを読了する • グローバル変数 • char型 • 文字列リテラル •
構造体 ︙
• フィボナッチ数列のn項目の値を求めるプログラムぐらいなら 意外と簡単にコンパイルできることが分かった。 • セキュキャン期間中、デバッグに手間取っていたところ、 深夜(というか翌朝)まで多くの方に手伝ってもらった。 ありがとうございました。
None