Try   HackMD

【Compiler】 Ch2. Languages and Their Representations

Alphabets and Languages

  • 如何定義一個"語言"?這邊先定義語言的"字母集"。
  • 字母集(alphabet)是任何有限符號的集合,例如:
    • 英文alphabet {A, B, C, Z}
    • 希臘alphabet {α, β, γ, ω}
    • 二元alphabet {0, 1}
  • 而sentence就是從alphabet的符號中組合出的有限string(這邊的sentence不是句子是單字!)
    • 空的sentence習慣用 є 表示。
  • 如果
    V
    是一個alphabet,則
    • V
      為在
      V
      裡面的所有sentence。
    • V+=V{ϵ}
      (不包含空字串的意思)

  • 有了上述的定義,我們到底如何定義一個Language?
    • 我們必須用有限的東西去定義一個無限的語言
  • 兩種方法:
    • 給一個演算法,丟入sentence時可以回傳它在該語言內或不是。
    • 給予一個語法,能產生所有該語言內的sentence。

Grammars

  • 先給個語法範例:
  • Image Not Showing Possible Reasons
    • The image file may be corrupted
    • The server hosting the image is unavailable
    • The image path is incorrect
    • The image format is not supported
    Learn More →
  • 看不懂沒關係,下面帶你來了解Grammar

Formal Notation of a Grammar

  • Grammar有4個元素:
    • Nonterminals
      • 不在alphabet中的符號,衍生符號,如範例中的<sentence> <adjective>
    • Terminals
      • 與Nonterminals,最原始的符號,如範例中的The little boy
    • Productions
      • 符號(Terminals和Nonterminals)的轉換關係,如範例中的<sentence> -> <noun phrase><verb phrase>
    • Start Symbol
      • 開始符號,如果輸入的terminal最後可以透過Productions轉換為Start Symbol,表示該輸入屬於該語言。例如範例中的<sentence>(在Productions或parse tree的最上面)

  • 使用數學的方式來表達:
    • G=(VN,VT,P,S)
    • VN
      : nonterminals
    • VT
      : terminals (
      VNVT=ϕ,VNVT=V
      )
    • P
      : productions,
      αβP
    • S
      : start symbol
  • 習慣上nonterminals會用大寫字母表示,而
    VT
    是小寫。

Derivation

  • Derivation(推導)指將productions左側符號變為右側符號的動作。
    • 例如:
      αβP
      γ,δV
      ,則
      γαδγβδ
    • 其中我們可以說
      γαδ
      derives
      γβδ
  • 如果有一段連續的Derivation,可以用*表示:
    • 如果
      α1α2...αm
      則可寫為
      α1αm
  • L(G)={w|wVTSw}
    • 表示使用語法G的語言L
  • 如果兩個語法
    G1
    G2
    是相等的,則
    L(G1)=L(G2)

範例問題

G=(VN,VT,P,S)
VN={S},VT={0,1},P={S0S1,S01}

根據以上語法,請描述L(G)為何?

答案
L(G) =

{0n1n}

Types of Grammars

  • 在這邊將介紹四種不同等級的Grammar,先大致上有個印象就可以了。
    • 越下面的限制越高。
  • 給予語法
    G=(VN,VT,P,S)
    1. Type 0 grammar
      • 沒有任何限制。
    2. Type 1 grammar (context-sensitive grammar)
      • 必須符合
        αβP,|α||β|
      • 也就是說,Derivation不會讓句子變短。
    3. Type 2 grammar (context-free grammar)
      • 必須符合
        αβP,|α|=1,βϵ
      • 也就是說,production的左側只能有一個符號。
    4. Type 3 grammar (regular grammar)
      • 所有production都只能是
        1. AaB
        2. Aa
tags: compiler note