Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Cコンパイラ自作はじめてみた
Search
mikiken
September 17, 2022
Programming
280
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Cコンパイラ自作はじめてみた
セキュリティ・キャンプ全国大会2022アフターイベント LT発表
mikiken
September 17, 2022
More Decks by mikiken
See All by mikiken
ライフゲームの製作
mikiken
0
270
簡単な4bitCPUの作成
mikiken
0
1.5k
Webブラウザでページが表示されるまで
mikiken
0
94
seccamp2022 成果発表
mikiken
0
58
Other Decks in Programming
See All in Programming
すこし踏み込む CancellationToken
htkym
2
1.5k
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
210
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2.6k
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
570
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
200
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
3.1k
FreeBSDでZabbixを動かす
kenkino
0
340
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
130
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
370
The Rails Doctrine Decade
koic
2
430
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
110
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
130
Featured
See All Featured
Building AI with AI
inesmontani
PRO
1
1.3k
Docker and Python
trallard
47
4.2k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
730
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
240
Google's AI Overviews - The New Search
badams
0
1.6k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
550
RailsConf 2023
tenderlove
30
1.6k
Evolving SEO for Evolving Search Engines
ryanjones
0
300
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
390
The SEO Collaboration Effect
kristinabergwall1
1
580
How GitHub (no longer) Works
holman
316
150k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
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