编译原理之文法

文法:以有穷的集合描述无穷的计划的工具。

字母表:元素的非空有穷集合,其中的元素称为符号,因此也叫符号集。

符号串:由字母表中的元素组成的任何有穷序列,串中的元素个数叫做符号串的长度,空符号串ε,长度为0。
符号串的运算:
连接-符号串x = ab,y=cd, xy = abcd
方幂-z=xn,当n = 0, z = ε,当 n = 2, z = xx
集合的闭包-∑* = ∑0 ∪∑1 ∪∑2 ∪…∪∑n
∑+ 为正闭包 = ∑1 ∪∑2 ∪…∪∑n

规则|产生式|生成式,是形如α->β的有序对,读作α定义为β,相同左部的产生式可缩写A->a|b|c|d。

文法定义的形式-四元组(Vn,Vt,P,S): Vn为非终结符集,Vt 为终结符集,P为规则集,S为识别符|开始符,至少要在一个规则中作为左部出现,Vn ∩ Vt = ∅。

直接推导=>, 长度为n(n>=1)的推导+=>,长度为n(n>=0)的推导=>【+在=上面】,v=0S1,w=0011,直接推导:0S1 =>0011,使用规则:S->01,γ=0,δ=1;可以说w是v的直接推导,或者w直接归约于v,由识别符号S推导出来的符号串称为文法的句型,如果该符号串仅由终结符号组成,称为句子。

G[S]称为文法,L[G]为文法的集合表示形式
若L[G1] = L[G2],则称文法G1和G2是等价的。
G[S]:S->0S1,S->01
G[A]:A->0R,A->01,R->A1
L[S]=L[A]={0n1n|n>=1}

根据对文法施加不同的限制,分成4种类型。
0型或短语文法:文法的每个产生式α->β都是α、β属于字符集的闭包区间内且α至少包含有一个非终结符;左边有非终结符,右边有终结符;0型文法的能力相当于图灵机(Turing)。或者说,任何0型语言都是递归可枚举的;反之,递归可枚举集必定是一个0型语言。总之一般文法都是0型文法。

1型文法:又称为上下文有关文法,

  • α->β均满足|α|<=|β|, 除了S->ε外;小的推出大的或者相等的; 
  • 式子左边可以有多个字符,但必须有一个终结符
  • 式子右边可以有多个字符,可以是终结符,也可以是非终结符,但必须是有限个字符

2型文法:又称为上下文无关文法,

  • 式子左边只能有一个字符,而且必须是非终结符
  • 式子右边可以有多个字符,可以是终结符,也可以是非终结符,但必须是有限个字符

3型文法:又称为正规文法(正规文法又包括左线性文法和右线性文法)

  • 式子左边只能有一个字符,而且必须是非终结符
  • 式子右边最多有二个字符。如果有二个字符必须是一个终结符和一个非终结符,如果只有一个字符,那么必须是终结符。
  • 式子右边的格式一定要一致。也就是说如果有一个是(终结符+非终结符)那么所有的式子都必须是(终结符+非终结符), 如果有一个是(非终结符+终结符),那么所有的式子都必须是(非终结符+终结符)

正规文法——左线性文法:
(1):必须是三型文法
(2):式子右边的产生是(非终结符+终结符)的格式
正规文法——右线型文法:
(1):必须是三型文法

(2):式子右边的产生式是(终结符+非终结符)的格式

描述一种上下文无关的推导工具:句型的推导和语法树(推导树)

给定文法G(VN,VT,P ,S),对于G的任何句型都能构造与之关联的语法树。这棵树满足下面四个条件:
① 每个结点都有一个标记,此标记是V的 一个符号。(说的是节点一定是终结符或非终结符)
② 根的标记是S。(说的是树根的标记是开始符号S)
③ 若一结点标记A,至少有一个从它出发的分枝,则A肯定在Vn中(说的是如果一个节点有分支的话,这个节点一定是非终结符)
④ 如果标记为A,有n个从它出发的分枝,并且这些分枝的结点的标记(从左到右)为B1, B2,…,Bn,那么A→B1B2,…,Bn一定是P中的一个产生式。(说的是从A出发的叶子节点从左到右排列,一定是P中规则的一个产生式)
1

推导的每一步都是对最左非终结符进行替换,称为最左推导;最右推导也称规范推导

句型的分析:自上而下的分析和自下而上的分析。

一个句型的语法树中任一子树叶结点所组成的符号串都是该句型的短语;相对于非终结符的短语
如果子树中不再包含其他的子树,即A只能推导出b,而b不能再推出其他的式子,则b为此句型的直接短语;相对于规则的直接短语
直接短语中的最左直接短语为该句型的句柄[最右推导,右句型];某句型的句柄
案例:
S -> a|b|(T)
T -> TdS|S
证明(Sd(T)db)是S的一个句型,并求出短语,直接短语,句柄
此文法的抽象语法树为:
1
由此可得S=(Sd(T)db)为此文法的一个句型:
• 短语:S,(T),b,Sd(T),Sd(T)db,(Sd(T)db)
• 直接短语:S,(T),b
• 句柄:S

文法的实用限制:
有害规则:形如U->U的规则,没用,容易引起二义性;
多余规则:非终结符不在任意规则的右部出现,不可到达;非终结符不能推导出终结符,不可终止;

猜你喜欢

转载自blog.csdn.net/gabby____/article/details/82747550