1 / 50

上昇型構文解析

上昇型構文解析. LR(0) LR(1). 復習. シフト状態,還元状態.  ルールの番号 [簡単のため,括弧なしとする]. (0)  S→ E$ (1)  E→ E+T (2)  E→ T (3)  T→ T*F (4)  T→ F (5)  F→ a. LR(0)閉包全体. I0={S→・E$      E→・E+T      E→・T      T→・T*F      T→・F      F→・ a   }    I1={S→E・$         E→E・+T }   I2={E→T・        T→T・*F }

lou
Télécharger la présentation

上昇型構文解析

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 上昇型構文解析 LR(0) LR(1)

  2. 復習 シフト状態,還元状態

  3.  ルールの番号[簡単のため,括弧なしとする] ルールの番号[簡単のため,括弧なしとする] (0) S→E$ (1) E→E+T (2) E→T (3) T→T*F (4) T→F (5) F→a

  4. LR(0)閉包全体 I0={S→・E$      E→・E+T      E→・T      T→・T*F      T→・F      F→・a  }    I1={S→E・$         E→E・+T }   I2={E→T・        T→T・*F }  I3={T→F・ } I4={F→a・ } I5={E→E+・T      T→・T*F      T→・F      F→・a  } I6={E→E+T・      T→T・*F } I7={T→T*・F      F→・a  } I8={T→T*F・ } I9={S→E$・ :受理} + T E F * * T F F $ a a a

  5.  いままでの解析過程を考慮=現在の解析状態 いままでの解析過程を考慮=現在の解析状態 • 生成規則の例:E→E+T • 現在の解析状態を・を用いて表現する • E→・E+T • E→E・+T • E→E+・T • E→E+T・ 次に進む=シフト状態 オートマトンにより状態を決定 ルールを適用=還元状態 右辺を取り除いて,左辺を入れる

  6. SLR(1) 構文解析表 状態0で次の終端記号がaならば,状態4に行け 状態0でFが来れば, 状態3に行け FOLLOW(E)={+,$} FOLLOW(E)={+,$} ルール3で還元

  7. a+a$ 解析過程 スタックの様子 0 0a4→0F3→0T2→0E1 残り入力 a+a$ +a$ 状態0で入力aならS4 状態4で入力+ならR5=> ルール5:F→a aを取り除きFを入れ, SLR(1)表より,状態0で入力Fならgoto3 ゆえに,0F3 となる

  8. FOLLOWを考える LR(0) LR(1)

  9. 文法規則 (0)S→E$ (1)E→T+T (2)E→T (3)T→a a+a を解析する 仮定: (1)上昇型解析 (2)番号の大きい規則から順番に適用する. 解析状況を  (スタック内容,入力残り) として記述する. 上昇型構文解析:FOLLOW考慮せず

  10. 解析過程:バックトラックあり 最後に規則(E→T)を適用した所を シフトに変更 • ($,a+a$)→($a,+a$)→($T,+a$)→($E,+a$)→($E+,a$)→($E+a,$)→($E+T,$)→($E+E,$)→($E+E$,ε)=解析失敗=バックトラック • ($,a+a$)→($a,+a$)→($T,+a$)→($E,+a$)→($E+,a$)→($E+a,$)→($E+T,$)→($E+T$,ε)=解析失敗=バックトラック • ($,a+a$)→($a,+a$)→($T,+a$)→($E,+a$)→($E+,a$)→($E+a,$)→($E+a$,ε)=解析失敗=バックトラック • ($,a+a$)→($a,+a$)→($T,+a$)→($T+,a$)→($T+a,$)→($T+T,$)→($E,$)→($E$,ε)→($S,ε)=受理 最後に規則(T→a)を適用した所を シフトに変更 最後に規則(E→T)を適用した所を シフトに変更

  11. 文法規則 (0)S→E$ (1)E→T+T (2)E→T (3)T→a a+a を解析する 規則(1)が適用できるときは,規則(3)より先に適用する. FOLLOW(E)={ $ } 規則(1),(2)は後ろが$の時のみ,適用する. 上昇型構文解析:いままでの解析過程を考慮+FOLLOW考慮

  12. 解析過程:バックトラックなし 後ろが+ ↓ E→Tを適用しない=シフト • ($,a+a$)→($a,+a$)→($T,+a$)→($T+,a$)→($T+a,$) • →($T+T,$)→($E,$)→($E$,ε)→($S,ε)=受理 後ろが$ ↓ E→T+Tを適用する=還元

  13. 先読みによりバックトラックをなくす • S→E$ • E→E+T|T • T→T*F|F • F→a • 右辺のTに着目すると • E→T • T→T*F • 一つ右を見ればどれを使えばいいか判定できる 右が+または$ FOLLOW(E)={+,$} 右が* FOLLOW(T)={*,+,$}

  14.  いままでの解析過程を考慮=現在の解析状態 いままでの解析過程を考慮=現在の解析状態 • 生成規則の例:E→E+T • 現在の解析状態を・を用いて表現する • E→・E+T • E→E・+T • E→E+・T • E→E+T・ 次に進む=シフト状態 ルールを適用=還元状態

  15. ★ シフト状態? 還元状態?正しいのは? ①E→・E+T    還元状態 ②E→E・+T    シフト状態 ③T→T+・T    還元状態 ④T→F・      シフト状態 ⑤T→E+T・    シフト状態 ⑥正解なし

  16. 状態の閉包 • 文法G1 (0)S→E$(1)E→E+T (2)E→T (3)T→T*F (4)T→F (5)F→a   S→・E$   E→・E+T   E→・T   T→・T*F   T→・F   F→・a 閉包(closure)

  17. S→E$,E→T+T,E→T,T→a S→・E$ E→・T+T E→・T T→・a S→E・$ S→E$・ $ E T E→T・+T E→T・ $ a 訂正 + T→a・ a E→T+・T T→・a FOLLOW(E)={ $}と Tの後ろ={ +}の 共通集合は空 ⇒ 後ろのトークンで決定できる  T どちらもシフト状態 ↓ シフト E→T+T・

  18. 例:()なし算術式の文法規則 (0)S→E$ (1)E→E+T (2)E→T (3)T→T*F (4)T→F (5)F→a

  19. LR(0)閉包全体 I0={S→・E$      E→・E+T      E→・T      T→・T*F      T→・F      F→・a  }    I1={S→E・$         E→E・+T }   I2={E→T・        T→T・*F }  I3={T→F・ } I4={F→a・ } I5={E→E+・T      T→・T*F      T→・F      F→・a  } I6={E→E+T・      T→T・*F } I7={T→T*・F      F→・a  } I8={T→T*F・ } I9={S→E$・ :受理} + T E F * * T F F $ a a a

  20. ★ オートマトン→構文解析表 • (2)E→TFOLLOW(E)={ + , $ } • I2={ E→T・ , T→T・*F } • I7={ T→T*・F , F→・a } *

  21. 構文解析表 FOLLOW(E)={+,$} FOLLOW(E)={+,$}

  22. スタックの様子 0 0a4→0F3→0T2→0E1 0E1+5 0E1+5a4→0E1+5F3→0E1+5T6 0E1+5T6*7 0E1+5T6*7a4→0E1+5T6*7F8      →0E1+5T6→0E1→受理 残り入力 a+a*a$ +a*a$ a*a$ *a$ a$ $ a+a*a$ 解析過程

  23. コード生成 • 還元時にコード生成 • 逆ポーランドになっている • E→aPUSHa番地 • E→E+EADD • <ASSGN>→<Left>"="<exp>⇒ASSGN •  ;       REMOVE

  24. 解析過程とコード a         +  a I0→I4⇒I3⇒I2⇒I1→I5→I4  ⇒ I3  ⇒ I2 → $ $a $F $T $E $E+ $E+a $E+F  $E+T push a push a *    a                        $ →I7  →  I4   ⇒  I8   ⇒  I6 ⇒ I1 → I9 $E+T* $E+T*a $E+T*F $E+T $E  受理 push a multi add 還元時にコード生成

  25. 文法のクラス SLR(1) LALR(1) LR(1)

  26. LR(0)項:FOLLOWを考えない 入力を読み込み,解析(移動,還元)が ・の位置まで進んでいることを表す + E→E・+T E→E+・T + を読み込むと  ・ が + の右に移動する (シフト,スタックに入れる) • 規則  E→E+T • 項=解析状況 E→E・+T

  27. 項集合の閉包 S→・E$ F→(・E) E→・E+T E→・T E→・E+T E→・T ( T→・T*F T→・F T→・T*F T→・F F→・m F→・(E) F→・m F→・(E) • 規則: • S→E$, • E→E+T,E→T • T→T*F,T→F, • F→m,F→(E)

  28. 構文解析表の作成:移動 E→T+・T 状態1 + E→T・+T T→T・*F 状態0 状態0で  入力の先頭が+ならば +をstackにいれ(sift) 状態1 に移動 * T→T*・T 状態2

  29. 構文解析表の作成:還元 規則3 E→T+T FOLLOW(E)={+,$} E→T+T・ 状態0で  入力の先頭が+または$ならば 規則3で還元   (スタック:規則3の右辺を取り除く          規則3の左辺を入れる) 状態0

  30. 構文解析表の作成:不都合1 規則3 E→m T→m 規則5 E→m・ T→m・ 状態1 状態1で  入力の先頭が+ならば 規則3で還元? 規則5で還元? 表が作れない⇒不都合 FOLLOW(E)={+,$} FOLLOW(T)={+,*}

  31. 構文解析表の作成:不都合2 規則4:E→m FOLLOW(E)={+,*} E→m・ T→T・*F 状態0 状態0で  入力の先頭が*ならば 状態2に移動? 規則4で還元? 表が作れない⇒不都合 * T→T*・T 状態2

  32. LR(1)項,FOLLOW? • S→E$,E→T+T,T→m S→・E,  $ E→・T+T,$ T→・m, + • S→E$,E→E+T S→・E,  $ E→・E+T,$ E→・E+T,+ S→・E, $ E→・E+T,$/+

  33. ★LR(0)オートマトンとFOLLOW • LR(0)オートマトン:FOLLOWを考えずに,移動のみに注目したオートマトン • *LR(0)で不都合な状態がないとき,文法はLR(0) • FOLLOW集合:非終端記号の直後に現れる可能性のある終端記号の集合 • LR(0)の不都合な状態をFOLLOWで解決⇒SLR(1)

  34. G1:S→E$,E→T+T,T→m S→・E$ E→・T+T T→・m S→E・$ S→E$・ E $ T 移動のみ E→T・+T 受理 m 移動のみ 移動のみ 移動のみ + T→m・ E→T+・T T→・m E→T+T・ m T 1還元のみ 1還元のみ LR(0)オートマトンで不都合な状態なし

  35. G2:S→E$,E→T+T,E→T,T→m S→・E$ E→・T+T E→・T T→・m S→E・$ S→E$・ $ E T 移動のみ E→T・+T E→T・ 受理 m 移動のみ 移動のみ 移動と還元=不都合な状態 + T→m・ E→T+・T T→・m m FOLLOW(E)={$}と Tの後ろ={+}の 共通集合は空 ⇒ OK 1還元のみ T E→T+T・ 1還元のみ FOLLOWで解決可能=SLR(1)

  36. G3:S→E$,E→T+T,E→m,T→m S→E$・ S→・E$ E→・T+T E→・m T→・m S→E・$ $ E T E→T+T・ E→T・+T m + E→T+・T T→・m T E→m・ T→m・ 2還元あり= 不都合な状態 m T→m・ FOLLOW(E)={$} FOLLOW(T)={+,$} FOLLOWの共通集合が空集合でない= 不都合な状態をFOLLOWで解決できない⇒SLR(1)でない

  37. ★LR(1)オートマトン • LR(1)オートマトン:各規則にFOLLOWを考えて,移動のみに注目したオートマトン • 不都合な状態なし=文法がLR(1) • LALR(1)オートマトン:LR(1)オートマトンでFOLLOWを無視したとき同じ項集合を合併する • 不都合な状態なし=文法がLALR(1)

  38. G3:S→E$,E→T+T,E→m,T→m S→E・,$ S→・E, $ E→・T+T,$ E→・m, $ T→・m, + E E→T+T・,$ T T E→T+・T,$ T→・m, $ E→T・+T,$ + m E→m・,$ T→m・,+ m T→m・,$ FOLLOWの共通集合が空 ⇒不都合でない LR(1)で不都合な状態なし⇒LR(1)である

  39. G3:S→E$,E→T+T,E→m,T→m S→・E, $ E→・T+T,$ E→・m, $ T→・m, + S→E・,$ E E→T+T・,$ T T E→T+・T,$ T→・m, $ E→T・+T,$ + m E→m・,$ T→m・,+ m T→m・,$ LR(1)オートマトンでFOLLOWを考えないで同じ項集合がない ⇒ LALR(1)である

  40. G4:S→E$,S→+X$,E→T+,X→E,X→T=,E→m,T→mG4:S→E$,S→+X$,E→T+,X→E,X→T=,E→m,T→m S→E・,$ S→+X・,$ X→T=・,$ S→・E, $ S→・+X,$ E→・T=,$ E→・m, $ T→・m, + E X S→+・X,$ X→・E, $ X→・T=,$ E→・m, $ T→・m, = + X→T・=,$ = E m T E→m・,$ T→m・,= m E→m・,$ T→m・,+ T X→E・,$ E→T・+,$ + E→T+・,$ 合併すれば E→m・, $ T→m・, +/= FOLLOW抜きで同じ項集合を合併しても不都合にならない⇒ LALR(1) である,もちろんLR(1)である

  41. G5:S→E$,S→+X$,E→T=,X→E=,X→T,E→m,T→mG5:S→E$,S→+X$,E→T=,X→E=,X→T,E→m,T→m S→E・,$ S→+X・,$ X→E=・,$ S→・E, $ S→・+X,$ E→・T=,$ E→・m, $ T→・m, = E X S→+・X,$ X→・E=,$ X→・T, $ E→・m, = T→・m, $ + X→E・=,$ = E T m E→m・,= T→m・,$ m E→m・,$ T→m・,= T X→T・,$ E→T・=,$ = E→T=・,$ FOLLOW抜きで同じ項集合を合併すると不都合になる⇒ LALR(1) でない,LR(1)である

  42. G6:S→E$,E→E+a,E→T+T,E→m,T→m a + E→E+a・,$ S→E・, $ E→E・+a,$ E→E+・a,$ S→・E, $ E→・E+a, $ E→・T+T,$ E→・m, +/$ T→・m, + E T T→m・,$ E→T+・T,$ T→・m, $ m m E→T・+T,$ + E→m・,+/$ T→m・,+ T E→T+T・,$ FOLLOWの共通集合が空でない ⇒LR(1)でない LR(1)で不都合な状態あり⇒LR(1)でない

  43. 課題10.1 SLR(1)構文解析 • 文法規則が下記であるとき,LR(0)オートマトンを構成し,構文解析表し,(a+a)*(a+a)を受理する過程を示しなさい. (0)S→E$ (1)E→E+T (2)E→T (3)T→T*F (4)T→F (5)F→a (6)F→(E)

  44. 課題10.2 LR(1)構文解析 • LR(1)構文解析のうち, SLR(1),LALR(1),LR(1)   構文解析可能性について述べなさい. • 下記のクラスの文法の例を示しなさい.  理由もつけて. ●SLR(1)の文法 ●LALR(1)であるが,SLR(1)でない文法 ●LR(1)であるが,LALR(1)でない文法

  45. 小テスト 正しいのはどれ?

  46. 問1 シフト状態? 還元状態? ①T→・T+T    還元状態 ②T→T・+T    シフト状態 ③E→E+・T    還元状態 ④E→T・      シフト状態 ⑤T→E+T・    シフト状態 ⑥正解なし

  47. 問2 LR(1)S→E$,E→T+T,E→m,T→m ①S→E・,+ S→・E, $ E→・T+T,$ E→・m, $ T→・m, + E T ②E→T+・T,$ m ③E→m・, $ T→m・, $ m T ⑤E→m・,$ T→m・,+ ④E→T+T・,$ ⑥正解なし

  48. 問3 オートマトン→構文解析表 ルール(1)E→E+TFOLLOW(E)={ + , $ } I6={E→E+T・ , T→T・*F } I7={ T→T*・F , F→・a } * ⑥正解なし

  49. 問4 SLR(1) ? ①LR(0)+FOLLOW ②LR(1)+FOLLOW ③SLR(0)+FOLLOW ④LR(0) ⑤LR(1) ⑥正解なし

  50. 問5 LALR(1) ? ①LR(0)+FOLLOW ②LR(1)+FOLLOW ③LR(1)-同じ項集合は纏める ④LR(0)-同じ項集合は纏める ⑤LR(1)だけ ⑥正解なし

More Related