言語処理系(7) 金子敬一.

Slides:



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

プログラミング言語論 第3回 BNF 記法について(演習付き) 篠埜 功. 構文の記述 プログラミング言語の構文はどのように定式化できるか? 例1 : for ループの中に for ループが書ける。 for (i=0; i
和田俊和 資料保存場所 /2/26 文法と言語 ー正規表現とオートマトンー 和田俊和 資料保存場所
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
Problem J: いにしえの数式 問題作成・解説: 北村 解答作成協力: 八森.
正規表現からのDFA直接構成.
文法と言語 ー字句解析とオートマトンlexー
コンパイラ 2011年10月17日
言語処理系(4) 金子敬一.
言語処理系(6) 金子敬一.
文法と言語 ー文脈自由文法とLR構文解析2ー
文法と言語 ー文脈自由文法とLL構文解析ー
プログラミング言語論 第4回 式の構文、式の評価
計算の理論 II 文脈自由文法と プッシュダウンオートマトン
原案: 矢藤(kohyatoh) 解答: 高原(rankalee, shimejitan), 矢藤 解説: 矢藤
Semantics with Applications
言語処理系(5) 金子敬一.
言語処理系(8) 金子敬一.
言語処理系(9) 金子敬一.
言語プロセッサ ー第8回目ー.
コンパイラ 2012年10月15日
コンパイラ 2012年10月22日
東京工科大学 コンピュータサイエンス学部 亀田弘之
言語プロセッサ2013 ー 第7回目 ー Tokyo University of Technology
情報科学(10-11) 言語処理系と仮想機械.
コンパイラ(9) 情報工学科5年 担当 河田 進.
コンパイラ 2011年10月24日
チューリング機械 状態の有限集合 ヘッドの方向を表す。 L:1コマ左へ R:1コマ右へ テープ記号の有限集合 入力記号の有限集合 動作関数
システムソフトウェア講義の概要 計算機システムの復習:中央演算処理装置(CPU),プログラムの実行,主記憶装置,補助記憶装置
コンパイラ 第14回 上昇型構文解析(2) 38号館4階N-411 内線5459
東京工科大学 コンピュータサイエンス学部 亀田弘之
コンパイラ資料 3章 構文解析.
言語プロセッサ 第7回目 平成27年11月16日.
プログラミング言語論 第3回 BNF記法について(演習付き)
正則言語 2011/6/27.
文法と言語 ー字句解析とオートマトンlexー
文法と言語 ー字句解析とオートマトンlexー
形式言語の理論 5. 文脈依存言語.
コンパイラ 第13回 上昇型構文解析(1) 38号館4階N-411 内線5459
言語プロセッサ2012 ー 第6回目 ー Tokyo University of technology
言語と文法 言語とは,ルールに従う記号列の無限集合である. 文法を与えることで言語が定義できる.
文法と言語 ー文脈自由文法とLR構文解析2ー
言語プロセッサ ー第9回目ー 構文解析(続き).
文法と言語 ー文脈自由文法とLR構文解析3ー
計算の理論 I 文脈自由文法の標準形 月曜3校時 大月美佳.
計算の理論 II 前期の復習 -有限オートマトン-
東京工科大学 コンピュータサイエンス学部 亀田弘之
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
プログラムの基本構造と 構造化チャート(PAD)
東京工科大学 コンピュータサイエンス学部 亀田弘之
プログラミング言語論 第9回 情報工学科 木村昌臣 篠埜 功.
文法と言語 ー文脈自由文法とLL構文解析ー
コンパイラ 2011年10月20日
JAVAバイトコードにおける データ依存解析手法の提案と実装
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
文法と言語 ー文脈自由文法とLR構文解析ー
計算の理論 I -プッシュダウンオートマトン-
文法と言語 ー字句解析とオートマトンlexー
東京工科大学 コンピュータサイエンス学部 亀田 弘之
4.プッシュダウンオートマトンと 文脈自由文法の等価性
システムソフトウェア講義の概要 計算機システムの復習:中央演算処理装置(CPU),プログラムの実行,主記憶装置,補助記憶装置
コンパイラ 2012年10月11日
言語プロセッサ ー第9回目ー 構文解析(続き).
言語プロセッサ ー第7回目ー 構文解析(続き).
東京工科大学 コンピュータサイエンス学部 亀田 弘之
東京工科大学 コンピュータサイエンス学部 亀田 弘之
オートマトンって? (Turing machine).
システムソフトウェア講義の概要 計算機システムの復習:中央演算処理装置(CPU),プログラムの実行,主記憶装置,補助記憶装置
文法と言語 ー文脈自由文法とLR構文解析2ー
4.2 再帰下降解析 (1)再帰下降解析とは ■再帰下降解析(Recursive Descent Parsing)
Presentation transcript:

言語処理系(7) 金子敬一

5 基本的な構文解析技法 5.1 構文解析系 5.2 移動還元構文解析 5.3 演算子順位構文解析 5.4 下降型構文解析 5 基本的な構文解析技法 5.1 構文解析系 5.2 移動還元構文解析 5.3 演算子順位構文解析 5.4 下降型構文解析 5.5 予測的構文解析系

5.4 下降型構文解析系 下降型構文解析の例 S → c A d A → a b | a S c a d c A d

5.4 下降型構文解析系 下降型構文解析の例 S → c A d A → a b | a S c a d c A d a b

5.4 下降型構文解析系 下降型構文解析の例 S → c A d A → a b | a S c a d c A d a b

5.4 下降型構文解析系 下降型構文解析の例 S → c A d A → a b | a S c a d c A d a b

5.4 下降型構文解析系 下降型構文解析の例 S → c A d A → a b | a S c a d c A d d a

5.4 下降型構文解析系 下降型構文解析の例 以下の問題点がある: 左再起性を持つ文法では,無限ループに陥る可能性 5.4 下降型構文解析系 下降型構文解析の例 以下の問題点がある: 左再起性を持つ文法では,無限ループに陥る可能性 後戻りが必要なため,大きなオーバヘッドの可能性 代替の試行順序によって受理される言語が異なる可能性

5.4 下降型構文解析系 左再帰性の消去 G:文法,A ⇒ +Aaのとき,G:左再帰的 1)すべてのA生成規則をまとめる 5.4 下降型構文解析系 左再帰性の消去 G:文法,A ⇒ +Aaのとき,G:左再帰的 1)すべてのA生成規則をまとめる A → A a1 | ... | A am | b1 | ... | bn 2)この規則を,以下の生成規則に置換 A → b1 A’ | ... | bn A’ A’ → a1 A’ | ... | am A’ | e

5.4 下降型構文解析系 左再帰性の消去 1)すべてのA生成規則をまとめる 5.4 下降型構文解析系 左再帰性の消去 1)すべてのA生成規則をまとめる A → A a1 | ... | A am | b1 | ... | bn 2)この規則を,以下の生成規則に置換 A → b1 A’ | ... | bn A’ A’ → a1 A’ | ... | am A’ | e E → T E’ E’ → + T E’ | e E → E + T | T

5.4 下降型構文解析系 左再帰性の消去 E → T E’ E’ → + T E’ | e E → E + T | T T → F T’ 5.4 下降型構文解析系 左再帰性の消去 E → T E’ E’ → + T E’ | e T → F T’ T’ → * F T’ | e F → ( E ) | id E → E + T | T T → E + T | T F → ( E ) | id

5.4 下降型構文解析系 左再帰性の消去 Gの非終端記号をA1, A2, ..., Anとする A1の直接左再帰性を除去 A2にA1を代入 5.4 下降型構文解析系 左再帰性の消去 Gの非終端記号をA1, A2, ..., Anとする A1の直接左再帰性を除去 A2にA1を代入 A2の直接左再帰性を除去 A3にA1, A2を代入 A3の直接左再帰性を除去 …

5.4 下降型構文解析系 左再帰性の消去 S → A a | b A → A c | S d | e Sに直接左再帰はない. 5.4 下降型構文解析系 左再帰性の消去 S → A a | b A → A c | S d | e Sに直接左再帰はない. A → A c | A a d | b d | e Aの左再帰性を除去して A → b d’ A’ | e A’ A’ → c A’ | a d A’ | e

5.4 下降型構文解析系 再帰下降型構文解析 再帰的,後戻りなし A → a1 | a2 | ... | an 5.4 下降型構文解析系 再帰下降型構文解析 再帰的,後戻りなし A → a1 | a2 | ... | an なるA規則で,入力記号aの代替が常に1つに決まるならば,後戻りの必要なし

適 5.4 下降型構文解析系 左括り出し 文 → if 条件 then 文 else 文 | while 条件 do 文 5.4 下降型構文解析系 左括り出し 文 → if 条件 then 文 else 文 | while 条件 do 文 | begin 文の並び end | if 条件 then 文 適

適 5.4 下降型構文解析系 左括り出し 文 → if 条件 then 文 else 文 | if 条件 then 文 5.4 下降型構文解析系 左括り出し 文 → if 条件 then 文 else 文 | if 条件 then 文 文 → if 条件 then 文 文’ 文’ → else 文 | e 適

5.4 下降型構文解析系 遷移図 E: E’: T: T’: F: T + F * ( E’ T’ E ) e id E → T E’ 5.4 下降型構文解析系 遷移図 E: E’: T: T’: F: T + F * ( E’ T’ E ) e id E → T E’ E’ → + T E’ | e T → F T’ T’ → * F T’ | e F → ( E ) | id

5.4 下降型構文解析系 遷移図 E: E’: T: T’: F: T + F * ( E’ T’ E ) e id E: T: F: T 5.4 下降型構文解析系 遷移図 E: E’: T: T’: F: T + F * ( E’ T’ E ) e id E: T: F: T F ( e E ) id + *

5.4 下降型構文解析系 遷移図 T e + E: F e * T: ( E ) id F:

ちょっと休憩 (雑談)

たほいや だんぼらぼ 水中に大きな物を投げ入れた時の音。 香川県で段々畑の意。 なでしこに似た花をつける植物。春から夏にかけて海沿いの暖かい斜面に群生する。 ソラユリ科 高山植物のひとつ。 だらしない人。

たほいや おっぱ 小さな木の葉。転じて身分の軽い者のこと。 東北地方で冬に肩に掛ける上衣。 物事の最後。結末。 おおざっぱにまとめること。 南米に生息するカミキリムシ。

たほいや ねぎどの ねぎを育てるための肥沃な土壌。 田んぼにいる虫のこと。 キリギリス・イナゴの異称。 死者をねぎらうための部屋。ねぎどころ。 米沢藩主 上杉鷹山の愛称。

たほいや したひ 鍋などを熱するときの種火。 死体。 鎧のひどうしの下につける衣服。 下火になることの古称 人気が落ちる。 赤く色づくこと。

たほいや ぬじ 色鮮やかな様子。 左官屋の壁を塗る下地のこと。 しったかぶり。 「にじ」の古形。のじ。 所有者のいる土地。

たほいや にこぽん 天から授かる幸い。天運。 にこにこして相手の肩をぽんと叩き、親しそうにうちとけて人を懐柔する態度。 ニコチンとヒロポンの融合語。 調子のよい人。にこりと笑って肩をたたくことから。 物事が新鮮なさま。

休憩おわり

5.5 予測的構文解析系 概要 入力 a + b $ 入力 スタック X 構文解析表 Y プログラム 出力 Z 出力 $ 構 文 5.5 予測的構文解析系 概要 入力 スタック 構文解析表 出力 入力 a + b $ X Y Z $ プログラム 出力 構 文 解析表 M[X,a] スタック 次の動作を決定

5.5 予測的構文解析系 概要 入力 $ $ プログラム 出力 構 文 解析表 受理 M[$,$] スタック

5.5 予測的構文解析系 概要 入力 a + b $ a Y Z $ プログラム 出力 構 文 解析表 M[a,a] スタック

5.5 予測的構文解析系 U 概要 入力 V a + b $ W X Y プログラム Z 出力 $ 構 文 M[X,a] 解析表 スタック 5.5 予測的構文解析系 U V W 概要 入力 a + b $ X Y Z $ プログラム 出力 構 文 解析表 M[X,a] スタック X → U V W

5.5 予測的構文解析系 E → T E’ 動作 E’ → + T E’ | e T → F T’ T’ → * F T’ | e 5.5 予測的構文解析系 E → T E’ E’ → + T E’ | e T → F T’ T’ → * F T’ | e F → ( E ) | id 動作 id + * ( ) $ E E→T E’ E’ E’→+ T E’ E’→e T T→F T’ T’ T’→e T’→* F T’ F F →id F →(E)

5.5 予測的構文解析系 動作 $ E’ T + id * $ E’ T’ F id * $ E’ T’ + id * $ E’ T id 5.5 予測的構文解析系 動作 $ E’ T + id * $ E’ T’ F id * $ E’ T’ + id * $ E’ T id * $ E’ T’ F id + * $ E id + * $ E’ T’ id + * $ E’ T id + * $ E’ + id * id + * ( ) $ E E→T E’ E’ E’→+ T E’ E’→e T T→F T’ T’ T’→e T’→* F T’ F F →id F →(E)

5.5 予測的構文解析系 動作 $ E’ T’ id $ E’ T’ $ $ E’ T’ F id $ E’ $ E’ T’ * id $ 5.5 予測的構文解析系 動作 $ E’ T’ id $ E’ T’ $ $ E’ T’ F id $ E’ $ E’ T’ * id $ E’ T’ id * $ E’ T’ F id * $ E’ T’ F * id id + * ( ) $ E E→T E’ E’ E’→+ T E’ E’→e T T→F T’ T’ T’→e T’→* F T’ F F →id F →(E)

5.5 予測的構文解析系 FIRSTとFOLLOW 任意の文法記号列a, FIRST(a): aから導出可能な文字列の先頭の終端記号の集合 5.5 予測的構文解析系 FIRSTとFOLLOW 任意の文法記号列a, FIRST(a): aから導出可能な文字列の先頭の終端記号の集合 任意の文法記号列A, FOLLOW(A): 文形式においてAのすぐ右に出現しうる終端記号の集合(含む$)

5.5 予測的構文解析系 FIRSTの求め方 X:任意の文法記号,FIRST(X)を以下のように求める 5.5 予測的構文解析系 FIRSTの求め方  X:任意の文法記号,FIRST(X)を以下のように求める 1)X:終端記号,FIRST(X)={X} 2)X:非終端,X→a a, a FIRST(X) 3)X→Y1 Y2 ... Yk, Y1 Y2 ... Yi-1⇒+eならばFIRST(Yi)-{e} FIRST(X) Y1 Y2 ... Yk⇒*eならば, e FIRST(X)

5.5 予測的構文解析系 FOLLOWの求め方 A:任意の非終端記号,FOLLOW(A)を 以下のように求める 5.5 予測的構文解析系 FOLLOWの求め方  A:任意の非終端記号,FOLLOW(A)を 以下のように求める 1)S:出発記号,$ FOLLOW(S) 2)A→a B b, b = e, FIRST(b)-{e} FOLLOW(B) 3)A→a Bまたは, A→a B bかつe FIRST(b), FOLLOW(A) FOLLOW(B)

5.5 予測的構文解析系 構文解析表の構成 1)各生成規則A→aに対し,2,3を実行 5.5 予測的構文解析系 構文解析表の構成 1)各生成規則A→aに対し,2,3を実行 2)各終端記号a FIRST(a)に対して, M[A,a]にA→aを記入 3)e FIRST(a)ならば, 各終端記号b FOLLOW(A)に対して,M[A,b]にA→aを記入.e FIRST(a)かつ$ FOLLOW (A)ならばM[A,b]にA→aを記入 4)空欄にerrorを記入

5.5 予測的構文解析系 LL(1)文法 構文解析表のどの欄も多重定義されていない文法

5.5 予測的構文解析系 任意の終端記号a, aとbのうち高々一方がaで始まる文字列を導出 aとbのうち高々一方が空列を導出 5.5 予測的構文解析系 LL(1)文法の必要十分条件 A → a | bに対して, 任意の終端記号a, aとbのうち高々一方がaで始まる文字列を導出 aとbのうち高々一方が空列を導出 b⇒*eならばaはFOLLOW(A)に含まれる終端記号で始まる文字列を導出しない