プログラミング言語論 第3回 BNF 記法について(演習付き) 篠埜 功. 構文の記述 プログラミング言語の構文はどのように定式化できるか? 例1 : for ループの中に for ループが書ける。 for (i=0; i<= 10; i++) { for (j=0; j<=20; j++) { …

Slides:



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

システムソフトウェア 第3回:2007年10月17日(水)   . 2 本日学ぶこと 文法  文字と文字列  無限集合  文法とそのクラス  オートマトン.
和田俊和 資料保存場所 /2/26 文法と言語 ー正規表現とオートマトンー 和田俊和 資料保存場所
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
Problem J: いにしえの数式 問題作成・解説: 北村 解答作成協力: 八森.
文法と言語 ー字句解析とオートマトンlexー
計算の理論 I 文脈自由文法 月曜3校時 大月 美佳 平成15年6月30日 佐賀大学知能情報システム学科.
Problem by D. Mikurube Slides by Y. Izumi
コンパイラ 2011年10月17日
言語体系とコンピュータ 第6回.
情報とコンピュータ 静岡大学工学部 安藤和敏
文法と言語 ー文脈自由文法とLR構文解析2ー
文法と言語 ー文脈自由文法とLL構文解析ー
プログラミング言語論 第4回 式の構文、式の評価
計算の理論 II 文脈自由文法と プッシュダウンオートマトン
Q q システムソフトウェア 第2回:2007年10月10日(水) q q.
プログラミング言語論 第1回 導入 情報工学科 篠埜 功.
条件式 (Conditional Expressions)
言語処理系(5) 金子敬一.
プログラミング言語論 第1回 導入 情報工学科 篠埜 功.
コンパイラ 2012年10月15日
コンパイラ 2012年10月22日
コンパイラ 2011年10月24日
東京工科大学 コンピュータサイエンス学部 亀田弘之
形式言語とオートマトン2013 ー有限オートマトンー 第5日目
プログラミング言語論 第2回 情報工学科 篠埜 功.
システムソフトウェア講義の概要 計算機システムの復習:中央演算処理装置(CPU),プログラムの実行,主記憶装置,補助記憶装置
プログラミング言語論 第3回 BNF記法について(演習付き)
人工知能特論II 第2回 二宮 崇.
正則言語 2011/6/27.
文法と言語 ー字句解析とオートマトンlexー
文法と言語 ー字句解析とオートマトンlexー
形式言語の理論 5. 文脈依存言語.
形式言語とオートマトン2016 ~第10日目(形式文法2回目)~
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
言語と文法 言語とは,ルールに従う記号列の無限集合である. 文法を与えることで言語が定義できる.
文法と言語 ー文脈自由文法とLR構文解析2ー
平成20年10月5日(月) 東京工科大学 コンピュータサイエンス学部 亀田弘之
計算の理論 I 文脈自由文法の標準形 月曜3校時 大月美佳.
計算の理論 II 前期の復習 -有限オートマトン-
東京工科大学 コンピュータサイエンス学部 亀田弘之
2007年度 情報数理学.
プログラミング言語論 第9回 情報工学科 木村昌臣 篠埜 功.
文法と言語 ー文脈自由文法とLL構文解析ー
コンパイラ 2011年10月20日
形式言語とオートマトン 中間試験解答例 2016年11月15実施 中島毅.
東京工科大学 コンピュータサイエンス学部 亀田弘之
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
文法と言語 ー文脈自由文法とLR構文解析ー
計算の理論 I -数学的概念と記法- 火曜 12:50~14:20 大月 美佳 2004年4月20日.
第14回 前半:ラムダ計算(演習付) 後半:小テスト
プログラミング言語論 第10回 情報工学科 篠埜 功.
計算の理論 I -数学的概念と記法- 月曜3校時 大月 美佳.
文法と言語 ー字句解析とオートマトンlexー
4.プッシュダウンオートマトンと 文脈自由文法の等価性
計算の理論 I 文脈自由文法 月曜3校時 大月美佳.
東京工科大学 コンピュータサイエンス学部 亀田弘之
システムソフトウェア講義の概要 計算機システムの復習:中央演算処理装置(CPU),プログラムの実行,主記憶装置,補助記憶装置
計算の理論 I ー 正則表現 ー 月曜3校時 大月 美佳.
東京工科大学 コンピュータサイエンス学部 亀田弘之
コンパイラ 2012年10月11日
情報とコンピュータ 静岡大学工学部 安藤和敏
PROGRAMMING IN HASKELL
システムソフトウェア講義の概要 計算機システムの復習:中央演算処理装置(CPU),プログラムの実行,主記憶装置,補助記憶装置
文法と言語 ー文脈自由文法とLR構文解析2ー
PEG覚え書き.
情報処理Ⅱ 小テスト 2005年2月1日(火).
4.2 再帰下降解析 (1)再帰下降解析とは ■再帰下降解析(Recursive Descent Parsing)
Presentation transcript:

プログラミング言語論 第3回 BNF 記法について(演習付き) 篠埜 功

構文の記述 プログラミング言語の構文はどのように定式化できるか? 例1 : for ループの中に for ループが書ける。 for (i=0; i<= 10; i++) { for (j=0; j<=20; j++) { … 例 2: 算術式の中で、 (…) の中で、 (…) を書ける。 1 + (2 * (3+ 4) ) プログラミング言語の特徴 : 入れ子構造 (nesting) このような構造は、文脈自由文法で表す。 (正規表現では表すことができない。) 文脈自由文法を表記するためのメタ言語である 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 ) – 文字列、数値、 = など それ以上他の要素の組 み合わせで置き換えることができないもの – ’ ’ 等で囲んで表すこともある。

BNF 記法による規則の書き方( BNF 記法の定義) ::= ::= ’>’ | ’<’ ( BNF 記法の例および意味) can beor が一つの規則であり、それを並べて書く。 非終端記号 (1つ)のあとに ::= を書き、その後に非終端 記号または終端記号からなる列を縦棒 | で区切って並べた もの(縦棒はなくてもよいし、2つ以上あってもよい)

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

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

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

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

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

【参考】 Chomsky の言語階層 Noam Chomsky の言語階層 Type 0 制限なし Type 1 文脈依存文法 (context sensitive grammar) Type 2 文脈自由文法 (context free grammar) Type 3 正規文法 (regular grammar) ( 1年後期 形式言語とオートマトン )

第1問第1問 ビット列を BNF 記法を利用して定義せよ. また拡張 BNF 記法で書くとどうなるか. – 以下の非終端記号を利用せよ ビット列用の非終端記号 --- <ビット列> ビット用の非終端記号 --- <ビット> (ビット列の例) など。

第2問 a が偶数個 ( 0個は除く ) 並んだ文字列を BNF 記法、拡張 BNF 記法で定義せよ。 (例) aa や aaaaaaaa など。

第3問 自然数リストは、 ( ) であるか、ある いは自然数リストと自然数を ( 自然数. 自然数リスト ) のようにしてペアにした ものであるとする。これを BNF 記法で表 せ。ただし自然数は で既に定義さ れているものとする。 (例) (2. (30. (5. ( ) ) ) ) など。

第4問 対応のとれた括弧からなる文字列を BNF 記法で定義せよ。 (例) () や ()(()) など。

第5問 対応のとれた括弧で、3段階以上のネ ストは許さないような文字列を BNF 記法 で記述せよ。 (), (()), ()(), ()(()), …… ()((())) など、ネストが3段階以上のもの は除く。

第6問 問5の文字列は正規表現で記述できる か。

構文図式 ( syntax graph あるいは syntax diagram ) (さきほどの例) ::= ’0’ | ’1’ ::= ( ’and’ | ’or’ ) ’=’ 数字 1 0 式 and or 数字 = 文脈自由文法の構文規則を表す際に用いられ る graphical な言語

構文図式 終端記号 x x 非終端記号 A 繰り返し {α} α の図式

構文図式 並び α 1 α 2 … α n α 1 の図式 α 2 の図式 … α n の図式 選択 α 1 | α 2 | … | α n α 2 の図式 α 1 の図式 α n の図式 …

第7問 次の構成図が与えられたとき,この構成図で表現で きる文字列として正しいものを ① ~ ⑤ から全て選べ. ただし,英字は a, b, ・・・, z, A, B, ・・・, Z のい ずれか,数字は 0 , 1 ,・・・, 9 のいずれかである とする. 英字 数字 ‘#’ ① A3 ② BB ③ A# ④ #9 ⑤ 99

第8問 あるプログラミング言語で使える変数名は,次の構 文図で規定されているものとする。このとき,変数 名として使えないものを選べ。ただし,英字は a, b, ・・・, z , A, B, ・・・, Z のどれか,数字は 0, 1, ・・・, 9 のどれかである。 ① A ② name ③ B740 ④ C6H6 ⑤ 11PM 英字 数字 英字

補足 : 文法とは(1) 文法とは、 (N, T, P, S) N は記号の有限集合。非終端記号 (nonterminal symbol) と呼ぶ。 T は N とは重なりのない記号の有限集合。終端記 号 (terminal symbol) と呼ぶ。 P は、 (N  T)* N (N  T)*  (N  T)* の有限部分集 合。 P の要素を生成規則 (production) あるいは書 き換え規則 (rewriting rule) と呼ぶ。 (u,v)  P は文 字列 u を文字列 v に書き換えてもよいことを表す ルールであり、通常 u  v と書く。 S は N の要素で、開始記号 (start symbol) と呼ぶ。

補足 : 文法とは(2) u  v が生成規則で、 u が文字列  の部分文字列で あるとき(  =  u  となる ,   (N  T)* が存 在)、 文字列  の中の u を v に書き換えてよい (  ’ =  v  が得られる)。 これを    ’ と書く。 { x  T* | S  * x } が、 (N, T, P, S) によって生成され る言語。