狠狠撸

狠狠撸Share a Scribd company logo
8
Most read
10
Most read
11
Most read
コンパイラ(LexとYaccを使う)
かたわれ@名古屋低レイヤー勉強会
1
自己紹介
? 名前:かたわれ(八木 鶫)
? 所属:名古屋工業大学
? Twitter:@_ktwr
? 最近の困りごと:研究が忙しすぎる
2
お品書き
? コンパイラについて緩い説明
? 字句解析器とlex
? 構文解析器とyacc
? 電卓を作ってみよう
3
コンパイラって?
4
コンパイラとは
? コンピュータの自動プログラミングに使うプログラ
ムの一種。一般に、一定方式に従い、使用機種には
依存せず人間に分かりよい形で書いたプログラムを、
機械コード(=機械がすぐ実行できる形)に翻訳す
る仕事を受け持つ。また「コンパイラ言語(=コン
パイラに与えるために約束された人工言語)」の略
語としても使う。
5
高級言語(C,C++,Java等)を
機械語に翻訳する
コンパイラの処理の流れ
6
字句解析
構文解析
実行コード生成
ソースコード
実行
lexとyaccとは
7
字句解析
構文解析
実行コード生成
ソースコード
実行
Lex(flex)
Yacc(bison)
実行コード生成
ソースコード
実行
字句解析
? Lexical Analysis:字句解析
? 字句解析器はトークンを得る
? トークン:「num」「=」「1」「+」「3」「;」
?意味を持つ、これ以上分割できない最小単位
? トークンには型がつけられる
? 「1」「3」 :NUMBER
? 「=」 :ASSIGN
? 「+」 :ADD
? 「num」 :IDENT
? 「;」 :SEMICOLON
8
num = 1 + 3;
型は構文解析で使うよ
lex:a lexical analyzer generator
? 字句解析器を生成するプログラム
? 正規表現とC言語の関数を使う
9
C言語の変数を記述
ここの変数は構文解析でも使える
字句解析のルールを記述
一番長いルールに一致するものを探す
Lex単体で動かすときの
main関数を記述
構文解析
? syntactic analysis:構文解析
? 字句解析をもとに構文木を作る
? バッカスナウア(BNF)記法が使われる
? IDENT ::= NUMBER ADD NUMBER
10
+
1 3
yacc:yet another compiler compiler
? 構文解析器を生成するパーサジェネレーター
? lexと違って単独で動かすことはない
? 三部構成
? 宣言部
? トークンを宣言する
? ルール部
? BNF記法で構文規則記述
? プログラム部
? main関数記述
11
簡単な電卓を作る
12
lexプログラム yaccプログラム四則演算の
トークン作成
改行の
トークン作成
数字の
トークン作成
何もしない
ための定義
Lexで作成した
トークンを宣言
下に行くほど
優先度が高い
構文木作成
再帰で処理を記入
プログラム部
CTFで出るの?
? (ほぼ)出ない
? 知ってることでやれることがあるかも
? ASIS Cyber Security Contest Finals 2014:
ASIS calc?
? lexとyaccのプログラムは
解析できないとき
「syntax error」と出す
13
?https://github.com/ctfs/write-ups-2014/tree/master/asis-ctf-finals-2014/asis-calc
参考文献
? https://www.ibm.com/developerworks/jp/linux/
library/l-lexyac/index.html
? http://cis.k.hosei.ac.jp/~nakata/lectureCompiler
/YaccLex/
14
Ad

Recommended

[DL輪読会]Unsupervised Neural Machine Translation
[DL輪読会]Unsupervised Neural Machine Translation
Deep Learning JP
?
2014 1-19
2014 1-19
Satoshi KOJIMA
?
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
Jun-ichi Sakamoto
?
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
Fujio Kojima
?
笔测颁丑补谤尘入门
笔测颁丑补谤尘入门
Yuki Nagai
?
iii_SGMI #5 "OOP & Design Patterns"
iii_SGMI #5 "OOP & Design Patterns"
Ryohei Suzuki
?
インフラエンジニアが办8蝉でアプリを作って见えた今后のインフラ
インフラエンジニアが办8蝉でアプリを作って见えた今后のインフラ
susumu tanaka
?
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
健太 田上
?
Literate Computing for Infrastructure - インフラ?コード化の実践におけるIPython (Jupyter) Not...
Literate Computing for Infrastructure - インフラ?コード化の実践におけるIPython (Jupyter) Not...
No Bu
?
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
?
nl-1. 形態素解析と構文解析
nl-1. 形態素解析と構文解析
kunihikokaneko1
?
笔测迟丑辞苍と搁によるテ?ータ分析环境の构筑と机械学习によるテ?ータ认识 第3版
笔测迟丑辞苍と搁によるテ?ータ分析环境の构筑と机械学习によるテ?ータ认识 第3版
Katsuhiro Morishita
?
エンジニアのためのSpread Sheets講座101 - Google Apps Script -
エンジニアのためのSpread Sheets講座101 - Google Apps Script -
Yuki Katada
?
一口で何度もおいしい?顿厂尝
一口で何度もおいしい?顿厂尝
You&I
?
2011年10月21日
2011年10月21日
nukaemon
?
私と翱厂厂の25年
私と翱厂厂の25年
MITSUNARI Shigeo
?
OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作
uchan_nos
?
フ?ロク?ラミンク?言語として考えたTensor flow
フ?ロク?ラミンク?言語として考えたTensor flow
Keisuke Umezawa
?
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
Narami Kiyokura
?
捗るリコメンドシステムの里事情(ハッカドール)
捗るリコメンドシステムの里事情(ハッカドール)
mosa siru
?
C# と .NET と ???
C# と .NET と ???
ShinichiAoyagi
?
RedPen texconf15
RedPen texconf15
Recruit Technologies
?
Clrh 110827 wfho
Clrh 110827 wfho
Tomoyuki Obi
?
BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版
BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版
Go Yamada
?
自己紹介とC# Devkitについて.pptx
自己紹介とC# Devkitについて.pptx
hkharu0803
?
Common Lisp ユーザへのScheme紹介
Common Lisp ユーザへのScheme紹介
たけおか しょうぞう
?
サーバーレス(Azure Functions)でスマートスピーカーのアプリを作ってみよう ( #GoogleHome / LINE #Clova/ Ama...
サーバーレス(Azure Functions)でスマートスピーカーのアプリを作ってみよう ( #GoogleHome / LINE #Clova/ Ama...
Madoka Chiyoda
?
セキュリティ関连翱厂厂ツール绍介
セキュリティ関连翱厂厂ツール绍介
kataware
?
名古屋セキュリティ勉强会LT~学内CTFの话~
名古屋セキュリティ勉强会LT~学内CTFの话~
kataware
?

More Related Content

Similar to コンパイラ(尝别虫と测补肠肠を使う) (20)

Literate Computing for Infrastructure - インフラ?コード化の実践におけるIPython (Jupyter) Not...
Literate Computing for Infrastructure - インフラ?コード化の実践におけるIPython (Jupyter) Not...
No Bu
?
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
?
nl-1. 形態素解析と構文解析
nl-1. 形態素解析と構文解析
kunihikokaneko1
?
笔测迟丑辞苍と搁によるテ?ータ分析环境の构筑と机械学习によるテ?ータ认识 第3版
笔测迟丑辞苍と搁によるテ?ータ分析环境の构筑と机械学习によるテ?ータ认识 第3版
Katsuhiro Morishita
?
エンジニアのためのSpread Sheets講座101 - Google Apps Script -
エンジニアのためのSpread Sheets講座101 - Google Apps Script -
Yuki Katada
?
一口で何度もおいしい?顿厂尝
一口で何度もおいしい?顿厂尝
You&I
?
2011年10月21日
2011年10月21日
nukaemon
?
私と翱厂厂の25年
私と翱厂厂の25年
MITSUNARI Shigeo
?
OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作
uchan_nos
?
フ?ロク?ラミンク?言語として考えたTensor flow
フ?ロク?ラミンク?言語として考えたTensor flow
Keisuke Umezawa
?
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
Narami Kiyokura
?
捗るリコメンドシステムの里事情(ハッカドール)
捗るリコメンドシステムの里事情(ハッカドール)
mosa siru
?
C# と .NET と ???
C# と .NET と ???
ShinichiAoyagi
?
RedPen texconf15
RedPen texconf15
Recruit Technologies
?
Clrh 110827 wfho
Clrh 110827 wfho
Tomoyuki Obi
?
BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版
BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版
Go Yamada
?
自己紹介とC# Devkitについて.pptx
自己紹介とC# Devkitについて.pptx
hkharu0803
?
Common Lisp ユーザへのScheme紹介
Common Lisp ユーザへのScheme紹介
たけおか しょうぞう
?
サーバーレス(Azure Functions)でスマートスピーカーのアプリを作ってみよう ( #GoogleHome / LINE #Clova/ Ama...
サーバーレス(Azure Functions)でスマートスピーカーのアプリを作ってみよう ( #GoogleHome / LINE #Clova/ Ama...
Madoka Chiyoda
?
Literate Computing for Infrastructure - インフラ?コード化の実践におけるIPython (Jupyter) Not...
Literate Computing for Infrastructure - インフラ?コード化の実践におけるIPython (Jupyter) Not...
No Bu
?
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
?
nl-1. 形態素解析と構文解析
nl-1. 形態素解析と構文解析
kunihikokaneko1
?
笔测迟丑辞苍と搁によるテ?ータ分析环境の构筑と机械学习によるテ?ータ认识 第3版
笔测迟丑辞苍と搁によるテ?ータ分析环境の构筑と机械学习によるテ?ータ认识 第3版
Katsuhiro Morishita
?
エンジニアのためのSpread Sheets講座101 - Google Apps Script -
エンジニアのためのSpread Sheets講座101 - Google Apps Script -
Yuki Katada
?
一口で何度もおいしい?顿厂尝
一口で何度もおいしい?顿厂尝
You&I
?
2011年10月21日
2011年10月21日
nukaemon
?
OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作
uchan_nos
?
フ?ロク?ラミンク?言語として考えたTensor flow
フ?ロク?ラミンク?言語として考えたTensor flow
Keisuke Umezawa
?
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
Narami Kiyokura
?
捗るリコメンドシステムの里事情(ハッカドール)
捗るリコメンドシステムの里事情(ハッカドール)
mosa siru
?
BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版
BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版
Go Yamada
?
自己紹介とC# Devkitについて.pptx
自己紹介とC# Devkitについて.pptx
hkharu0803
?
サーバーレス(Azure Functions)でスマートスピーカーのアプリを作ってみよう ( #GoogleHome / LINE #Clova/ Ama...
サーバーレス(Azure Functions)でスマートスピーカーのアプリを作ってみよう ( #GoogleHome / LINE #Clova/ Ama...
Madoka Chiyoda
?

More from kataware (6)

セキュリティ関连翱厂厂ツール绍介
セキュリティ関连翱厂厂ツール绍介
kataware
?
名古屋セキュリティ勉强会LT~学内CTFの话~
名古屋セキュリティ勉强会LT~学内CTFの话~
kataware
?
Isolation forest
Isolation forest
kataware
?
驳颈迟入门(讲义っぽく)
驳颈迟入门(讲义っぽく)
kataware
?
0511 lt
0511 lt
kataware
?
Abc#004d
Abc#004d
kataware
?
セキュリティ関连翱厂厂ツール绍介
セキュリティ関连翱厂厂ツール绍介
kataware
?
名古屋セキュリティ勉强会LT~学内CTFの话~
名古屋セキュリティ勉强会LT~学内CTFの话~
kataware
?
Isolation forest
Isolation forest
kataware
?
驳颈迟入门(讲义っぽく)
驳颈迟入门(讲义っぽく)
kataware
?
Ad

コンパイラ(尝别虫と测补肠肠を使う)