Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

コンパイラ(Lexとyaccを使う)

717 views

Published on

名古屋低レイヤー勉強会用のスライドシェア、

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

コンパイラ(Lexとyaccを使う)

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

×