三、程序語言的語法描述


程序語言的語法描述

文法

描述語言的語法結構的形式規則

image-20210915103510993

(箭頭表示定義)

Screenshot_3


語法描述的幾個概念

字母表:一個有情字符集,記為∑

字母表中每個元素稱為字符

​ ∑上的(也叫字符串)是指由∑中的字符所構成的一個有窮序列

​ 不包含任何字符的序列稱為空字,記為ε

​ 用∑*表示∑上的所有字的全體,包含空字ε

​ 例如:設∑={a , b},則∑*={ε,a,b,aa,ab,ba,bb,aaa……}


​ ∑*的子集U和V的連接)定義為

UV={αβ|α∈U & β∈V}

​ 示例:設U={a,aa} V={b,bb}

​ UV={ab,abb,aab,aabb}

​ V自身的n次積為Vn=VV……V(n個)

​ V0={ε}

​ V*是V的閉包:V*=V0∪V1∪V2∪V3……

​ V+是V的正規閉包:V+=VV*



上下文無關文法

​ 上下文無關文法G是一個四元組G=(VT,VN,S,P),其中

​ ◆VT終結符(Terminal)集合(非空)

​ ◆V∶非終結符(Nonterminal)集合(非空),且V∩VN

​ ◆S∶文法的開始符號,S∈VN

​ ◆P∶產生式集合(有限),每個產生式形式為

​ P→α , P∈VN , α∈(VT∪VN)*

​ ◆開始符S至少必須在某個產生式的左部出現一次

image-20210915191543984

Screenshot_1



文法生成語言

推導

​ 定義∶稱αAβ直接推出αγβ,即 αAβαγβ 僅當A→γ是一個產生式,且α , β (V∪VN)*。

​ 如果α1⇨α2⇨...⇨αn,則我們稱這個序列是從α1到αn,的一個推導。若存在一個從α到αn的推導,則稱α1可以推導出αn

Screenshot_2

Screenshot_3


句型、句子和語言

​ 假定G是一個文法,S是它的開始符號。如果S⇨*α則稱*α是一個句型

​ 僅含終結符號的句型是一個句子

​ 文法G所產生的句子的全體是一個語言,記為L(G)。

L(G)={α|S⇨+α,α∈V*T}

image-20210915194728591

image-20210915194939607

image-20210915195436456

image-20210915195620155



推導與語法樹

最左推導和最右推導

​ 從一個句型到另一個句型的推導往往不唯一

​ E+E⇨i+E⇨i+i

​ E+E⇨E+i⇨i+i

最左推導∶任何一步α ⇨β都是對α中的最左非終結符進行替換

最右推導∶任何一步α ⇨β都是對α中的最右非終結符進行替換


語法樹

​ 用一張圖表示一個句型的推導,稱為語法樹

​ —棵語法樹是不同推導過程的共性抽象

image-20210915201055761

語法樹與二義性(ambiguity)

Screenshot_4

文法的二義性∶如果一個文法存在某個句子對應兩棵不同的語法樹,則說這個文法是二義

語言的二義性:一個語言是二義的,如果對它不存在無二義的文法

​ 對於語言L,可能存在G和G',使得L(G)=L(G')=L,有可能其中一個文法為二義的,另一個為無二義的

​ 自然語言的二義性:John saw Mary in a boat

​ John在船上看到Mary John看到Mary在船上

image-20210915202259349

​ 表達式→項│表達式+項

​ 項→因子│項*因子

​ 因子→(表達式)| i

image-20210915202447516

二義性問題是不可判定問題,即不存在一個算套杏熊傳有限步驟內,確切地判定一個文法

可以找到一組無二義文法的充分條件



形式語言鳥瞰

​ 喬姆斯基於1956年建立形式語言體系,他把文法分成四種類型∶0,1,2,3型

​ 與上下文無關文法一樣,它們都由四部分組成但對產生式的限制有所不同

​ G=(VT,VN,S,P)

​ ◆VT終結符(Terminal)集合(非空)

​ ◆V∶非終結符(Nonterminal)集合(非空),且V∩VN

​ ◆S∶文法的開始符號,S∈VN

​ ◆P∶產生式集合(有限)


0型(短語文法,圖靈機)

​ 產生式形如∶α→β

​ 其中 : α∈ (VT∪VN)*且至少含有一個非終結符;

​ β∈ (V∪VN)*

1型(上下文有關文法,線性界限自動機)

​ 產生式形如︰α→β

​ 其中:|α|≤|β|,僅S→ε例外

2型(上下文無關文法,非確定下推自動機)

​ 產生式形如:α→β

​ 其中:A∈ VN ; β∈(VT ∪VN)*

3型(正規文法,有限自動機)

產生式形如∶A→αB或A→α

其中: α∈VT* ; A,B∈VN

(右線性文法)

產生式形如∶A→Bα或A→α

其中:α∈VT* ; A,B∈VN~

(左線性文法)


四種類型文法描述能力比較

image-20210915211221528


上下文無關文法與上下文有關文法

L={anbn|n>1}不能由正規文法產生,但可由上下文無關文法產生

​ G(S):S>aSb] ab

L={anbncn|n>1}不能由上下文無關文法產生,但可由上下文有關文法產生

​ G(S):

​ S→ aSBC| aBC

​ CB → BC

​ aB → ab

​ bB → bb

​ bC → bc

​ cC →> cc

image-20210915212024078

​ 程序設計語言不是上下文無關語言,甚至不是上下文有關語言

​ L={ α⊂α|α∈{a,b}*}不能由上下無關文法產生,甚至連上下有關文法也不能產生,只能由0型文法產生

​ ◆標識符引用

​ ◆過程調用過程中,“形-實參數的對應性"(如個數,順序和類型二致性)

​ 對於現今程序設計語言,在編譯程序中,仍然采用上下文無關文法來描述其語言結構

image-20210915213107558


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM