コンパイラ 2012年10月11日 酒居敬一@A468(sakai.keiichi@kochi-tech.ac.jp) http://www.info.kochi-tech.ac.jp/k1sakai/Lecture/COMP/2012/index.html.

Slides:



Advertisements
Similar presentations
プログラミング論 第八回数字の計算,整数の入出力. 本日の内容 前回の課題(続き) 前回の課題(続き) 数字の計算をする 数字の計算をする – 加減乗除を行う – インクリメント演算子とデクリメン ト演算子.
Advertisements

プログラミング言語論 第3回 BNF 記法について(演習付き) 篠埜 功. 構文の記述 プログラミング言語の構文はどのように定式化できるか? 例1 : for ループの中に for ループが書ける。 for (i=0; i
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
和田俊和 資料保存場所 /2/26 文法と言語 ー正規表現とオートマトンー 和田俊和 資料保存場所
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
Problem J: いにしえの数式 問題作成・解説: 北村 解答作成協力: 八森.
文法と言語 ー字句解析とオートマトンlexー
コンパイラ 2011年10月17日
言語処理系(4) 金子敬一.
12.3,E,-15, 12.3,E5,+,=, >,<,…,
計算の理論 I 決定性有限オートマトン(DFA) と 非決定性有限オートマトン(NFA)
5.チューリングマシンと計算.
5.チューリングマシンと計算.
計算の理論 I ー DFAとNFAの等価性 ー 月曜3校時 大月 美佳.
文法と言語 ー文脈自由文法とLR構文解析2ー
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
文法と言語 ー文脈自由文法とLL構文解析ー
プログラミング言語論 第4回 式の構文、式の評価
アルゴリズムとデータ構造 2011年6月13日
模擬国内予選2014 Problem C 壊れた暗号生成器
言語処理系(5) 金子敬一.
コンパイラ 2012年10月15日
コンパイラ 2012年10月22日
コンパイラ 2011年10月24日
チューリング機械 状態の有限集合 ヘッドの方向を表す。 L:1コマ左へ R:1コマ右へ テープ記号の有限集合 入力記号の有限集合 動作関数
システムソフトウェア講義の概要 計算機システムの復習:中央演算処理装置(CPU),プログラムの実行,主記憶装置,補助記憶装置
プログラミング言語論 第3回 BNF記法について(演習付き)
文法と言語 ー字句解析とオートマトンlexー
文法と言語 ー字句解析とオートマトンlexー
形式言語の理論 5. 文脈依存言語.
東京工科大学 コンピュータサイエンス学部 亀田弘之
アルゴリズムとプログラミング (Algorithms and Programming)
言語と文法 言語とは,ルールに従う記号列の無限集合である. 文法を与えることで言語が定義できる.
文法と言語 ー文脈自由文法とLR構文解析2ー
平成20年10月5日(月) 東京工科大学 コンピュータサイエンス学部 亀田弘之
計算の理論 II 前期の復習 -有限オートマトン-
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
東京工科大学 コンピュータサイエンス学部 亀田弘之
2007年度 情報数理学.
プログラミング言語論 第9回 情報工学科 木村昌臣 篠埜 功.
文法と言語 ー文脈自由文法とLL構文解析ー
コンパイラ 2011年10月20日
B演習(言語処理系演習)第2回 田浦.
C言語 はじめに 2016年 吉田研究室.
平成26年4月22日(火) 東京工科大学 コンピュータサイエンス学部 亀田弘之
計算の理論 I 決定性有限オートマトン(DFA) と 非決定性有限オートマトン(NFA)
コンパイラ 2012年10月1日
文法と言語 ー文脈自由文法とLR構文解析ー
計算の理論 I 非決定性有限オートマトン(NFA)
5.チューリングマシンと計算.
アルゴリズムとデータ構造 2012年6月11日
形式言語とオートマトン 第14回 プッシュダウンオートマトンと全体のまとめ
文法と言語 ー字句解析とオートマトンlexー
4.プッシュダウンオートマトンと 文脈自由文法の等価性
情報処理Ⅱ 第7回 2004年11月16日(火).
情報処理Ⅱ 2005年10月28日(金).
東京工科大学 コンピュータサイエンス学部 亀田弘之
システムソフトウェア講義の概要 計算機システムの復習:中央演算処理装置(CPU),プログラムの実行,主記憶装置,補助記憶装置
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
プログラミング 4 文字列.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
非決定性有限オートマトン 状態の有限集合 入力記号の有限集合 注意 動作関数 初期状態 受理状態の有限集合.
システムソフトウェア講義の概要 計算機システムの復習:中央演算処理装置(CPU),プログラムの実行,主記憶装置,補助記憶装置
文法と言語 ー文脈自由文法とLR構文解析2ー
情報処理Ⅱ 2005年11月25日(金).
情報処理Ⅱ 小テスト 2005年2月1日(火).
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
情報処理Ⅱ 第8回:2003年12月9日(火).
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

コンパイラ 2012年10月11日 酒居敬一@A468(sakai.keiichi@kochi-tech.ac.jp) http://www.info.kochi-tech.ac.jp/k1sakai/Lecture/COMP/2012/index.html

構文図式 BNFと記述力は変わらない。 直感的でわかりやすい。 [プログラム] 関数定義 変数宣言 ; 返戻型 ブロック 識別子 ( ) , [関数定義] [変数宣言] 要素型 識別子 文 { } [ブロック]

[文] 式 return 条件式 ブロック 文 識別子 変数宣言 ; ( = if while ) 関数呼出し 識別子 式 ( ) , [関数呼出し] [式] 項 加減演算子 [項] 因数 乗除演算子

[条件式] 式 == != > < >= <= [加減演算子] [乗除演算子] + - * / 要素型 void [数字]と[英字]は非終端記号なので、 本来はそれらも終端記号に至るまでの 定義が必要。しかし、省略されている。 前回のBNFの例でも省略されている。 [返戻型] 数字 英字 [識別子] [整数] 数字 int [要素型]

字句解析(Lexical Analysis) 文字や文字の並びを、意味の有る字句として認識する。 自然言語では単語に分解することに相当する。 文法に基づき、予約語・識別子・演算子などに分解する。 識別子が関数名なのか変数名なのかは区別しない。 あくまで、単語に分解するだけである。 分解されたものは、文法上の構成単位である。 構文解析器の要求により動作する。 字句の要求に対する、字句への分解と字句の出力。 ソースプログラムからの文字の読み取り。 ファイルからのソースプログラムの読み込み。 読み込んだソースプログラムのバッファリング。

字句解析の位置づけ ソースプログラムという文字の並び(文字列)から、 意味のある字句の並び(字句)へと変換する。 ソースプログラムという文字の並び(文字列)から、 意味のある字句の並び(字句)へと変換する。 字句は構文解析器に渡される。 ソース プログラム 字句解析 構文解析 ; c + b = a a=b+c; 文字列 字句

字句解析器と構文解析器の関係 構文解析器(Parser)からの要求に基づき、 字句を返す。 構文解析器から字句が返却される場合もあり、 そういうときはバッファする。 効率良いコンパイルのためには、字句をできるだけ返却 しないで済むように文法を決める。 ソース プログラム 字句解析 構文解析 代入文の解析 条件分岐の解析 繰り返しループの解析 文字列 字句要求 字句 字句出力

文字読み取り 字句解析器はファイルからソースプログラムを 一文字ずつ読みながら解析する。 字句解析器はファイルからソースプログラムを 一文字ずつ読みながら解析する。 しかし、一文字ずつファイルから読むことは効率が悪い。 最近のOSなら、mmapしちゃえば?と思う。 字句への分解では、その区切りとなる文字を読んだとき に初めて字句が読み取れたことになる。一文字先読み が必要、あるいは、区切り文字の ungetが必要。 そういったことから、バッファリングをする。 mmapすれば、ファイルは仮想記憶機構を通じてメモリのよう に自由に読み書きできる。実装はライブラリ依存。

字句読み取り 文字を読むごとに字句解析器の内部に保持する 状態遷移機械の状態が遷移する。それにより、 文字列から字句へと分解される。 文字を読むごとに字句解析器の内部に保持する 状態遷移機械の状態が遷移する。それにより、 文字列から字句へと分解される。 例:<その他>を読んで初めて<名前>が分解できる。 <名前>→<英字>{<英字>|<数字>} 2 1 <英字> <数字> <名前> <その他>

正規表現と有限オートマトン オートマトン内部の状態数は有限。 ひとつの入力に対する状態遷移がひとつであるものは、 決定性有限オートマトンという。 オートマトンが受理する状態遷移系列を決定的に求められる。 字句解析や構文解析には「決定性」は必須の条件。 そうでないものは、非決定性有限オートマトンといい、 入力に対する状態遷移は神のみぞ知るということ。 オートマトンが受理する状態遷移系列を決定的に求められない。 これでもプログラムは書ける。が、コンパイルできない。

正規表現 sed, grep, perl, awk, ruby, pythonなど、それぞれの 正規表現を実装している。活用してますか? ここでは簡単な例を示す。 斜体は正規表現、uplight体はアルファベット。

正規表現の表す言語 正規表現の表す言語とは、与えられた正規表現から 生成できる文字列の集合のこと。 正規表現の表す言語とは、与えられた正規表現から 生成できる文字列の集合のこと。 これを正規言語という。 結合の優先順位は、閉含・連接・集合和の順。