プログラミング言語論 第9回 情報工学科 木村昌臣 篠埜 功.

Slides:



Advertisements
Similar presentations
プログラミング言語論 プログラミング言語の構 文 水野嘉明. 目次 1. プログラミング言語の構文 2. BNF 3. 文脈自由文法 4. 構文図式 2.
Advertisements

プログラミング言語論 第3回 BNF 記法について(演習付き) 篠埜 功. 構文の記述 プログラミング言語の構文はどのように定式化できるか? 例1 : for ループの中に for ループが書ける。 for (i=0; i
システムソフトウェア 第3回:2007年10月17日(水)   . 2 本日学ぶこと 文法  文字と文字列  無限集合  文法とそのクラス  オートマトン.
プログラミング言語について 情報工学科 篠埜 功 情報工学通論 2016 年 5 月 17 日. 2 1.プログラミング言語について.
和田俊和 資料保存場所 /2/26 文法と言語 ー正規表現とオートマトンー 和田俊和 資料保存場所
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
文法と言語 ー字句解析とオートマトンlexー
計算の理論 I 文脈自由文法 月曜3校時 大月 美佳 平成15年6月30日 佐賀大学知能情報システム学科.
プログラミング入門2 第4回 配列 for文 変数宣言 初期化
コンパイラ 2011年10月17日
プログラム理論特論 第2回 亀山幸義
言語体系とコンピュータ 第6回.
5.チューリングマシンと計算.
5.チューリングマシンと計算.
プログラミング言語論 第1回 情報工学科 篠埜 功.
プログラミング言語論 第1回 情報工学科 篠埜 功.
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
文法と言語 ー文脈自由文法とLL構文解析ー
プログラミング言語論 第4回 式の構文、式の評価
計算の理論 II 文脈自由文法と プッシュダウンオートマトン
Q q システムソフトウェア 第2回:2007年10月10日(水) q q.
プログラミング言語論 第1回 導入 情報工学科 篠埜 功.
情報工学通論 プログラミング言語について 2015年 6月 16日 情報工学科 篠埜 功.
Semantics with Applications
条件式 (Conditional Expressions)
情報工学通論 プログラミング言語について 2013年 5月 28日 情報工学科 篠埜 功.
言語処理系(5) 金子敬一.
プログラミング言語論 第1回 導入 情報工学科 篠埜 功.
コンパイラ 2012年10月15日
コンパイラ 2012年10月22日
情報工学通論 プログラミング言語について 2014年 5月 20日 情報工学科 篠埜 功.
コンパイラ 2011年10月24日
プログラミング言語論 第2回 情報工学科 篠埜 功.
システムソフトウェア講義の概要 計算機システムの復習:中央演算処理装置(CPU),プログラムの実行,主記憶装置,補助記憶装置
プログラミング言語論プログラミング言語論 プログラムの意味論 水野嘉明
プログラミング言語論 第3回 BNF記法について(演習付き)
人工知能特論II 第2回 二宮 崇.
正則言語 2011/6/27.
文法と言語 ー字句解析とオートマトンlexー
文法と言語 ー字句解析とオートマトンlexー
形式言語の理論 5. 文脈依存言語.
言語と文法 言語とは,ルールに従う記号列の無限集合である. 文法を与えることで言語が定義できる.
平成20年10月5日(月) 東京工科大学 コンピュータサイエンス学部 亀田弘之
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
計算の理論 I 文脈自由文法の標準形 月曜3校時 大月美佳.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
知能情報システム特論 Introduction
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
東京工科大学 コンピュータサイエンス学部 亀田弘之
情報工学通論 プログラミング言語について 2010年 6月 22日 情報工学科 篠埜 功.
文法と言語 ー文脈自由文法とLL構文解析ー
コンパイラ 2011年10月20日
文法と言語 ー文脈自由文法とLR構文解析ー
計算の理論 I -数学的概念と記法- 火曜 12:50~14:20 大月 美佳 2004年4月20日.
5.チューリングマシンと計算.
第14回 前半:ラムダ計算(演習付) 後半:小テスト
プログラミング言語論 第10回 情報工学科 篠埜 功.
計算の理論 I -数学的概念と記法- 月曜3校時 大月 美佳.
述語論理式の構文と意味 一階述語論理式の構文 一階述語論理式の意味 述語,限量記号 自然言語文の述語論理式表現 解釈 妥当,充足不能
文法と言語 ー字句解析とオートマトンlexー
4.プッシュダウンオートマトンと 文脈自由文法の等価性
プログラミング言語論 第2回 篠埜 功.
システムソフトウェア講義の概要 計算機システムの復習:中央演算処理装置(CPU),プログラムの実行,主記憶装置,補助記憶装置
コンパイラ 2012年10月11日
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
PROGRAMMING IN HASKELL
システムソフトウェア講義の概要 計算機システムの復習:中央演算処理装置(CPU),プログラムの実行,主記憶装置,補助記憶装置
情報処理Ⅱ 小テスト 2005年2月1日(火).
情報処理Ⅱ 第3回 2004年10月19日(火).
4.2 再帰下降解析 (1)再帰下降解析とは ■再帰下降解析(Recursive Descent Parsing)
Presentation transcript:

プログラミング言語論 第9回 情報工学科 木村昌臣 篠埜 功

講義用web page等 講義用web page http://www.sic.shibaura-it.ac.jp/~sasano/lecture/lecture.html メールアドレス sasano@sic.shibaura-it.ac.jp

本日の内容 プログラミング言語の定義 構文と意味 構文の記述 BNF記法 拡張BNF記法 意味の記述

プログラムの構成 先回までに、プログラムを構成しているデータと手続きについて説明を行った。 データ(構造) 手続き・関数

プログラムの構成 プログラムを構成しているデータや手続きについてはどのようなものがあるかわかった。 では、これらがどのような順番にならんでいると意味があるのだろうか? その順番の規則を表現するにはどうしたらよいだろうか? 構成しているものの順番の規則=構文規則

プログラミング言語の定義 プログラミング言語の明確な定義が必要 プログラミング言語 --- 人間が問題解決の方法を表現するための言語 プログラミング言語はさまざまなものがある。(第4回講義)  人間にとって便利な表現法が用意されている  計算機で実行するため、その言語の処理系が必要 プログラミング言語の明確な定義が必要

構文と意味 プログラミング言語の定義は、構文の定義と意味の定義に分けられる。 例として、数の表記を考える。 325 3,2,5を並べて表記すると、 325(三百二十五)という数を表わす 意味 語彙(alphabet) 言語(language) 1 表わす (denote) 並べる 2 8 3 325 325 5 4 9 6 7 (数字の列) (自然数) (数字)

構文と意味 構文の記述(数字の例:数字列の定義) 数字列の集合を定義したい。 数字の定義 <数字> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 数字列の定義 数字列の集合を定義すればよいが、 数字列は無限にある。 無限集合を有限の長さで記述したい。 --- 文法の考え方を用いる。

構文と意味 数字の定義 <数字> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 数字は、0または1または2または… または9 数字列の定義 <数字列> ::= <数字> | <数字列> <数字> 数字列は、数字か、または数字列のあとに数字を並べたもの 数学的には、 集合の帰納的定義(inductive definition) <数字> --- 数字の集合 <数字列> --- 数字列の集合

構文と意味 数字の意味の定義 digval (0) = 0 digval (1) = 1 ... digval (9) = 9 1 1 10 1 1 10 digval 2 8 2 3 8 11 3 5 4 5 12 9 4 9 6 7 … 6 7 (数字) (自然数) digval (0) = 0 digval (1) = 1 ... digval (9) = 9

構文と意味 数字列の意味の定義 numval (d) = digval (d) 1 10 numval 2 325 8 11 325 3 5 12 … 4 9 … 6 7 (数字列) (自然数) numval (d) = digval (d) numval (nd) = numval (n) * 10 + digval (d) (numval関数は再帰的に定義されている) (例) numval (325) = numval (32) * 10 + digval (5) = (numval (3) * 10 + digval (2)) * 10 + digval (5) = (3 * 10 + 2) * 10 + 5 = 325

構文と意味 プログラミング言語の意味の定義(単純な命令型言語の場合) f f (状態から状態への関数) (プログラム) (プログラム例) begin fac := 1; while n > 0 do begin fac := fac * n; n := n -1 end end 変数facの値をnの階乗に変化 させる、状態から状態への関数

構文と意味 これまでに見た数字列の意味の定義法のような意味定義法は、表示的意味論(denotational semantics)と呼ばれ、Dana Scottが提唱したものである。 プログラミング言語の意味について形式的(formal)に論じたい場合に用いられる。 この他の形式的な意味定義法として、 操作的意味論(operational semantics) 公理的意味論(axiomatic semantics) がある。 日本語、英語など、自然言語で意味を記述することもできるが、 あいまいさが残る場合があり、厳密な議論には適さない。

構文の記述 プログラミング言語の構文はどのように定式化できるか? このような構造は、文脈自由文法で表す。 プログラミング言語の特徴: 入れ子構造(nesting) 例1: forループの中にforループが書ける。 for (i=0; i<= 10; i++) { for (j=0; j<=20; j++) { … 例2: 算術式の中で、(…) の中で、(…)を書ける。 1 + (2 * (3+ 4) ) このような構造は、文脈自由文法で表す。 (正規表現では表すことができない。) 文脈自由文法を表記するためのメタ言語であるBNF記法を紹介する。

BNF記法 Backus Normal Form (Backus Naur Form) 集合を定義する際の記述法(言語)。集合を帰納的に定義する。(帰納的定義 inductive definition)(再帰的定義 recursive definitionともいう) 規則を「非終端記号(non-terminal symbol)」と「終端記号(terminal symbol)」で表す。 文脈自由文法(context free grammar)の構文規則を記述する際に用いられる。 構文規則=文を構成するための規則

非終端記号と終端記号 非終端記号(non-terminal symbol) 終端記号(terminal symbol) 非終端記号または終端記号からなる列に展開される。<>で囲む。 終端記号(terminal symbol) 文字列、数値、= など それ以上他の要素の組み合わせで置き換えることができないもの ’ ’等で囲んで表すこともある。

BNF記法による規則の書き方(BNF記法の定義) 非終端記号 ::= 非終端記号または終端記号からなる列を、縦棒 | で区切って並べたもの という形の規則が並んだもの 左辺の非終端記号が右辺に展開される (左辺は必ず非終端記号1つ) 例) <不等式> ::= <式><不等号記号><式> <不等号記号> ::= ’>’ | ’<’ can be or

BNF記法の意味 <不等式> ::= <式><不等号記号><式> 非終端記号は集合に対応 非終端記号は、それに対応する集合の任意の要素を表していると見てもよい。 この見方では、複数回表れる同じ名前の非終端記号は一般に別の要素を表す。 同じ名前の終端記号は同じものを表す <式>は、式の集合に対応する。 (集合中の任意の要素を表すと見てもよい) <不等式> ::= <式><不等号記号><式> <不等号記号> ::= ’>’ | ’<’

BNF記法の意味 <不等号記号> ::= ’>’ | ’<’ 複数の選択候補がある場合は「|」を使って表現 再帰的定義 recursive definition(帰納的定義 inductive definition) <不等号記号> ::= ’>’ | ’<’ can be or 「不等号記号は’>’または ’<’である」 <文章> ::= <文> | <文> <文章> 「文章は文あるいは、文と文章が並んだものある」

構文木 <式> ::= <数字><論理記号><数字><等号><数字> <数字> ::= ‘0’ | ‘1’ <論理記号> ::= ‘and’ | ‘or’ <等号> ::= ‘=’ (例) 1or0=1 の構文木 <式> 非終端記号 <数字> <論理記号> <数字> <等号> <数字> ‘1’ ‘or’ ‘0’ ‘=’ ‘1’ 終端記号

拡張BNF記法(extended BNF)(1) 次の式は「文章は一つ以上の文で構成される」ということを再帰的に表現 これをもっと簡潔に書きたい <文章> ::= <文> | <文> <文章> <文章> ::= <文>+ +は1つ以上の繰り返しを表す

拡張BNF記法(2) A | B は、AまたはB。 {A}は、Aの0回以上の繰り返しを表す。 (A)は、Aをひとまとめにする。 (例) {ab}は、ε, ab, abab, ababab, abababab, …を表す。 (注) {A} は、教科書では、Aをひとまとめにしたグループを表すために用いられている。 (A)は、Aをひとまとめにする。 (例) (a|b)c は、acまたはbcを表す。 [A] は、Aまたは空を表す。(例) [a]は、εまたはaを表す。 (A)+ は、Aの1回以上の繰り返しを表す。 (A)* は、Aの0回以上の繰り返しを表す。 (例) a+ は、a, aa, aaa, aaaa, ….を表す。 aa*と同じ。

【参考】構文図式 文脈自由文法の構文規則を表す際に用いられる(graphicalな)言語 = <数字> ::= ’0’ | ’1’ <式> ::= <数字> (’and’ | ’or’) <数字> ’=’ <数字> 数字 1 式 数字 and 数字 = 数字 or

【参考】Chomskyの言語階層 Noam Chomskyの言語階層 Type 0 制限なし Type 1 文脈依存文法(context sensitive grammar) Type 2 文脈自由文法(context free grammar) Type 3 正規文法(regular grammar)