• 検索結果がありません。

コンパイラとプログラミング言語

N/A
N/A
Protected

Academic year: 2021

シェア "コンパイラとプログラミング言語"

Copied!
25
0
0

読み込み中.... (全文を見る)

全文

(1)

コンパイラとプログラミング言語

5週 字句解析の概要と非決定性有限オートマトン、

決定性有限オートマトン・字句解析プログラム

2014年5月7日 金岡 晃

(2)

授業計画

1 (4/9)

コンパイラの概要 2

(4/16)

コンパイラの構成 3

(4/23)

プログラミング言語の形式的な 記述

4 (4/30)

プログラミング言語の形式的な 記述

5 (5/7)

字句解析の概要と非決定性有限 オートマトン、決定性有限オー トマトン・字句解析プログラム 6

(5/14)

中間試験 7

(5/21)

構文解析の概要/上向き構文解析

8 (5/28)

下向き構文解析/構文解析プ ログラム

9 (6/4)

中間表現と意味解析 10

(6/11)

Java仮想マシンとその機械語 11

(6/18)

条件分岐文と繰り返し文の コード生成

12 (6/25)

関数呼び出しのコード生成 13

(7/2)

休講 14

(7/9)

休講 (7/23-

8/5)

期末試験

(3)

【復習】第 3,4

プログラミング言語の形式的な記述

コンパイラとプログラミング言語

(4)

コンパイラの論理的な構成

ソース

プログラム 目的

プログラム コンパイラ

字句 解析

構文 解析

意味

解析 最適化 コード 生成

中間情報(中間語、名前表)

フェーズ

(5)

コンパイラの開発における重要なポイント

ソース

プログラム 目的

プログラム コンパイラ

字句 解析

構文 解析

意味

解析 最適化 コード 生成

中間情報(中間語、名前表)

プログラム言語の文法の

出来の良し悪しが最重要事項

言語の仕様範囲と文法を厳密に定める必要

文法の形式的な記述方式

バッカス記法

構文図式

(6)

バッカス記法( BNF )

終端記号と非終端記号

終端記号:これ以上は変換されない記号

例)

0-9

の数字、アルファベット(小文字、大文字)など

非終端記号:終端記号でないもの。後述する

”<“

”>”

で囲まれた 要素(構文要素)。

::= この記号の左に来る非終端記号を右に来た表現で定義する

<構成要素>

| 「または(or)」を意味する

“<“と”>”で囲まれたものにより構成要素であることを示す {} {}の中の要素を0個以上並べたもの

[] []の中の要素を0個または1個書いたもの

(7)

構文図式

• BNF

と記述能力は変わらないが、直感的な記載方法

:終端記号

:構成要素

:「または」

:ループ

(8)

構文図式

<文>::=<変数宣言>;|<代入文>|<手続き呼び出し文>|<if文>

|<while文>|<ブロック>|<返戻文>

<文>

変数宣言

識別子 =

関数呼び出し

if ( 条件式 )

ブロック

return

(9)

コンパイラの開発における重要なポイント

ソース

プログラム 目的

プログラム コンパイラ

字句 解析

構文 解析

意味

解析 最適化 コード 生成

中間情報(中間語、名前表)

プログラム言語の文法の

出来の良し悪しが最重要事項

言語の仕様範囲と文法を厳密に定める必要

文法の形式的な記述方式

バッカス記法

構文図式

(10)

5

字句解析の概要と非決定性有限オートマトン

コンパイラとプログラミング言語

(11)

本日の到達目標と概要

到達目標

字句解析のおおまかな流れの理解

正規表現と有限オートマトンの関係性の理解

非決定性有限オートマトンと決定性有限オートマトンの理解

概要

文字読み取りと字句読み取り

トークンの抽出

正規表現

有限オートマトン

非決定性有限オートマトン

決定性有限オートマトン

(12)

コンパイラの論理的な構成

ソース

プログラム 目的

プログラム コンパイラ

字句 解析

構文 解析

意味

解析 最適化 コード 生成

中間情報(中間語、名前表)

フェーズ

今日の内容

(13)

字句解析の概要

ソースプログラムからトークンを取り出して構文解析に渡す

ソース

プログラム 目的

プログラム コンパイラ

字句 解析

構文 解析

意味

解析 最適化 コード 生成

トークン

中間情報(中間語、名前表)

(14)

字句解析の概要(2)

ソースプログラムからトークンを取り出して構文解析に渡す

ソースプログラム:文字列(数字含む)の集まり

トークン:プログラム上の構成要素

トークンの取り出しは、文法に従って行う

import java.io.*;

class Sample throws IOException{

public static void main(String[] args){

BufferedReader br = ….

}

} • 人間から見るとプログラム

コンピュータから見ると文字列

import java.io.*;class Sample throws IOException{public static void main(String[] args){BufferedReader br = …. }}

import java

. io * ;

class Sample

throws IOException

public static ・・・

トークン

(15)

字句解析の流れ

ソース プログラム

字句解析

構文

文字(列) 解析

読み取り 字句

読み取り トークン

人間から見るとプログラム

コンピュータから見ると文字列 ただの文字列

扱い

意味を持つ 要素に分割

分割されたトークンの集まりが 文法として間違っていないかチェック

(ここでBNFを使って定義された 文法と照らし合わせる)

(16)

文字読み取り / 文字列読み取り

ファイルからソースファイルに書いてある文字(列)を読み込む

これは単純に

1

文字あるいは

1

列ごとに読み込む作業

(17)

正規表現の概要

正規表現

文字列の集合を

1

つの文字列で表す方法の

1

正則表現とも呼ばれる

例1 人を呼ぶときの声 おい おーい

おーーい おーーー ーーーー ーーーー

ーーい

1つの表現で 表したい

おー*い

*

は「直前の文字がないか、

直前の文字が1個以上連続す る」という意味

(18)

正規表現があると何が便利か

検索で便利

「人を呼ぶ時の声」が書かれた文書を探したいなど

コンパイラにも利用可能

字句解析時に、複数の表現方法をとり得るトークンを抽出する場合

<整数>::=<数字>{<数字>}

<数字>::=0|1|2|3|4|5|6|7|8|9 BFNによる文法定義

整数は1文字以上の数字が ならんだ文字列

1 73

59835 099 37

37 25680 整数の文字列集合

19750705 これは整数か?

¥d+

正規表現では

0-9¥dまでの 数字

は直前の+ 文字が1 以上連続す

ることを 示す

(19)

有限オートマトン

状態遷移図に従って入力された文字列が認識できるか否かを判定す る仮想機械

1. 状態の集合 𝑆 2. 入力文字の集合

3. 状態と記号の対を、次の状態の集合へ遷移する状態遷移関数 4. 𝑆 の特定の要素である開始状態 𝑆0

5. 𝑆 の部分集合である最終状態 𝐹

:状態

:遷移

最終状態

(20)

有限オートマトンに入力し、

最終状態に到達するかを確認

有限オートマトンの利用によるチェック

開始状態

最終状態

19750705

これは整数か?

整数の

有限オートマトン

(21)

非決定性有限オートマトンと 決定性有限オートマトン

非決定性有限オートマトン

決定性有限オートマトン

ある状態・ある入力に対して遷移可能な状態を複数とるこ とができる有限オートマトン

遷移しなくてもよい状態や、1つの状態から 複数への遷移がある(非決定的)

非決定性有限オートマトンから非決定的な遷移を取り除いたもの

(22)

非決定性有限オートマトンと 決定性有限オートマトンの例

a(b|c)*

正規表現

最初にaが来て、

その後はbcが無いか1個以上連続する a, abbc, ab, ac, abcbcc, abcc, …

ε

1 2 3 4

0

a ε

b

c ε

ε 非決定性有限オートマトン

決定性有限オートマトン

1 0

b a

ε:空列記号

(23)

正規表現のいくつかの表現

|

または

*

直前の表現の0回以上の繰り返し出現

+

直前の表現の1回以上の繰り返し出現

?

直線の表現の0回または1回の出現

()

まとめて1つの表現として扱う

(24)

演習:次の非決定性有限オートマトンを正規表現 に変換せよ

1

2

0 b

a a 1

a

2

2

0 b

a a 1

a

(25)

来週は中間試験です

時間は

60

持ち込み不可

部屋はこの部屋(理学部

V

号館

5103

試験範囲はこれまで配布したスライドと授業中に触れた教科書の内

参照

関連したドキュメント

&#34;A matroid generalization of the stable matching polytope.&#34; International Conference on Integer Programming and Combinatorial Optimization (IPCO 2001). &#34;An extension of

I Samuel Fiorini, Serge Massar, Sebastian Pokutta, Hans Raj Tiwary, Ronald de Wolf: Exponential Lower Bounds for Polytopes in Combinatorial Optimization. Gerards: Compact systems for

R_DMACn_Suspend R_DMACn_Resume R_DMACnm_Create R_DMACnm_Start R_DMACnm_Stop.

Guasti, Maria Teresa, and Luigi Rizzi (1996) &#34;Null aux and the acquisition of residual V2,&#34; In Proceedings of the 20th annual Boston University Conference on Language

送料 コスト

本センターは、日本財団のご支援で設置され、手話言語学の研究と、手話の普及・啓

˜™Dには、'方の MOSFET で接温fが 昇すると、 PTC が‘で R DS がきくなり MOSFET を 流れる流が減šします。この結果、 MOSFET

REDYコードは元々実際に起こり得るプラント挙動 (プラント安定性や運転時の 異常な過渡変化)を評価する目的で開発されており,4.1