言語理論とコンパイラ

第四回: 字句解析の実装、lex 系ツールの使い方方

2005年 5月 13日

AGU

© 2005 Martin J. Dürst 青山学院大学

今日の内容

先週のまとめ

これらは全て同じ力を持って、正規言語を定義・受理する

先週の宿題 (提出不要)

  1. 次の正規表現を NFA に変換して、NFA から DFA を作る。

    a(b|c)*a

  2. 1. の言語を定義する左線形文法を作る。
  3. Σ = {0, 1} の 0 が偶数の語を受理する DFA を作る。
  4. 2. の言語の正規表現を作る。

先々週の宿題 (提出不要)

(Element) Content Model ((要素) 内容モデル) の定義: http://www.w3.org/TR/REC-xml/#sec-element-content

XML の文法の完結なまとめ: http://www.mulberrytech.com/quickref/

XML の DTD の要素内容モデル

(Element) Content Model ((要素) 内容モデル) の例:

<!ELEMENT div1 (head, (p | list | note)*, div2*)>

この内容モデルに相当する XML の部分の一例:

<div1><head>This is the Title</head>
<p>Short introduction...</p>
<div2>...</div2>
<div2>...</div2>
</div1> 

要素内容モデルは要素を字にした正規表現。

コンパイラの段階

字句解析 (lexical analysis)

構文解析 (parsing; syntax analysis)

意味解析 (semantic analysis)

最適化 (optimization)

コード生成 (code generation)

コンパイラの構造の実装

前半 (解析) もしくは全体は構文解析が中心

構文解析は getNextToken() みたいな関数で字句解析から必要におおじてトーケンを取り寄せる

構文解析は必要におおじて意味解析などを呼ぶ

字句解析の実装

主な要点:

選択肢:

「手書き」字句解析

簡単な文法の時に使う

次の文字 (バイト) をいつも読み込んだ状態

入力、トークン、次の文字にはグローバル変数を使うのが多い

トークンは種類の他、数字、識別子のなどの場合追加情報が必要

ツールによる字句解析

来週の予定と準備

準備:

予定:

flex のインストール