1 / 46

言語処理系(5)

言語処理系(5). 金子敬一. 4 プログラミング言語の構文の定義. 4.1 文脈自由文法 4.2 導出と解析木 4.3 文脈自由文法の能力. 4.1 文脈自由文法. 文脈自由文法 文脈自由文法 BNF 記法. プログラミング言語の 構文を指定. 4.1 文脈自由文法. 書換え規則(生成規則) 文 → if 式 then 文 else 文 式 → 式 + 式 文 → begin 文の並び end 文の並び → 文 | 文 ; 文の並び. 4.1 文脈自由文法. 書換え規則(生成規則) 終端記号:言語の文字列の基本記号.字句と同義

shaman
Download Presentation

言語処理系(5)

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

  2. 4 プログラミング言語の構文の定義 4.1 文脈自由文法 4.2 導出と解析木 4.3 文脈自由文法の能力

  3. 4.1 文脈自由文法 • 文脈自由文法 • 文脈自由文法 • BNF記法 プログラミング言語の 構文を指定

  4. 4.1 文脈自由文法 • 書換え規則(生成規則) 文→ if 式then 文 else 文 式→式+ 式 文→ begin 文の並びend 文の並び→文| 文; 文の並び

  5. 4.1 文脈自由文法 • 書換え規則(生成規則) • 終端記号:言語の文字列の基本記号.字句と同義 • 非終端記号:文,式,文の並び,などの構文上の分類 • 出発記号:非終端記号の1つ.対象としている言語を表す. • 生成規則:構文上の分類を他の分類や終端記号から生成する規則

  6. 4.1 文脈自由文法 • 書換え規則(生成規則) 文→ begin 文の並びend 文の並び→文| 文; 文の並び 文→ begin 文の並びend 文の並び→文 文の並び→文; 文の並び

  7. 4.1 文脈自由文法 • 生成規則例 非終端記号 式→式演算子式 式→ ( 式) 式→ - 式 式→ id 演算子→ + 演算子→ - 演算子→ * 演算子→ / 演算子→ ^

  8. 4.1 文脈自由文法 • 表記上の約束 • 次の記号は非終端記号 • 式,文,演算子のようなゴシック体の日本語による名前 • アルファベットの最初の方のイタリック体の大文字 • 文字S.これは出発記号

  9. 4.1 文脈自由文法 • 表記上の約束 • 次の記号は終端記号 • 1字の小文字a, b, c • +, -のような演算子記号 • 括弧やコンマのような区切り記号 • 数字0, 1, ..., 9

  10. 4.1 文脈自由文法 • 表記上の約束 • アルファベットの終わりの方の大文字は文法記号(非終端記号または終端記号).主にX, Y, Z • アルファベットの終わりの方の小文字は終端記号列.主にu, v, ..., z

  11. 4.1 文脈自由文法 • 表記上の約束 • Aを左辺に持つ生成規則全体をA生成規則.A → a1, A → a2, ..., A → akがA生成規則ならば,A→a1 | a2 | ... | akと書いても良い.a1, a2, ..., akを代替と呼ぶ.

  12. 4.1 文脈自由文法 • 表記上の約束 • 小文字のギリシャ文字,例えばa, b, g, は文法記号列を表す • 最初の生成規則の左辺を出発記号

  13. 4.1 文脈自由文法 • 生成規則例 式→式演算子式 式→ ( 式) 式→ - 式 式→ id 演算子→ + 演算子→ - 演算子→ * 演算子→ / 演算子→ ^ E→EAE |( E ) | - E | id A→ + | - | * | / | ^

  14. 4.2 導出と解析木 • 導出 A → g : 生成規則 a, b : 文法記号 a A b ⇒ a g b : 導出

  15. 4.2 導出と解析木 • 導出 a1 ⇒ a2 ⇒ ... ⇒ an a1はanを導出する. a1からanへの導出

  16. 4.2 導出と解析木 • 導出 ⇒*: 0回以上の導出 ⇒+: 1回以上の導出

  17. 4.2 導出と解析木 • 文と文形式 文脈自由文法G 出発記号S w : 終端記号のみからなる文字列 S ⇒+w ⇔w ∈ L(G) L(G) : Gが 生成する言語 Gの文

  18. 4.2 導出と解析木 • 文と文形式 w : 終端記号のみからなる文字列 S ⇒+w ⇔w ∈ L(G) S ⇒+a, a : 非終端記号を含みうる Gの文 Gの文形式

  19. 文形式 4.2 導出と解析木 • 文と文形式 E→E + E | E * E | ( E ) | - E | id E⇒ -E ⇒ -( E ) ⇒ - ( E + E ) ⇒ - ( id + E ) ⇒ - ( id + id ) 文

  20. 4.2 導出と解析木 • 文と文形式 E⇒ -E ⇒ -( E ) ⇒ - ( E + E ) ⇒ - ( id + E ) ⇒ - ( id + id ) 最左導出:導出の過程で最も左の非終端記号を置換 cf.最右導出

  21. 4.2 導出と解析木 • 解析木 • 置換え順序によらない図表現 E E⇒ -E ⇒ -( E ) ⇒ - ( E + E ) ⇒ - ( id + E ) ⇒ - ( id + id ) E - E ( ) E E + id id

  22. 4.2 導出と解析木 • 解析木 a1 ⇒ a2 ⇒ ... ⇒ anから解析木を生成 • a1の節点のみからなる木 • ai=X1X2...Xkなる解析木に対して,aiをai-1のXjをb=Y1Y2...Yrで置換して得るとき,ai-1を表す解析木のXjに対応する葉に,左からY1, Y2, ..., Yrと名前を付けた子を与える

  23. 4.2 導出と解析木 • 解析木 • Eの節点のみからなる木 E

  24. E - E ( ) 4.2 導出と解析木 • 解析木 • E⇒ -E⇒ -( E ) E E E -

  25. E - E E ( ( ) ) E E + 4.2 導出と解析木 • 解析木 • -( E ) ⇒ -( E + E ) E E -

  26. E - E ( ) E E E E + + 4.2 導出と解析木 • 解析木 • -( E + E ) ⇒ -( id + E ) E id

  27. E - E ( ) E E + id 4.2 導出と解析木 • 解析木 • -( id + E ) ⇒ -( id + id ) E id id id

  28. 4.2 導出と解析木 • 解析木 E ⇒ E +E ⇒ id+ E ⇒ id + E * E ⇒ id + id * E ⇒ id + id * id E ⇒ E * E ⇒ E + E * E ⇒ id + E * E ⇒ id + id * E ⇒ id + id * id

  29. 4.2 導出と解析木 • 解析木 E ⇒ E +E ⇒ id+ E ⇒ id + E * E ⇒ id + id * E ⇒ id + id * id E + E E id E E * id id

  30. 4.2 導出と解析木 • 解析木 E ⇒ E * E ⇒ E + E * E ⇒ id + E * E ⇒ id + id * E ⇒ id + id * id E * E E id E E + id id

  31. 4.2 導出と解析木 • 曖昧性 複数の解析木を生成する文法は曖昧 曖昧除去規則(結合性,優先順序)

  32. 4.2 導出と解析木 左結合 • 曖昧性 E→E + E | E - E | E * E | E / E | E ^ E | ( E ) | - E | id に対して曖昧性を除去するには, 右結合 優先順位:- > ^ >{* /}>{+ -}

  33. 4.2 導出と解析木 • 曖昧性 - 1次子 ^因子 * /項 + -式 式 → 式+項 | 式–項 | 項 項 → 項*因子 | 項/因子 |      因子 因子 → 1次子^因子 | 1次子 1次子 → -1次子|要素 要素 → (式 ) | id

  34. 4.2 導出と解析木 • 導出例: x + y * z 式 ⇒ 式+項 ⇒項+項 ⇒因子+項 ⇒1次子+項 ⇒要素+項 ⇒id+項 ⇒id+項*因子 ⇒id+因子*因子 ⇒…⇒id+id*因子⇒…⇒id+id*id 式 → 式+項 | 式–項 | 項 項 → 項*因子 | 項/因子 |      因子 因子 → 1次子^因子 | 1次子 1次子 → -1次子|要素 要素 → (式 ) | id

  35. 4.2 導出と解析木 • 導出例: x + y * z 式 式 ⇒ 式+項 ⇒項+項 ⇒因子+項 ⇒1次子+項 ⇒要素+項 ⇒id+項 ⇒id+項*因子 ⇒id+因子*因子 ⇒…⇒id+id*因子⇒…⇒id+id*id 項 式 + 項 因 項 * 因 1 因 1 要 1 要 要 id id id

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

  37. 言葉の語源 • おくび      ゲップのこと • 江戸患い    脚気のこと • 土左衛門    力士の名前から • へちま     (い)とうり→へちまうり • ろくでもない  ろく=陸=平坦

  38. 休憩おわり

  39. 4.3 文脈自由文法の能力 • 正規表現と文脈自由文法 正規表現で表現可能 ⇒ 文脈自由文法で表現可能 正規表現の方が,理解しやすく,効率のよい処理系を生成しやすい

  40. 4.3 文脈自由文法の能力 • 文脈自由文法の例 S→( S ) S | ε Sから導出される全ての文は,括弧の釣合がとれている 釣合のとれた括弧のみからなる文字列はすべて,Sから生成可能

  41. 4.3 文脈自由文法の能力 • 文脈自由文法の例 S→( S ) S | ε Sから導出される全ての文は,括弧の釣合がとれている S⇒ε S⇒ ( S ) S⇒* ( x ) S ⇒* ( x ) y

  42. 4.3 文脈自由文法の能力 • 文脈自由文法の例 S→( S ) S | ε 釣合のとれた括弧のみからなる文字列はすべて,Sから生成可能 長さ0の空列εはSから導出可能 長さ2nの釣合う括弧の列w=( x ) y S ⇒ (S)S ⇒*(x)S ⇒*(x)y

  43. 4.3 文脈自由文法の能力 • 文脈自由でない言語 L1 = {wcw | wは(a|b)*に属する} ただし,a, b, c: 終端記号 w: 終端記号列 L1’ = {wcwR| wは(a|b)*に属する} S → a S a|b S b|c

  44. 4.3 文脈自由文法の能力 • 文脈自由でない言語 L2 = {anbmcndm | n>0かつm>0} ただし,a, b, c, d: 終端記号 L2’ = {anbmcmdn | n>0かつm>0} S → a S d|b A c A → b A c|bc

  45. 4.3 文脈自由文法の能力 • 文脈自由でない言語 L2 = {anbmcndm | n>0かつm>0} ただし,a, b, c, d: 終端記号 L2” = {anbncmdm | n>0かつm>0} S → A B A → a A b|a b B → c B d|c d

  46. 4.3 文脈自由文法の能力 • 文脈自由でない言語 L3 = {anbncn | n>0} ただし,a, b, c: 終端記号 L3’ = {anbn| n>0} S → a S b|a b

More Related