計算機の能力差 内容 文脈自由文法 構文解析 Chomsky 標準形 計算機の能力差 内容 文脈自由文法 構文解析 Chomsky 標準形 計算機の能力差 2 つの計算機 A と計算機 B 計算基礎論 文脈自由文法 (context-free grammar) 計算機 A でできることで,計算機 B でできないことがある また,計算機 B でできることで,計算機 A でできないこと がある . ⇒ 計算能力の比較不能 . 宮野 英次 [email protected] 2009 年 計算機の能力差 内容 文脈自由文法 計算機 A でできることは計算機 B でも必ずできる しかし,計算機 B でできることで,計算機 A ではできない ことがある . ⇒ 計算能力の比較可能 ⇒ 計算機 B の方が強力であり,能力が高い 構文解析 Chomsky 標準形 計算機の能力差 内容 内容 第2回 ∼ 第4回 FA と正規表現は,本質的に等価な言語の記憶法 {0n1n|n ≤ 0} のような幾つかの単純な言語を記述不可能 第 5 回,第 6 回 より強力な言語記述法: 文脈自由文法 (context-free grammar) 文脈自由文法 構文解析 Chomsky 標準形 文脈自由文法の例 回文 (palindrome) トマト,しんぶんし, . . . 01100110,110101101011, . . . 回文の言語 (回文の集合) Lpal = {w|w ∈ {0, 1}∗, w = wR} 文脈自由文法 再帰的な構造を記述可能 Lpal は正規言語ではない.正規表現では表せない. プログラミング言語の仕様記述などで利用 再帰的定義は可能: (Basis) ε,0,1 は回文 (Intduction) w が回文ならば,0w0,1w1 も回文.0 と 1 で 作られる回文は,これらの規則で構成できるものに限られる マークアップ言語 (XML, HTML),文章型定義 (DTD) コンパイラやインタプリタの構文解析部 (parser) 文脈自由言語 (context-free language) より強力なプッシュダウン・オートマトン 文脈自由文法: 言語を形式的に記述する記法 計算機の能力差 内容 文脈自由文法 構文解析 Chomsky 標準形 計算機の能力差 内容 文脈自由文法 文脈自由文法 構文解析 Chomsky 標準形 生成文字列 文法 以下の方法で生成された文字列全体を文法が生成する言語 生成規則 (production) または書き換え規則 (substitution rule) の集まりからなる 書き換え規則は矢印により分離された文字と文字列 . 文字は変数と呼ばれる 文字列は,変数と終端記号と呼ばれる特別な文字からなる . . 1 開始変数を書き下す 2 書き下された変数とその変数で始まる規則を探す. 3 書き下された変数を規則の右辺で置き換える 4 変数がなくなるまでステップ 2 および 3 を繰り返す 変数文字は,多くの場合大文字 . 終端記号は,多くの場合小文字,数,特別な文字 . 文法 G1 の場合 (A → 0A1, A → B, B → ]) 例えば,文字列 000]111 などを生成 ある変数が開始変数 (第 1 規則の左辺の変数とする) 文法 G1 A → 0A1 A→B B→] 計算機の能力差 . 文法 G1 は 3 つの規則 G1 の変数は A と B .A は開始変数 G1 の終端記号は,0, 1, ] 内容 文脈自由文法 構文解析 導出列 (derivationa) . A ⇒ 0A1 ⇒ 00A11 ⇒ 000A111 ⇒ 000B111 ⇒ 000]111 . Chomsky 標準形 計算機の能力差 内容 構文解析木 文脈自由文法 文脈自由文法の言語 構文解析木,parse tree 文法 G1 の場合 (A → 0A1, A → B, B → ]) 文法 G1 における 000]111 に対する構文解析木 A ⇒ 0A1 ⇒ 00A11 ⇒ 000A111 ⇒ 000B111 ⇒ 000]111 文脈自由言語 Context-Free Language, CFL 文脈自由文法が生成した文字列の全体 文法 G の言語を L(G) と書く A 文法 G1 の場合 A L(G) = {0n]1n|n ≥ 0} A 0 0 0 A A → 0A1|B B B → ] # 1 1 1 構文解析 Chomsky 標準形 計算機の能力差 内容 文脈自由文法 構文解析 Chomsky 標準形 計算機の能力差 内容 文脈自由文法の形式的な定義 文脈自由文法 構文解析 Chomsky 標準形 文法の言語 (language of the grammar) 生起する 定義 2.2 u, v, w が変数や終端記号の列 文脈自由文法 (context-free grammar) は 4 個組 (V, Σ, R, S) A → w が文法規則ならば, uAv が uwv を生起するといい,uAv ⇒ uwv と書く 1 V は変数 (variable) と呼ばれる有限集合 2 Σ は終端記号 (terminal) と呼ばれる V と共通部分を持た ない有限集合 3 R は変数 (左辺) および変数と終端記号の文字列 (右辺) から なる規則 (rule) の有限集合 . 4 u = v であるか,または, k ≥ 0 に対して,系列 u1 , u2 , · · · , uk が存在し, u ⇒ u1 ⇒ u2 ⇒ · · · ⇒ uk ⇒ v ∗ であるならば,u ⇒ v と書く S ∈ V は開始変数 文法の言語 . ∗ 集合 {w ∈ Σ∗|S ⇒ w} を文法の言語という . . 計算機の能力差 内容 文脈自由文法 構文解析 Chomsky 標準形 計算機の能力差 内容 文脈自由文法 構文解析 . 文脈自由文法の例 . 文脈自由文法の例 文法 G = ({S}, {0, 1}, R, S) 規則集合 R: S → 0S1|ε 例 2.2 文法 G3 = ({S}, {a, b}, R, S) 規則集合 R: S → aSb|SS|ε . 生成する文字列 生成する文字列 ε, 01, 0011, 000111, 00001111, · · · ab, abab, aabb, aaabbb, aababb, · · · 言語 B = {0n1n|n ≥ 0} a を左括弧「(」,b を右括弧「)」と見ると, (), ()(), (()), ((())), (()()) L(G3 ) は,正しく入れ子構造になった括弧列すべてからな る言語 復習 言語 B = {0n1n|n ≥ 0} は正規ではない Chomsky 標準形 計算機の能力差 内容 文脈自由文法 構文解析 Chomsky 標準形 計算機の能力差 内容 文脈自由文法 Chomsky 標準形 構文解析 Quiz 5-1 プログラミング言語でのコンパイル 問: 回文に対する文脈自由文法を求めなさい ∗ 構文解析 コンパイラの構文解析 Lpal = {w|w ∈ {0, 1} , w = w } R コードの「意味」解析 例: 異なる 2 つの式 (文字列) a+a×a 2 項目の「a × a」を行ってから,1 項目の a と加算を行う (a + a) × a 1 項目の「a + a」を行ってから,a と乗算を行う ⇓ (異なる) 文脈自由文法における構文解析木に対応 計算機の能力差 内容 文脈自由文法 構文解析 Chomsky 標準形 計算機の能力差 内容 文脈自由文法 文脈自由文法の例 文法 G4 = (V, Σ, R, hEXPRi) V = {hEXPRi,hTERMi,hFACTORi} Σ = {a, +, ×, (, )} 規則集合 R hEXPRi hTERMi hFACTORi → → → 異なる hEXPREi に対して異なる構文解析木 <EXPR> <TERM> <TERM> <EXPR> <EXPR> <TERM> (a + a) ×a + a × a | {z } | {z } hTERMi hFACTORi | {z } hTERMi Chomsky 標準形 構文解析木 hEXPRi + hTERMi | hTERMi hTERMi × hFACTORi | hFACTORi (hEXPRi) | a Example: 構文解析 <FACTOR> <EXPR> <TERM> <EXPR> <TERM> <FACTOR> <FACTOR> <FACTOR> <FACTOR> <TERM> <TERM> <FACTOR> <FACTOR> a + a a ( a + a ) a 計算機の能力差 内容 文脈自由文法 構文解析 Chomsky 標準形 計算機の能力差 内容 曖昧性 文脈自由文法 構文解析 Chomsky 標準形 曖昧の定義 同じ文字列に対しては同じ構文解析木になるか? No ! 曖昧 2 つの異なる構文解析木を持つとき 文法 G5 = {{hEXPRi}, {a, +, ×, (, )}, R, hEXPRi} 2 つの異なる導出列を持つときではない (単に変数を置き換える順番が異なっている場合など) 規則集合 R hEXPRi → hEXPRi + hEXPRi | hEXPRi × hEXPRi 最左導出列 hEXPRi → (hEXPRi) | a 変数を置き換える順番を固定 <EXPR> <EXPR> <EXPR> a <EXPR> <EXPR> <EXPR> <EXPR> + a <EXPR> a a + 導出列で,すべてのステップにおいて最も左に残っている変 数を置き換えるような導出列 <EXPR> a <EXPR> 定義 2.7 a 文字列 w が 2 つ以上の異なる最左導出列を持つならば,その文字 列は文脈自由文法 G において曖昧に導出される.文法 G がある 文字列を曖昧に生成するならば,G は曖昧である 上のような文法を曖昧であるという 計算機の能力差 内容 文脈自由文法 構文解析 Chomsky 標準形 計算機の能力差 内容 本質的に曖昧 構文解析 Chomsky 標準形 Chomsky 標準形 文脈自由文法を用いた作業を行うとき,それらを単純化した 形式にすると便利であることが多い 最も単純で有用な形式の一つとして Chmomsky 標準形が知 られている . 定義 2.8 . ある曖昧な文法に対して,同じ言語を生成する曖昧でない文 法を見付けることができる場合がある. しかし,いくつかの文脈自由言語の中に,曖昧な文法によっ てのみ生成されうるものがある. すべての規則が 例: 言語 {aibj ck | i = j, または, j = k} (証明) 省略. 文脈自由文法 .. A → BC . A → a . という形である文法を Chmosky 標準形 (Chomsky normal form) という.ここで,a は任意の終端記号,A は任意の変数, B と C は開始変数ではない任意の変数である.ただし,開始変 数 S に対しては,規則 S → ε を加えてもよい 計算機の能力差 内容 文脈自由文法 構文解析 Chomsky 標準形 計算機の能力差 Chomsky 標準形の性質 内容 文脈自由文法 構文解析 Chomsky 標準形 証明 (定理 2.9) 1.新しい変数 S0 と規則 S0 → S を追加する 定理 2.9 ただし,S は元々の開始変数 任意の文脈自由言語は,Chomsky 標準形の文脈自由文法により 生成される . 2 A → ε の形式のすべての ε 規則を消去する 3 A → B の形式のすべての単位規則を消去する 4 残りの規則を適切な形式に変換する . 証明のアイデア: 任意の文法を Chomsky 標準形に変換できることを示す . 1 新しい開始変数を加える 開始文字が規則の右辺に現れないことを保証 2.A が開始変数でないような A → ε 形式の規則を除去し,そ の代わりに,規則の右辺に A が出現するたびに,その出現した A を削除した新しい規則を加える u と v が変数や終端記号の文字列である規則 R → uAv に 対して,規則 R → uv を加える 規則 R → uAvAw に対しては,R → uvAw , R → uAvw,R → uvw を加える 規則 R → A に対しては,以前に規則 R → ε を除去してい ない限り R → ε を加える 開始変数以外について,これらの作業を繰り返す 計算機の能力差 内容 文脈自由文法 構文解析 Chomsky 標準形 . 証明 (つづき) . . . 3.単位規則 A → B を除去し,その代わりに,規則 B → u が 現れるときはいつでも,規則 A → u を加える. ただし,A → u が以前に除去した単位規則のときは加え ない. すべての単位規則を消去するまで繰り返す 4.残りの規則を適切な形式に変換する まず,規則 A → u1 u2 · · · uk (k ≥ 3) に対して, A → u1 A1 ,A1 → u2 A2 ,A2 → u3 A3 ,· · · , Ak−2 → uk−1 Ak−1 で置き換える.ただし,ui は変数か終 端記号,Ai は新しい変数である. k = 2 のとき,規則 A → u1 u2 に対しては,各終端記号 ui を新しい変数 Ui で置き換え,規則 Ui → ui を加える
© Copyright 2024 ExpyDoc