1 / 58

言語処理系(6)

言語処理系(6). 金子敬一. 練習問題 4.1. リスト構造は以下のように定義される. Λ は,空リスト a は,リスト構造 l 1 , l 2 , ..., l k ( k >0) がリスト構造ならば ( l 1 , l 2 , ... , l k ) もリスト構造 a) リスト構造に対する文脈自由文法を作れ b) ((( a , a ), Λ , ( a )), a ) に対する解析木を書け. 練習問題 4.1. リスト構造は以下のように定義される. Λ は,空リスト a は,リスト構造

Télécharger la présentation

言語処理系(6)

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. 言語処理系(6) 金子敬一

  2. 練習問題 4.1 リスト構造は以下のように定義される. • Λは,空リスト • aは,リスト構造 • l1, l2, ..., lk (k>0)がリスト構造ならば (l1, l2, ..., lk)もリスト構造 a) リスト構造に対する文脈自由文法を作れ b) (((a, a), Λ, (a)), a)に対する解析木を書け

  3. 練習問題 4.1 リスト構造は以下のように定義される. • Λは,空リスト • aは,リスト構造 • l1, l2, ..., lk (k>0)がリスト構造ならば (l1, l2, ..., lk)もリスト構造 a) リスト構造に対する文脈自由文法を作れ L = Λ | a | ( L’ ) L’=L | L, L’

  4. 練習問題 4.1 b)(((a, a), Λ, (a)), a)に対する解析木を書け L , ( L’ ) L’ L Λ L , L’ L ( L’ ) L , L’ ( a L’ L ) ( L’ ) L a L L , L’ a a L , ( L’ ) L’

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

  6. 5.1 構文解析系 • 構文解析系 文脈自由文法G,文字列wに対して wがGの文ならば解析木を返す さもなくば,誤りメッセージを生成する

  7. 5.1 構文解析系 • 上昇型構文解析 解析木を葉から根に向かって構成 例.移動還元構文解析 • 入力記号を移動しつつ,スタックへ積む • スタックの上位が生成規則の右辺に対応すると,左辺に置換(還元操作)

  8. 5.1 構文解析系 • 下降型構文解析 解析木を根から葉に向かって構成 例.再帰下降型構文解析 • 予測的構文解析系 • LL構文解析系

  9. 5.1 構文解析系 • 解析木の表現 • 直接表現:リスト構造による表現など • 間接表現:導出に用いる生成規則列など

  10. 左文形式 S ⇒*α lm 5.1 構文解析系 • 左文形式と右文形式 • 最左導出: wAγ⇒wδγ lm

  11. 5.1 構文解析系 • 解析木と導出 文wに対する解析木において,最左の非終端記号に対応するノードの子コードのラベルによる置換を繰り返す.

  12. 5.1 構文解析系 • 解析木と導出 (1) S→ if C then S (2) S→ if C then S else S (3) S→ a (4) C→ b

  13. 5.1 構文解析系 • 解析木と導出 S S C then if C S S then else b if b a a

  14. 5.1 構文解析系 • 解析木と導出 S S C then if S ⇒ if C then S

  15. 5.1 構文解析系 • 解析木と導出 S S C then if b if C then S⇒ if b then S

  16. 5.1 構文解析系 • 解析木と導出 S S C then if C S S then else b if if b then S⇒ if b then if C then S else S

  17. 5.1 構文解析系 • 解析木と導出 S S C then if C S S then else b if b if b then if C then S else S⇒ if b then if b then S else S

  18. 5.1 構文解析系 • 解析木と導出 S S C then if C S S then else b if b a if b then if b then S else S⇒ if b then if b then a else S

  19. 5.1 構文解析系 • 解析木と導出 S S C then if C S S then else b if b a a if b then if b then a else S⇒ if b then if b then a else a

  20. 5.2 移動還元構文解析 • 移動と還元 S→ a A c B e A →A b | b B → d a b b c d e 文法 文字列

  21. 5.2 移動還元構文解析 • 移動と還元 S→ a A c B e A →A b | b B → d a b b c d e 文法 文字列

  22. 5.2 移動還元構文解析 • 移動と還元 S→ a A c B e A →A b | b B → d a b b c d e 文法 A 文字列

  23. 5.2 移動還元構文解析 • 移動と還元 S→ a A c B e A →A b | b B → d a b b c d e 文法 A 文字列

  24. 5.2 移動還元構文解析 • 移動と還元 S→ a A c B e A →A b | b B → d a b b c d e 文法 A 文字列

  25. 5.2 移動還元構文解析 • 移動と還元 S→ a A c B e A →A b | b B → d a b b c d e 文法 A B 文字列

  26. 5.2 移動還元構文解析 • 移動と還元 S→ a A c B e A →A b | b B → d a b b c d e 文法 S A B 文字列

  27. A → b A → A b B → d S → a A b B e 5.2 移動還元構文解析 最右導出 • 移動と還元 a b b c d e ⇒ a A b c d e ⇒a A c d e ⇒a A c B e ⇒S

  28. 5.2 移動還元構文解析 • 把手 a b b c d e ⇒ a A b c d e ⇒a A c d e ⇒a A c B e ⇒S 文法が曖昧でないならば,その 文法のすべての右文形式は, ちょうど1つの把手をもつ

  29. 5.2 移動還元構文解析 E⇒E + E ⇒E +E * E ⇒E +E * id ⇒E +id * id ⇒id +id * id E⇒E * E ⇒E *id ⇒E +E * id ⇒E +id * id ⇒id +id * id • 把手 (1) E→E + E (2) E→E * E (3) E→ ( E ) (4) E→ id

  30. 5.2 移動還元構文解析 • 把手の刈取り 把手を対応する左辺で置換する操作

  31. 5.2 移動還元構文解析 • 移動還元構文解析のスタックによる実現 スタック 入力バッファ 移動 移動 還元 還元 移動 E E

  32. 5.2 移動還元構文解析 • 移動還元構文解析のスタックによる実現 スタック 入力バッファ E 移動 還元 還元

  33. 5.2 移動還元構文解析 • 移動還元構文解析のスタックによる実現 スタック 入力バッファ 還元 受理

  34. 5.2 移動還元構文解析 • 解析木の構成 スタック 入力バッファ E E E id + id E

  35. 5.2 移動還元構文解析 • 解析木の構成 スタック 入力バッファ E E E E id * id + id

  36. 5.2 移動還元構文解析 • 解析木の構成 スタック 入力バッファ E E E E E id * id + id

  37. ちょっと休憩(雑談)

  38. 魚偏の漢字 • 鮪 まぐろ • 鰯 いわし • 鯵 あじ • 鰆 さわら • 鰍 かじか • 鰈 かれい • 鯨 くじら • 鯛 たい • 鱈 たら • 鮫 さめ • 鯖 さば • 鰊 にしん • 鰤 ぶり • 鯔 ぼら • 鰻 うなぎ • 鯰 なまず • 鯉 こい • 鮒 ふな

  39. 休憩おわり

  40. 5.3 演算子順位構文解析 • 演算子文法 隣接する非終端記号を持たない文法 効率的な移動還元構文解析系を生成

  41. 5.3 演算子順位構文解析 • 演算子文法の例 E→EAE | ( E ) | - E |id A→ + | - | * | / | ^ 演算子文法でない E→E +E | E -E | E *E | E /E | E ^E | ( E ) | - E |id

  42. 5.3 演算子順位構文解析 • 順位関係 終端記号間の3種類の関係:≅, ≲, ≳ 定め方には2通り • 演算子の結合性と優先度に基づく • 曖昧さのない文法から機械的に

  43. 把手 5.3 演算子順位構文解析 • 演算子順位関係の使用 右分形式の把手の左端を≲で,右端を≳で区切る E + E * E / E + E ≲ ≅ ≳

  44. 5.3 演算子順位構文解析 • 演算子順位関係の使用 0)非終端記号をすべて除去 1)左端から走査して最左の≳を見つける 2)次に左端へ走査して,≲を見つける  3)≲と≳で囲まれた部分に,間や両端に高々1個の非終端記号を付加して把手を得る

  45. 5.3 演算子順位構文解析 • 結合性と順位からの演算子順位関係 1)優先度q1>q2:q1 ≳ q2 ,q2 ≲ q1 2)優先度q1=q2かつ右結合:q2 ≲ q1 ,q1 ≲ q2 優先度q1=q2かつ左結合:q1 ≳ q2 ,q2 ≳ q1 3)q ≲ id, id ≳ q, q ≲ (, (≲ q, )≳ q, q ≳ ), $≳ q, q ≳ $とする.(≅ ), $≲ (, $≲ id, (≲ (, id≳ $, )≳ $, (≲ id, id≳ ), )≳ )とする

  46. 5.3 演算子順位構文解析 • 結合性と順位からの演算子順位関係 2 3 1 1 ^ 右結合的 * / 左結合的 + - 左結合的 1 2 2 1 3 3

  47. 5.3 演算子順位構文解析 • 単項演算子の扱い • 2項演算子にないもの:例えば¬に対しては,すべての演算子qに対して,q ≲ ¬とし, ¬の優先順位がqより高ければ,¬ ≳ qとし,低ければ¬ ≲ qとする. • 2項演算子にもある単項演算子は,字句解析系で2項のものと区別する必要

  48. 5.3 演算子順位構文解析 • 演算子順位文法 G: 生成規則の右辺がeでない演算子文法 1)aabbgなる右辺,bはeか1つの非終端記号:a ≅ b 2)非終端記号A, aaAbなる右辺,A⇒+gbd, gがeか1つの非終端記号:a ≲ b 3)非終端記号A, aAbbなる右辺, A⇒+gad, dがeか1つの非終端記号:a ≳ b

  49. 5.3 演算子順位構文解析 • 演算子順位文法 この規則で生成した順位関係が互いに素である演算子文法

  50. 5.3 演算子順位構文解析 • 演算子順位文法 E→E + E | E * E | ( E ) | id 2)非終端記号A, aaAbなる右辺,A⇒+gbd, gがeか1つの非終端記号:a ≲ b E + Eなる右辺,E⇒+E* E:+ ≲ * 3)非終端記号A, aAbbなる右辺, A⇒+gad, dがeか1つの非終端記号:a ≳ b E + Eなる右辺,E⇒+E* E:+ ≳ *

More Related