# 【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^*-\{\epsilon\}$(不包含空字串的意思) --- * 有了上述的定義,我們到底如何定義一個Language? * 我們必須用有限的東西去定義一個無限的語言 * 兩種方法: * 給一個演算法,丟入sentence時可以回傳它在該語言內或不是。 * 給予一個語法,能產生所有該語言內的sentence。 ## Grammars * 先給個語法範例: * ![](https://i.imgur.com/sM8Jhd4.png) * 看不懂沒關係,下面帶你來了解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 = (V_N, V_T, P, S)$ * $V_N$: nonterminals * $V_T$: terminals ($V_N \bigcap V_T = \phi, V_N \bigcup V_T = V$) * $P$: productions, $\alpha \rightarrow \beta \in P$ * $S$: start symbol * 習慣上nonterminals會用大寫字母表示,而$V_T$是小寫。 ### Derivation * Derivation(推導)指將productions左側符號變為右側符號的動作。 * 例如: $\alpha \rightarrow \beta \in P$ 且 $\gamma, \delta \in V$,則$\gamma \alpha \delta \Rightarrow \gamma \beta \delta$。 * 其中我們可以說$\gamma \alpha \delta$ derives $\gamma \beta \delta$。 * 如果有一段連續的Derivation,可以用*表示: * 如果$\alpha_1 \Rightarrow \alpha_2 \Rightarrow ... \Rightarrow \alpha_m$ 則可寫為 $\alpha_1 \overset{*}{\Rightarrow} \alpha_m$ * $L(G) = \{w|w \in V^*_T \wedge S \overset{*}{\Rightarrow} w \}$ * 表示使用語法G的語言L * 如果兩個語法$G_1$ $G_2$是相等的,則$L(G_1) = L(G_2)$ --- 範例問題 $G = (V_N, V_T, P, S)$ $V_N = \{S\}, V_T = \{0, 1\}, P = \{S \rightarrow 0S1, S \rightarrow 01\}$ 根據以上語法,請描述L(G)為何? 答案 L(G) = $\{0^n1^n\}$ ### Types of Grammars * 在這邊將介紹四種不同等級的Grammar,先大致上有個印象就可以了。 * 越下面的限制越高。 * 給予語法$G = (V_N, V_T, P, S)$ 1. Type 0 grammar * 沒有任何限制。 2. Type 1 grammar (context-sensitive grammar) * 必須符合$\alpha \rightarrow \beta \in P, |\alpha| \leq |\beta|$ * 也就是說,Derivation不會讓句子變短。 3. Type 2 grammar (context-free grammar) * 必須符合$\alpha \rightarrow \beta \in P, |\alpha| = 1, \beta \ne \epsilon$ * 也就是說,production的左側只能有一個符號。 4. Type 3 grammar (regular grammar) * 所有production都只能是 1. $A \rightarrow aB$ 2. $A \rightarrow a$ ###### tags: `compiler` `note`