U2 文法和语言

文章目录

  • 一、预备知识
    • 1、字母表和符号串
    • 2、符号串形式定义
    • 3、符号串相等
    • 4、延申
  • 二、文法
    • 1、 一些概念
    • 2、文法的定义
    • 3、推导的形式定义
    • 4、规范推导
    • 5、语言的形式定义
    • 6、递归文法
    • 7、BNF范式
    • 总结
  • 三、短语、简单短语和句柄
  • 四、语法树(推导树)
    • 1、概念
    • 2、语法树推导--句型的推导
    • 3、规约
  • 五、二义性
    • 1、二义性文法
    • 2、二义性的改进
    • 3、有害文法
  • 六、乔姆斯基文法体系
    • 1、概念
    • 2、分类

一、预备知识

1、字母表和符号串

字母表: 符号的非空有限集 例: ∑ \sum = a , b , c {a,b,c} abc
符号: 字母表中的元素 例: a , b , c a,b,c abc
符号串: 符号的有穷序列 例: a , a a , a c , a b c , . . a, aa, ac, abc,.. a,aa,ac,abc..
空符号串:无任何符号的符号串 ( ε ) (ε) (ε)

2、符号串形式定义

有字母表 ∑ \sum ,定义:
(1)ε是 ∑ \sum 上的符号串;
(2)若x是 ∑ \sum 上的符号串,且a ∈ \in ∑ \sum ,则 ax 或 xa 是 ∑ \sum 上的符号串;
(3)y是 ∑ \sum 上的符号串, i f f iff iff (当且仅当)y可由(1)和(2)产生。

3、符号串相等

  1. 符号串相等:若x、y是集合上的两个符号串,则x=y iff(当且仅当)组成x的每一个符号和组成y的每一个符号依次相等
  2. 符号串的长度:x为符号串,其长度 ∣ x ∣ |x| x等于组成该符号串的符号个数。
  3. 符号串的联接:若x、y是定义在Σ上的符号串, 且 x = X Y , y = Y X x=XY,y=YX xXYyYX,则x和y的联接 x y = X Y Y X xy=XYYX xyXYYX也是 Σ Σ Σ上的符号串。
  4. 符号串集合的乘积运算:令A、B为符号串集合,定义 A B = AB= AB{ x y ∣ x ∈ A , y ∈ B xy |x∈A, y∈B xyxA,yB}
    A = A= A{ s , t s, t s,t}, B = B = B= { u , v u,v u,v}, A B = AB= AB={ s u , s v , t u , t v su,sv,tu,tv susvtutv}
    注意因为 ε x = x ε = x εx=xε=x εxxεx,所以{ ε ε ε} A = A A=A A=A { ε ε ε} = A =A =A。但 ε A εA εA= A ε Aε Aε= ∅ ∅
  5. 符号串集合的幂运算: A 2 A^2 A2=AA , A n = A n − 1 A = A A n − 1 A^n=A^{n-1}A=AA^{n-1} An=An1A=AAn1
  6. 符号串集合的闭包运算:设A是符号串集合,定义
    A + = A 1 ∪ A 2 ∪ A 3 ∪ … … ∪ A n ∪ … A^+= A^1 ∪ A^2 ∪ A^3 ∪……∪ A^n ∪… AA1A2A3……An 称为集合A的正闭包。
    A ∗ = A 0 ∪ A + A*= A^0 ∪A^+ AA0A 称为集合A的闭包

4、延申

  1. 若A为某语言的基本字符集( 把字符看作符号)
    A = A= A{ a , b , … … z , 0 , 1 , … … , 9 , + , - , × , , / , ( , ) , = , … … a, b, ……z, 0, 1, ……, 9, +, -, ×, _, /, ( , ), =, …… a,b,……z,0,1,……,9,+,,×,,/,(,),=,……}
  2. B为单词集 (单词是符号串)
    B = B = B={ b e g i n , e n d , i f , t h e n , e l s e , f o r , … … , < 标识符 > , < 常量 > , … … begin, end, if, then, else, for, ……,<标识符>,<常量>, …… begin,end,if,then,else,for,……,<标识符>,<常量>,……}
  3. C是句子(语言的句子是定义在B上的符号串。)
    若令C为句子集合,则 C ⊂ B ∗ C \subset B* CB , 程序 ⊂ C \subset C C
  4. 词法:若把字符看作符号,则单词就是符号串,单词集合就是符号串的集合。
  5. 句法:若把单词看作符号,则句子就是符号串,而所有句子的集合(即语言)就是符号串的集合。

二、文法

1、 一些概念

  1. 文法:对语言结构的定义与描述。即从形式上用于描述和规定语言结构的称为“文法”(或称为“语法”)。
  2. 语法规则:我们通过建立一组规则,来描述句子的语法结构。规定用“ : : = ::= ::=”表示“由…组成”(或“定义为…”)。 eg. < 句子 > : : = < 主语 > < 谓语 > <句子>::=<主语><谓语> <句子>::=<主语><谓语>
  3. 由规则推导句子:有了一组规则之后,可以按照一定的方式用它们去推导或产生句子。
  4. 推导方法:从一个要识别的符号开始推导,即用相应规则的右部来替代规则的左部,每次仅用一条规则去进行推导。
    这种推导一直进行下去,直到所有带< >的符号都由终结符号替代为止
    有若干语法成分同时存在时,我们总是从最左的语法成分进行推导,这称之为最左推导,类似的有最右推导(还有一般推导)。

从一组语法规则可推出不同的句子,如以上规则还可推出“大象吃象”、“大花生吃象”、“大花生吃花生”等句子,它们 在语法上都正确,但在语义上都不正确。
所谓文法是在形式上对句子结构的定义与描述,而未涉及语义问题。
5. 语法(推导)树:我们用语法(推导)树 来描述一个句子的语法结构。
语法成分:在形式语言中又称“非终结符”
单词符号:在形式语言中又称“终结符号”

2、文法的定义

文法 G = ( V n , V t , P , Z ) 文法G=(V_n,V_t,P,Z) 文法G=VnVtPZ
V n :非终结符号集 V_n:非终结符号集 Vn:非终结符号集
V t :终结符号集 V_t:终结符号集 Vt:终结符号集
P :产生式或规则的集合 P:产生式或规则的集合 P:产生式或规则的集合
Z :开始符号(识别符号) Z ∈ V n Z:开始符号(识别符号) Z∈Vn Z:开始符号(识别符号)ZVn

其中, V = V n ∪ V t V=V_n ∪V_t VVnVt称为文法的字汇表。
规则: U : : = x      U ∈ V n , x ∈ V ∗ 规则:U ::= x \ \ \ \ U ∈V_n, x∈V^* 规则:U::=x    UVn,xV

规则的定义:规则是一个有序对(U, x), 通常写为: U : : = x U ::= x U::=x U → x U → x Ux , ∣ U ∣ = 1 | U| = 1 U=1 ∣ x ∣ |x| x >= 0 0 0

3、推导的形式定义

文法 G : v = x U y , w = x u y 文法G:v=xUy,w=xuy 文法GvxUywxuy
其中 x 、 y ∈ V ∗ , U ∈ V n , u ∈ V ∗ 其中x、y ∈V^*,U∈V_n , u ∈V^* 其中xyVUVn,uV
若 U : : = u ∈ P ,则 v = > G w 若U ::= u∈P,则v =>^G w U::=uP,则v=>Gw
若 x = y = ε   有 U : : = u ,则 U = > G u 若x=y=ε \ \ 有U ::= u,则U =>^G u x=y=ε  U::=u,则U=>Gu

文法 G , u 0 , u 1 , u 2 , … … , u n ∈ V + 文法G,u_0, u_1, u_2, ……,u_n∈V^+ 文法Gu0,u1,u2,……unV+
i f     v = u 0 = > G u 1 = > G u 2 = > G … … = > G u n = w if \ \ \ v= u_0=>^G u_1=>^G u_2 =>^G…… =>^G u_n=w if   v=u0=>Gu1=>Gu2=>G……=>Gunw
则 v = > G + w 则 v =>_G^+w v=>G+w

文法 G ,有 v , w ∈ V + 文法G,有v,w ∈V^+ 文法G,有vwV+
i f v = > G + w , 或 v = w ,则 v = > G ∗ w if v =>_G^+w , 或v=w,则 v =>_G^*w ifv=>G+w,v=w,则v=>Gw

4、规范推导

有 x U y = = > x u y , 若 y ∈ V t ∗ , 则此推导为规范的,记为 x U y 有xUy ==> xuy, 若 y ∈V_t^* , 则此推导为规范的,记为 xUy xUy==>xuy,yVt,则此推导为规范的,记为xUy =|=> x u y xuy xuy

直观意义:规范推导=最右推导
最右推导:若规则右端符号串中有两个以上的非终结符时,先推右边的。
最左推导:若规则右端符号串中有两个以上的非终结符时,先推左边的

若有v = u0 =|=> u1=|=> u2=|=>……=|=> un= w, 则 v v v = ∣ = > + =|=>^+ ==>+ w w w

5、语言的形式定义

  1. 句型: x 是句型   等价于    Z = > ∗ x , 且 x ∈ V ∗ ; 句型:x是句型\ \ \ 等价于\ \ \ Z =>^* x , 且 x∈V^* ; 句型:x是句型   等价于   Z=>x,xV
  2. 句子: x 是句型   等价于    Z = > + x , 且 x ∈ V t ∗ ; 句子:x是句型\ \ \ 等价于\ \ \ Z =>^+ x , 且 x∈V_t^* ; 句子:x是句型   等价于   Z=>+x,xVt
  3. 语言: L ( G [ Z ] ) = 语言:L(G[Z])= 语言:L(G[Z]={ x ∣ x ∈ V t ∗ , Z = > + x x | x∈V_t^*, Z =>^+ x xxVt,Z=>+x} ;
    G 和 G ’是两个不同的文法,若 L ( G ) = L ( G ’ ) , 则 G 和 G ’为等价文法。 G和G’是两个不同的文法,若 L(G) = L(G’) ,则G和G’为等价文法。 GG是两个不同的文法,若L(G)=L(G),GG为等价文法。

6、递归文法

递归规则:规则右部有与左部相同的符号(非终结符)对于 U : : = x U y U::= xUy U::=xUy

  1. 若 x = ε , 即 U : : = U y ,左递归 若x=ε, 即U::= Uy, 左递归 x=ε,U::=Uy,左递归
  2. 若 y = ε , 即 U : : = x U ,右递归 若y=ε, 即U::= xU, 右递归 y=ε,U::=xU,右递归
  3. 若 x , y ≠ ε ,即 U : : = x U y ,自嵌入递归 若x, y≠ε,即U::= xUy,自嵌入递归 x,y=ε,即U::=xUy,自嵌入递归

递归文法:文法G,存在 U ∈ V n U ∈V_n UVn
i f    U = = > + … U … , 则 G 为递归文法; if \ \ U==>^+…U…, 则G为递归文法; if  U==>+U,G为递归文法;
i f    U = = > U + … , 则 G 为左递归文法; if\ \ U==>U^+…, 则G为左递归文法; if  U==>U+,G为左递归文法;
i f    U = = > + … U , 则 G 为右递归文法。 if\ \ U==>^+…U, 则G为右递归文法。 if  U==>+U,G为右递归文法。

递归文法的优点:可用有穷条规则,定义无穷语言

左递归文法的缺点:不能用自顶向下的方法来进行语法分析

7、BNF范式

巴克斯范式(Backus-Naur Form,简称BNF)是一种用于描述上下文无关文法(Context-Free Grammar,简称CFG)的形式化表示方法,具体规则如下:

  1. 非终结符(Non-terminal symbols):用尖括号括起来,表示语法规则的左侧。非终结符表示一类语法结构,可以根据产生式规则进行替换。
  2. 终结符(Terminal symbols):用引号括起来,表示语法规则的右侧。终结符是构成实际句子的基本符号,是语言中的实际词汇或符号。
expr     -> expr '+' term | expr '-' term | term
term     -> term '*' factor | term '/' factor | factor
factor   -> '(' expr ')' | NUMBER

总结

编译主要的目的是: 给定 C 语言程序 x 以及语言规范 G , 求 x ∈ L ( G ) ? 给定C语言程序 x 以及语言规范 G , 求x ∈L(G) ? 给定C语言程序x以及语言规范G,xL(G)?
U2 文法和语言_第1张图片

三、短语、简单短语和句柄

给定文法 G [ Z ] , w = x u y ∈ V + ,为该文法的句型 给定文法G[Z], w = xuy∈V+,为该文法的句型 给定文法G[Z],w=xuyV+,为该文法的句型

若 Z = = > ∗ x U y , 且 U = = > + u , 则 u 是句型 w 相对于 U 的 若 Z ==>^* xUy, 且U ==>^+u, 则u是句型w相对于U的 Z==>xUy,U==>+u,u是句型w相对于U短语

若 Z = = > ∗ x U y , 且 U = = > u , 则 u 是句型 w 相对于 U 的 若 Z ==>^* xUy, 且U ==>u, 则u是句型w相对于U的 Z==>xUy,U==>u,u是句型w相对于U简单短语

其中 U ∈ V n , u ∈ V + , x , y ∈ V ∗ 其中U ∈V_n,u ∈V^+,x , y ∈V^* 其中UVnuV+x,yV

任一句型的最左简单短语称为该句型的 任一句型的最左简单短语称为该句型的 任一句型的最左简单短语称为该句型的句柄

U2 文法和语言_第2张图片

直观理解:短语u 是目标句型w的一部分或全部,是推导过程的前面某个句型(xUy)中的某个非终结符(U)所能推出的符号串。

任何句型本身一定是相对于识别符号Z的短语

四、语法树(推导树)

1、概念

句子( 句型)结构的图示表示法,它是有向图,由结点和有向边组成。
根结点: 识别符号(非终结符)。
中间结点:非终结符。
叶结点: 终结符或非终结符。
有向边:表示结点间的派生关系。
U2 文法和语言_第3张图片

2、语法树推导–句型的推导

一般采用自顶向下分析法
给定G[Z],句型w:可建立推导序列, Z = = > G ∗ w Z ==>_G^* w Z==>Gw
可建立语法树,以Z为树根结点,每步推导生成语法树的一枝,最终可生成句型w的语法树。

3、规约

自下而上地修剪子树的某些末端结点(短语),直至把整棵树剪掉(留根),每剪一次对应一次归约。
从句型开始,自右向左地逐步进行归约,建立推导序列。
通常我们每次都剪掉当前句型的句柄(最左简单短语)即每次均进行规范归约。即对句型中最左简单短语(句柄) 进行的归约称为 规范归约
U2 文法和语言_第4张图片

五、二义性

1、二义性文法

若对于一个文法的某一句子(或句型)存在两棵不同的语法树,则该文法是二义性文法,否则是无二义性文法。

无二义性文法的句子只有一棵语法树,尽管推导过程可以不同。(如最左推导,规范推导等)

若一个文法的某句子存在两个不同的规范推导,则该文法是二义性的,否则是无二义性的。

若文法是二义性的,则在编译时就会产生不确定性,遗憾的是在理论上已经证明:文法的二义性是不可判定的,即不可能构造出一个算法,通过有限步骤来判定任一文法是否有二义性。
现在的解决办法是:提出一些限制条件,称为无二义性的充分条件,当文法满足这些条件时,就可以判定文法是无二义性的。

2、二义性的改进

优先级的实现:层次定义:越靠上层,优先级越低;越靠下层,优先级越高
U2 文法和语言_第5张图片

3、有害文法

  1. 若文法中有如U::=U的规则,则这就是有害规则,它会引起二义性
    U2 文法和语言_第6张图片
  2. 多余规则:在推导文法的所有句子中,始终用不到的规则。即该规则的左部非终结符不出现在任何句型中(不可达符号
    在推导句子的过程中,一旦使用了该规则,将推不出任何终结符号串。即该规则中含有推不出任何终结符号串的非终结符(不活动符号

六、乔姆斯基文法体系

1、概念

形式语言:用文法和自动机所描述的没有语义的语言。
文法定义:乔姆斯基将所有文法都定义为一个四元组:

文法 G = ( V n , V t , P , Z ) 文法G=(V_n,V_t,P,Z) 文法G=VnVtPZ
V n :非终结符号集 V_n:非终结符号集 Vn:非终结符号集
V t :终结符号集 V_t:终结符号集 Vt:终结符号集
P :产生式或规则的集合 P:产生式或规则的集合 P:产生式或规则的集合
Z :开始符号(识别符号) Z ∈ V n Z:开始符号(识别符号) Z∈Vn Z:开始符号(识别符号)ZVn

2、分类

文法和语言分类:0型、1型、2型、3型
这几类文法的差别在于对产生式(语法规则)施加不同的限制。

  1. 0型——PSG
    P : u : : = v 其中 u ∈ V + , v ∈ V ∗     V = V n ∪ V t P: u ::= v其中 u∈V^+,v∈V^* \ \ \ V = V_n∪ V_t Pu::=v其中uVvV   V=VnVt
    0型文法称为短语结构文法。规则的左部和右部都可以是符号串,一个短语可以产生另一个短语
  2. 1型——CSG(上下文有关文法)
    P : x U y : : = x u y   其中 U ∈ V n , x 、 y 、 u ∈ V ∗ P: xUy ::= xuy\ \ 其中 U∈V_n, x、y、u∈V^* PxUy::=xuy  其中UVnxyuV
    称为上下文敏感或上下文有关。也即只有在x、y这样的上下文中才能把U改写为u。
    左边即要有多个终结符或者非终结符,一定要有终结符。
    1型和0型区别是左边与右边长度比较,1型右边一定比左边长
  3. 2型——CFG(上下文无关文法)
    P : U : : = u 其中 U ∈ V n , u ∈ V ∗ P: U ::= u其中 U∈V_n, u∈V^* PU::=u其中UVnuV
    称为上下文无关文法。也即把U改写为u时,不必考虑上下文。(1型文法的规则中x,y均为 ε 时即为2型文法)
    箭头左边一般一个字符,因此推导不受上下文约束
    2型文法与BNF表示相等价
  4. 3型——RG(正则文法)
    U2 文法和语言_第7张图片
    3型文法称为正则文法。它是对2型文法进行进一步限制,一个规则中只允许一个终结符和一个非终结符组合。
    3、总结
    二义性和这些文法的关系
    U2 文法和语言_第8张图片

你可能感兴趣的:(编译原理,汇编,机器翻译)