1 / 68

第二章 程式語言的語法

第二章 程式語言的語法. 陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司. 基本定義 文法四要素 文法的分類 正規文法分類 B.N.F. 文法 剖析樹. 模擬兩可的文法 懸置 else 問題 描述程式語言語法的方式 語意的描述 精選習題. 大綱. 基本定義. 字元集 一組有限符號的集合稱之為字元 集 字元集有二類 ASCII Code Set EBCDIC Code Set. 基本定義. ASCII Code Set

Download Presentation

第二章 程式語言的語法

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. 第二章 程式語言的語法 陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司

  2. 基本定義 文法四要素 文法的分類 正規文法分類 B.N.F.文法 剖析樹 模擬兩可的文法 懸置else問題 描述程式語言語法的方式 語意的描述 精選習題 大綱

  3. 基本定義 • 字元集 • 一組有限符號的集合稱之為字元 集 • 字元集有二類 • ASCII Code Set • EBCDIC Code Set

  4. 基本定義 • ASCII Code Set • American Standard Code for Information Interchange 的縮寫 • 標準的 ASCII Code 有7個位元 • 可表示 27 = 128 種不同的字元 • 一般使用在 IBM PC 及Apple II上 • 現今使用的 ASCII Code 已經擴充為8個位 元,稱之為 ASCII-8

  5. 基本定義 • EBCDIC Code Set • Extended Binary Code Decimal Interchange Code 的縮寫 • 標準的EBCDIC Code有8個位元 • 可表示 28=256 種不同的字元 • 一般使用在IBM 360及FACOM機器上

  6. 基本定義 • 字串(String) • 定義 • S=t1t2...tn, ti  T 其中 T 為字元集 • S 是由 T 中的字元所組成的一串列 • n=4 則 S 可能為 abcd,ABCD,AEFG 等等 • 字串的長度 • 設 S=t1t2...tn則 S 的長度可表為│S│=n • S 的長度為 n

  7. 基本定義 • 字串的連接 • 設 p 與 q 為二字串且 p=m1m2…mu ,q=n1n2…nv • p‧q=m1m2...mun1n2...nv • 表示二字串的連接且│p‧q│=u+v • p‧q 字串的長度為 u+v

  8. 基本定義 • 空字串 • 通常以 “ε”表示空字串,且│ε│=0, • 有時空字串也可以 “”表示

  9. 基本定義 • T* • 由 T 中的字元所組成任意長度 的字串的集合 • 實例 • 假設 T={p,q} 則T*={ε,p,q,pp,qq,pq,qp,pppp...}

  10. 基本定義 • 語言 (Language) • 若 L 為一語言,則 L 是T* 的一組子集合(subset) • T是字元集合 • 實例 • 假設 T={p,q} 則 L 可為 {p,pq,qp,...}或 {ppp,qqq,pqp,qpq,...} 等等 • 只要是T* 的子集合即可

  11. 基本定義 • 語言的乘積(product) • L1 與 L2 的乘積 • L1‧L2={a‧b│a  L1,b  L2} • 範例 • L1={p,q}L2={m,n,mn,nm} • L1‧L2={pm,pn,pmn,pnm,qm,qn, qmn,qnm}

  12. 基本定義 • 語言 L 的次方 (Power) 定義 • Lo={ε}Ln=L‧Ln-1 • 範例 • 假設 L={p,pq,q} • L0={ε} ,L1=L,L2=L‧L,….

  13. 基本定義 • L*的定義 • L*又稱“Kleene Closure of L” • L 做任意次乘積(product) 的集合 • L*=L0L1L2...Ln...

  14. 基本定義 • L+的定義 • 又稱為“Transitive Closure of L” • L+=L1L2L3...Ln...

  15. 文法四要素 • T • 終端符號 • 表示不能再以其他符號來替代 • N • 非終端符號 • 表示可以再以其他符號來替代 • 而N與T須具以下的關係:N∩T=Ø

  16. 文法四要素 • S • starting symbol • 起始符號 • 從事文法推演之步驟由S開始 • P • production rule • 文法產生規則

  17. 文法的分類 • Type 0 • 無任何限制 • Type 1 • Context sensitive grammar • Type 2 • Context free grammar • Type 3 • 正規文法 (regular grammar)

  18. 正規文法分類 • 右線性正規文法 • right linear regular grammar • 文法產生規需滿足 • AuB or A  u,其中A,BN,u  T • 左線性正規文法 • left linear regular grammar • 文法產生規則需滿足 • uAB or A  u,其中A,BN,u  T

  19. B.N.F.文法 • B.N.F. grammar • Backus Naur Form grammar • type 2 grammar • context-free grammar

  20. B.N.F.文法符號 • “::=” • 表示“定義為” • “{}” • 表示出現0次,1次,... • “〔〕” • 表示出現0次或1次 • “∣” • 表示“OR” • ”< >” • 表示非終端符號

  21. 範例練習 • <expr>::=<expr>+<expr> • <expr>::=<expr>-<expr> • <expr>::=<expr>*<expr> • <expr>::=<expr>/<expr> • <expr>::=(<expr>) • <expr>::=id • 請推出 a+b*c-(d+e)/f

  22. 剖析樹 (parse tree) • 定義 • 根據語言的 B.N.F. 描述,將運算式轉換成相對應的樹狀結構,則稱此樹狀結構為剖析樹

  23. 練習 • <assign>-><id>:=<expr> • <id>->A|B|C • <expr>-><id>+<expr> • <expr>-><id>*<expr> • <expr>->(<expr>) • <expr>-><id> • 請推導 A:=B*(A+C)

  24. 範例 • Using the following B.N.F. grammar to construct a parse tree for the statement below A:=B DIV 10 + C×D • <assign>::=id:=<exp> • <exp>::=<term>∣<exp>+<term>∣<exp>-<term> • <term>::=<factor>∣<term>×<factor>∣<term> DIV <factor> • <factor>::=id∣int∣(<exp>)

  25. 推導過程 • <assign> ::= id := <exp> := <exp> + <term> := <term> + <term> := <term> DIV <factor> + <term> := <factor> DIV <factor> + <term> := id DIV <factor> + <term> := id DIV int + <term> :=id DIV int + <term> * <factor> :=id DIV int + <factor> * <factor> := id DIV int + id * <factor> := id DIV int + id * id

  26. 剖析樹

  27. 範例練習 • S::=AxSy|uB • A::=v| ε • B::=zS| ε • 建構 AxuzSy 並畫出剖析樹

  28. 練習 • <assign>-><id>=<expr> • <id>->A|B|C • <expr>-><expr>+<term>|<term> • <term>-><term>*<factor>|<factor> • <factor>->(<expr>)|<id> • A=A*(B+C*B)

  29. 練習 • <S>-><A>a<B>b • <A>-><A>b|b • <B>->a<B>|a • 1 baab5 bbaabb • 2 bbbab 6 bbaaaa • 3 bbaaaaa • 4 bbaab

  30. 模擬兩可的文法 • ambiguous grammar-(背起來) • 根據語言的 B.N.F. 描述,對同一句子(sentence)可繪出二個或二個以上不同的剖析樹,則稱此語言的文法是模擬兩可的

  31. Draw 2 different parse tree for id+id+id, using the grammar E→E+E∣id 模擬兩可的文法 對id+id+id可畫出二個不同的剖析樹如下 故此文法是模擬兩可的

  32. 模擬兩可的文法 • Is the following grammar ambiguous? Describe your response carefully? S→aSbS∣bSaS∣ε 如 abab 1. S 2. S a S b S a S b S b S a S ε a S b S ε ε ε ε

  33. 練習 • <assign>-><id>:=<expr> • <id>->A|B|C • <expr>-><expr>+<expr> • <expr>-><expr>*<expr> • <expr>->(<expr>) • <expr>-><id> • 推導A:=B+C*A 兩棵剖析樹

  34. 解決模擬兩可的問題方法 • 運算子優先順序 讓*優先於+ • 運算子結合性 • 左結合性:由左向右運算 • 右結合性:由右向左運算

  35. 範例 • <assign>-><id>:=<expr> • <id>->A|B|C • <expr>-><expr>+<term>|<term> • <term>-><term>*<factor>|<factor> • <factor>->(<expr>)|<id>

  36. 先定義的優先順序愈低 • <expr>-><expr>+<term>中的<expr>在左手邊,是左結合性 • 從上頁規則推導 • A:=B+C*A • A:=B+C+A

  37. 練習 • 請證明下列文法是模擬兩可的 • <S>-><A> • <A>-><A>+<A>|<id> • <id>->a|b|c

  38. 懸置else問題 • dangling else (懸置else)的意義 若有一敘述如下: if條件A then if條件B then E1 else E2 則else將無法確定要與第一個或第二個 if結合這種現象,就是所謂的 dangling else問題

  39. 例如 • <if_stmt>->IF<expr>then<stmt> |If<expr>then<stmt>else<stmt> • <stmt>-><if_stmt>|S1|S2 • <expr>->X=0|Y=0 • 推IFX=0 THEN IF Y=0 THEN S1 ELSE S2 • 產生兩棵剖析樹

  40. 懸置else問題 • 各種語言解決 dangling else的方法 • PASCAL • 利用begin-end作為分界,來解決懸置else問題 • If …then begin if ….then ….else ….end • ALGOL 60 • 利用begin-end作為分界,來解決懸置else問題 • ALGOL 68 • 利用if...fi作為分界,來解決懸置else的問題 • If …then if … then ...else …fifi • 近代高階程式語言 • 多利用”最接近未結合原則”來解決此問題 • If …if… <執行>; else <執行> • If… {if …<執行>;}else <執行>;

  41. 描述程式語言語法的方式 • B.N.F.法 • 請參考sec. 2-4之敘述 • 語法圖(Syntax Diagram) • 推移圖(Transition Diagram)

  42. 語法圖 • :表示非終端符號 • :表示終端符號 • P::=Q1│Q2│‧‧‧│Qn

  43. 語法圖 • P::=Q1 Q2‧‧‧Qn • P::={Q} 代表0 or 1 or 2 ……

  44. 推移圖 • 1+0+對應的推移圖 1+代表至少一次1到無窮次1 其中S0為起始狀態,而S2為終止狀態

  45. 推移圖 • 10*1+對應的推移圖 0*代表可能0次到無窮次 其中S0為起始狀態,而S2為終止狀態

  46. 推移圖 • 10*110*1 對應的推移圖 其中S0為起始狀態,而S4為終止狀態

  47. 範例練習 • 1+0*110*1+對應的推移圖 • 1+0*1*1+0*1+對應的推移圖 • 1+0*1*1+0*1+ 0*1*對應的推移圖

  48. 語意的描述 • 靜態語意(static semantics) • 動態語意(dynamic semantics) • 解釋型語意(interpretive semantics) • 公理型語意(axiomatic semantics) • 符號型語意(denotational semantics)

  49. 靜態語意 • 意義 • 由於有許多語言規則沒有辦法單純的用BNF文法來做一個描述,因此必需要用其他的規則來加以處理 • 作法 • 在程式執行之前或語言處理器翻譯時處理 • 範例 • 變數必須先宣告再引用 • 屬性文法(attribute grammar) • 屬性文法是一種可以描述靜態語意之方法,加入 • 1屬性: 附屬於文法符號,與變數類似,可以指定值給他們 • 2語意函數:附屬於語法規則,描述屬性值如何計算之函數 • 3述詞函數:附屬於語法規則,用於語法和語意之檢查

  50. 動態語意 • 解釋型語意(interpretive semantics) • 公理型語意(axiomatic semantics) • 符號型語意(denotational semantics)

More Related