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
seccamp2022 成果発表
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
mikiken
August 12, 2022
58
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
seccamp2022 成果発表
mikiken
August 12, 2022
More Decks by mikiken
See All by mikiken
ライフゲームの製作
mikiken
0
270
簡単な4bitCPUの作成
mikiken
0
1.5k
Webブラウザでページが表示されるまで
mikiken
0
94
Cコンパイラ自作はじめてみた
mikiken
0
280
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
BBQ
matthewcrist
89
10k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
New Earth Scene 8
popppiees
4
2.6k
The Pragmatic Product Professional
lauravandoore
37
7.5k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
330
How to build a perfect <img>
jonoalderson
1
6k
Ruling the World: When Life Gets Gamed
codingconduct
0
380
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Designing for Performance
lara
611
70k
Transcript
三木 健太郎 (@mikikeen) セキュリティ・キャンプ 全国大会 2022 L3 Cコンパイラゼミ 成果報告
• 入力として与えられたソースコードを解析、解釈し、機械語に 一対一に変換できるアセンブリファイルを出力するプログラム。 https://atmarkit.itmedia.co.jp/ait/articles/0612/02/news016_2.html
• 字句解析(tokenize): プログラム全体を、意味をもつ記号に分解する 例: • 構文解析: 字句解析で生成したトークンを解析し、トークン間の関係を表す 木構造(AST: Abstract Syntax
Tree)を構築する 例: →
• 意味解析: 構文上は正しいが、入力プログラムが意味的に間違っていないか を検査する(例: 変数に代入を行う際に、両辺で型が一致している かを調べるなど) • コード生成: 意味解析までの過程で得られた構文木をもとに、アセンブリ を出力する
• mikiken/9cc (github.com)
• 演算子(四則演算) • 演算子(比較演算) • 間接演算子 とアドレス演算子 • ローカル変数 •
文 • 文 • (ブロック/compound statements) • 引数6つまでの関数呼び出しおよび定義 • というキーワード • ポインタ型 • ポインタの加算・減算 • 演算子
• 型 • 配列(実装が間に合わなかった) • 構造体 • ︙ など、重要な機能がまだまだ不足している キャンプ終了後も開発を継続し、セルフホストを目指したい
• 日常の生活ではまず出会うことができないようなハイレベルな 方に囲まれて開発を行うことができ、良い刺激になった。 • コンパイラに型機能を導入するのに苦戦した。そのデバッグの 際に、深夜まで講師、チューター、他の参加者(L3ゼミだけでなく 他のクラスの方も含め)多くの方に手伝っていただいた。本当にあ りがとうございました。