編譯原理----第二章 文法和語言


字母表:符號的非空有限集。  例如∑={0,1,2}

 

符號:字母表中的元素。  例如:1

 

符號串:由字母表中的符號組成的任何有窮序列。  例如:01,012012,......

 

空符號串:ε

 

問:符號就是字符對嗎?

答:不對。符號還可以是字符串,如C語言字母表中的符號{if,else,for......}

 

符號串的前后綴:從符號串S的尾部(頭部)刪去若干個(包括0個)符號之后所剩下的部分稱為S的前(后)綴。

例如:011的前綴:ε,0,01,011

   011的后綴:011,11,1,ε

 

符號串集合:若集合A中的一切元素都是某字母表上的符號串,則稱A為該字母表上的符號串集合。  例如:∑={a,b,c}   A={aa,ab,ac}

 

符號串的連接運算:符號串X和Y的連接是把Y的符號寫在X的符號之后得到的符號串XY。

例如:X=01,Y=10,則XY=0110。

對於任意符號串S有:εS=Sε=S

 

符號串的冪運算:符號串自身連接n次得到的符號串Sn=SS...SS。

例如:S=01, 則S0=ε,S1=01,S2=0101,......

 

符號串集合的乘積:設A,B為符號串集合,則A和B的乘機定義為:AB={xy|x∈A,y∈B}

例如:A={a,b},B={c,d}  ,則AB={ac,ad,bc,bd}

 

符號串集合的冪運算:例如A={0,1} 則A0={ε},A1={0,1},A2={00,01,10,11}

 

符號串集合的閉包運算:

A+=A1∪A2∪A3∪A4∪........       稱為A的正閉包

A*=A0∪A+          稱為A的閉包

 例如:A={x,y} ,則A+={x,y,xx,xy,yx,yy,......} ,A*={ε,x,y,xx,xy,yx,yy,......} 

 

語言:是由句子組成的集合,是有一組符號所構成的集合

 

文法:是對語言結構的定義和描述(或稱“語法”)

 

文法的形式定義:G[S]=(VN,VT,P,S)

          VN:非終結符號集

          VT:終結符號集

          P:規則的集合

          S:開始符號

 

直接推導:用產生式的右部替換產生式的左部

直接規約:用產生式的左部替換產生式的右部

 

文法和語言的分類:0型,1型,2型,3型

0型文法:產生式左邊始終包含至少一個非終結符號。(對0型文法做出某些限制可以的得到1,2,3型文法)。

1型文法:(上下文有關),aAb-->aBb只有在這樣的a,b上下文中才能把A改寫為B。

2型文法:(上下文無關),產生式左邊一個非終結符號,右邊為符號串(可以為空)。

3型文法:(正則文法),產生式左邊一個非終結符號,右邊只能為一個終結符號或者一個終結符號加一個非終結符號。A->Ba左線型,A->aB右線型。

 

 

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

 

句型分析:是指識別輸入的符號是否為某一文法的句型(或句子)的過程。

 

最左(右)推導:指對於一個推導序列中的每一直接推導,被替換的總是當前符號串中的最左(右)非終結符號。最右推導也 稱為規范推導。

 


免責聲明!

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



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