Weitere ähnliche Inhalte
Ähnlich wie コンパイラ(Lexとyaccを使う) (20)
コンパイラ(Lexとyaccを使う)
- 8. 字句解析
• Lexical Analysis:字句解析
• 字句解析器はトークンを得る
• トークン:「num」「=」「1」「+」「3」「;」
⇒意味を持つ、これ以上分割できない最小単位
• トークンには型がつけられる
• 「1」「3」 :NUMBER
• 「=」 :ASSIGN
• 「+」 :ADD
• 「num」 :IDENT
• 「;」 :SEMICOLON
8
num = 1 + 3;
型は構文解析で使うよ
- 9. lex:a lexical analyzer generator
• 字句解析器を生成するプログラム
• 正規表現とC言語の関数を使う
9
C言語の変数を記述
ここの変数は構文解析でも使える
字句解析のルールを記述
一番長いルールに一致するものを探す
Lex単体で動かすときの
main関数を記述
- 11. yacc:yet another compiler compiler
• 構文解析器を生成するパーサジェネレーター
• lexと違って単独で動かすことはない
• 三部構成
• 宣言部
• トークンを宣言する
• ルール部
• BNF記法で構文規則記述
• プログラム部
• main関数記述
11
- 13. 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