SPIR-V 研究:編譯器基本原理(三) - Chomsky文法分類

SPIR-V 研究:編譯器基本原理(三) - Chomsky文法分類

標籤(空格分隔): SPIR-V Vulkan Grammar


上一篇說過語法分爲四類;這一篇來介紹Chomsky Hierarchy。首先,我們簡單看看type-0和type-1的語法。

Type-0 - Unrestricted grammar

這是一種沒有任何限制的語法,理論上可以描述任何圖林機可以接受的語言。它的一般形式如下圖:
此處輸入圖片的描述
這是一個從u生成v的過程;其中u,v是任意字符組合(包括最終字符和中間符號,或空字符),當然u至少包含一箇中間符號。數學表達式爲:(Σ ⋃ N)* N (Σ ⋃ N)* --> (Σ ⋃ N)*
雖然,type-0很強大,但是用它來檢驗語句是否符合語法規則,也就是寫一個一般性通用的Parser,是非常困難的事。這也就引出了後面幾種語法;其想法是通過加強限制條件,我們可以得到更簡單更容易使用的語法。

Type-1- Context-sensitive grammar (CSG)

這是一種上下文有關的語法規則;左側和右側被替換的字符前後都有可能有別的字符,也就是有上下文的;只有在這一組字符一起出現才能應用這個規則。並且,左側的字符數要小於等於右側。如下圖
此處輸入圖片的描述
其一般形式:此處輸入圖片的描述
其中α,β可以是空字符,也就是沒有;γ是任意字符。
這裏A被替換爲γ 有個前提條件,就是當且僅當A被α,β包裹;這也就是上下文相關。
CSG的生成過程可以用一張圖來表示,比如:
此處輸入圖片的描述
這種CSG的生成圖比較複雜,可能會含有某種環;而我們後面將要看到的CFG和正則語法圖就簡單的多了。

Kleene star
這裏有幾個描述符號我們會經常碰到:*,+,?,|;它們也廣泛用於正則表達式。
* Kleene star/克萊尼星號(或者克萊尼閉包)是一個針對集合或字符的單目運算符。一個集合的克萊尼閉包定義爲:L* = {ε} ∪ L ∪ LL ∪ LLL ∪ ..., 即L的0到正無窮次冪的並集。對於語言L*= {'a'},我們有:L*={ε, 'a', 'aa', 'aaa', ...}。
加號運算符+:L+ = LL* = L*L,對L = {'a'},我們有:L+={'a', 'aa', 'aaa', ...}。
? : 0個或一個元素。
| : 或運算。U : 集合的並集。

Type-2 Context Free Grammar

CFG是這樣一種語法規則,左邊(LHS)只有一箇中間字符,而右邊(RHS)是任意字符。
α --> (N U Σ)* ; α屬於N
這樣的規則替換的時候是和上下文無關的;只是簡單的把某個中間表示替換成一組字符,然後繼續。這樣的過程可以用一顆生成樹來表示,比如:
此處輸入圖片的描述

Type-3 Regular grammar

CFG的一個問題是右邊有可能有多於一個的中間表示;這樣當某個中間表示被替換時,我們必須記住旁邊還有另一箇中間表示也要被替換;也就是說CFG可能需要在生成樹上往上回溯。我們希望有個更簡單的規則,它可以一路向下不斷替換最終結束,而不用回溯。這就是Regular Grammar。
此處輸入圖片的描述
Regular Grammar: 限制右邊只能是一組最終字符或一組最終字符加一箇中間表示。

1. B → a - where B is a non-terminal in N and a is a terminal in Σ 
2. B → aC - where B and C are non-terminals in N and a is in Σ 
3. B → ε - where B is in N and ε denotes the empty string, i.e. the string of length 0.

這樣,生成樹變成了一個鏈條。
此處輸入圖片的描述

下表是四種類型語法描述彙總表格;其中:
T or ∑ = set of alphabet/Character/terminals = ( a, b,c,…., +,-,*, …. )
V = Set of non-terminals or variables =( A,B,C, …., )
(∑ U V) = combination of variables and terminals

CLASS GRAMMAR LANGUAGE AUTOMATION DEFINITION
Type 0 => Unrestricted or Phase Structural Grammar Recursive and Recursive Enumerable Turing Machine (∑ U V)* → (∑ U V)* At least one variable in LHS
Type 1 => Context Sensitive grammar (CSG) Context Sensitive language (CSL) Linear bounded Automaton (LBA) (∑ U V)* → (∑ U V)* Size of LHS ≤ RHS i.e. if x→y then│x│≤ │y│ and αAβ → αBβ where, α = left context, β = right context, A = a Variable, B = anything (∑UV)*
Type 2 => Context- free (CFG) Context- free language(CFL) Push Down Automaton( PDA) A → (∑ U V)*
Type 3 => Regular Grammer Regular language Finite Automation (FA) A → a , A → aB or A → a , A → Ba)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章