言語処理系(7) 金子敬一 5 基本的な構文解析技法 5.1 5.2 5.3 5.4 5.5 構文解析系 移動還元構文解析 演算子順位構文解析 下降型構文解析 予測的構文解析系 5.4 下降型構文解析系 • 下降型構文解析の例 S → c A d A → a b | a c a d S c A d 5.4 下降型構文解析系 • 下降型構文解析の例 S → c A d A → a b | a c a d S A d c a b 5.4 下降型構文解析系 • 下降型構文解析の例 S → c A d A → a b | a c a d S A d c a b 5.4 下降型構文解析系 • 下降型構文解析の例 S → c A d A → a b | a c a d S A d c a b 5.4 下降型構文解析系 • 下降型構文解析の例 S → c A d A → a b | a c a d S c A d a 5.4 下降型構文解析系 • 下降型構文解析の例 以下の問題点がある: −左再起性を持つ文法では,無限ルー プに陥る可能性 −後戻りが必要なため,大きなオーバ ヘッドの可能性 −代替の試行順序によって受理される 言語が異なる可能性 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生成規則をまとめる A → A a1 | ... | A am | b1 | ... | bn 2)この規則を,以下の生成規則に置換 A → b1 A’ | ... | bn A’ A’ → a1 A’ | ... | am A’ | e → T E’ E E → E + T | T E’ → + T E’ | e 5.4 下降型構文解析系 • 左再帰性の消去 E → E + T | T T → E + T | T F → ( E ) | id E → T E’ → + T → F T’ → * F → ( E’ T E’ | e T’ F T’ | e E ) | id 5.4 下降型構文解析系 • 1. 2. 3. 4. 5. 6. 7. 左再帰性の消去 Gの非終端記号をA1, A2, ..., Anとする A1の直接左再帰性を除去 A2にA1を代入 A2の直接左再帰性を除去 A3にA1, A2を代入 A3の直接左再帰性を除去 … 5.4 下降型構文解析系 • 左再帰性の消去 S → A a | b A → A c | S d | e 1. Sに直接左再帰はない. 2. A → A c | A a d | b d | e 3. Aの左再帰性を除去して S → A a | b A → b d’ A’ | e A’ A’ → c A’ | a d A’ | e 5.4 下降型構文解析系 • 再帰下降型構文解析 再帰的,後戻りなし A → a1 | a2 | ... | an なるA規則で,入力記号aの代替が常に 1つに決まるならば,後戻りの必要なし 5.4 下降型構文解析系 • 左括り出し 文 → if 条件 then 文 else 文 | while 条件 do 文 | begin 文の並び end 適 文 → if 条件 then 文 else 文 | if 条件 then 文 5.4 下降型構文解析系 • 左括り出し 文 → if 条件 then 文 else 文 | if 条件 then 文 文 → if 条件 then 文 文’ 文’ → else 文 | e 適 5.4 下降型構文解析系 • 遷移図 E → T E’ E’ → + T E’ | e T → F T’ T’ → * F T’ | e F → ( E ) | id E: E’: T: T’: F: T E’ + T F T’ * F ( E E’ e T’ )e id 5.4 下降型構文解析系 • 遷移図 E:E: E’: T:T: T’: F:F: T + + E’ e F * * T’ e ( E T F E’ e T’ )e id 5.4 下降型構文解析系 • 遷移図 E: T + e T: F * e ( E F: ) id ちょっと休憩 (雑談) たほいや • 1. 2. 3. だんぼらぼ 水中に大きな物を投げ入れた時の音。 香川県で段々畑の意。 なでしこに似た花をつける植物。春から 夏にかけて海沿いの暖かい斜面に群 生する。 4. ソラユリ科 高山植物のひとつ。 5. だらしない人。 たほいや • おっぱ 1. 小さな木の葉。転じて身分の軽い者の こと。 2. 東北地方で冬に肩に掛ける上衣。 3. 物事の最後。結末。 4. おおざっぱにまとめること。 5. 南米に生息するカミキリムシ。 たほいや • 1. 2. 3. 4. 5. ねぎどの ねぎを育てるための肥沃な土壌。 田んぼにいる虫のこと。 キリギリス・イナゴの異称。 死者をねぎらうための部屋。ねぎどころ。 米沢藩主 上杉鷹山の愛称。 たほいや • 1. 2. 3. 4. 5. したひ 鍋などを熱するときの種火。 死体。 鎧のひどうしの下につける衣服。 下火になることの古称 人気が落ちる。 赤く色づくこと。 たほいや • 1. 2. 3. 4. 5. ぬじ 色鮮やかな様子。 左官屋の壁を塗る下地のこと。 しったかぶり。 「にじ」の古形。のじ。 所有者のいる土地。 たほいや • にこぽん 1. 天から授かる幸い。天運。 2. にこにこして相手の肩をぽんと叩き、親 しそうにうちとけて人を懐柔する態度。 3. ニコチンとヒロポンの融合語。 4. 調子のよい人。にこりと笑って肩をたた くことから。 5. 物事が新鮮なさま。 休憩おわり 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 X W Y Z $ ス タ ッ ク a + b $ プログラム 構 文 M[X,a] 解析表 入力 出力 X → U V W 5.5 予測的構文解析系 • 動作 id E E’ T T’ E→T E’ F F →id + E → T E’ → + T → F T’ → * F → ( E’ T E’ | e T’ F T’ | e E ) | id * ( ) $ E’→e E’→e T’→e T’→e E→T E’ E’→+ T E’ T→F T’ T→F T’ T’→e T’→* F T’ F →(E) 5.5 予測的構文解析系 • 動作 $ E T’ E’ + T id F id E E’ T T’ E→T E’ F F →id + id + id * id $ * ( ) $ E’→e E’→e T’→e T’→e E→T E’ E’→+ T E’ T→F T’ T→F T’ T’→e T’→* F T’ F →(E) 5.5 予測的構文解析系 • 動作 $ E’ T’ id F * id E E’ T T’ E→T E’ F F →id + id * id $ * ( ) $ E’→e E’→e T’→e T’→e E→T E’ E’→+ T E’ T→F T’ T→F T’ T’→e T’→* F T’ F →(E) 5.5 予測的構文解析系 •FIRSTとFOLLOW −任意の文法記号列a, FIRST(a): a から導出可能な文字列の先頭の終端 記号の集合 −任意の文法記号列A, FOLLOW(A): 文形式においてAのすぐ右に出現しう る終端記号の集合(含む$) 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)を 以下のように求める 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を実行 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 予測的構文解析系 • LL(1)文法の必要十分条件 A → a | bに対して, −任意の終端記号a, aとbのうち高々 一方がaで始まる文字列を導出 −aとbのうち高々一方が空列を導出 −b⇒*eならばaはFOLLOW(A)に含ま れる終端記号で始まる文字列を導出 しない
© Copyright 2024 ExpyDoc