编译原理语法分析.ppt
《编译原理语法分析.ppt》由会员分享,可在线阅读,更多相关《编译原理语法分析.ppt(114页珍藏版)》请在三一办公上搜索。
1、第3章 语法分析,语法分析是编译过程的核心部分。语法分析的基本任务是在词法分析识别出单词符号串的基础上,分析判断程序的语法结构是否符合语法规则。语言的语法结构用上下文无关文法来描述,因此,语法分析器的任务本质上是按上下文无关文法的产生式,确定整个单词串是否构成语法上正确的程序。语法分析的方法通常分为两类:自上而下分析法和自下而上分析法,3.1 文法和语言 3.2 推导与语法树 3.3 自上而下分析方法 3.4 自下而上分析方法 3.5 LR分析法,3.1 文法和语言,文法是程序语言的生成系统。自动机是程序语言的识别系统。用文法可精确定义一个语言,并依据文法构造出识别该语言的自动机。因此,文法对
2、程序语言和编译程序的构造具有重要意义,如程序语言的词法可用正规文法描述,语法可用上下文无关文法描述,而语义可借助于上下文有关文法描述。,3.1.1 文法和语言的概念 1语言 通常用表示字母表。由字母表中字符组成的有穷序列称为上的字符串或字。字母表上的所有字符串(包括空串)组成的集合用*表示。对于字母表,*上的任一子集称为上的一个语言,记为L,L*。语言L的每个字符串称为语言L的一个语句或句子。,2.文法 终结符是语言不可再分的基本符号,通常为一个语言的字母表。终结符代表了语法的最小元素,是一种个体记号。非终结符也称语法变量,它代表语法实体或语法范畴。一个非终结符是一个类、一个集合。例如,变量、
3、常量、+、*等为终结符,而“算术表达式”为非终结符,它代表一定算术式组成的类,如i*(i+i)、i+i+i等,即非终结符代表由终结符组成且满足一定规则的符号串的集合。,文法可表示为四元组G=(VT,VN,S,),其中(1)VT为非空终结符集;(2)VN为非空非终结符集,且VTVN=;(3)S为文法开始符,SVN;(4)是产生式的非空有限集,其中每个 产生式(规则)记作 或:=左部(VTVN)+至少含一非终结符,右部(VTVN)*。,产生式(也称产生式规则或规则)是定义语法实体的一种书写规则。一个语法实体的相关规则可能不止一个,如:P1,P2,Pn 相同左部的产生式可合并为一个:P 1|2|n
4、其中,i(i=1,2,n)称为P的候选式。,例3.1 试构造产生标识符的文法。分析:用L表示字母,D表示数字,T表示字母或数字,则 Labz D019 TLD 用S表示字母数字串,则ST是字母数字串,即 ST|ST 标识符I或为单个字母,或为一字母后 跟字母数字串,即 ILLS,解:产生标识符的文法GI为:G=(a,b,z,0,9,I,S,T,L,D,I,)其中,:ILLS STST TLD Labz D019,例3.2 写一文法,使其语言是奇数集,但不允 许出现以0打头的奇数。解:将奇数划分为三个部分:最高位允许出现19,用非终结符B表示;中间部分可出现任意多位数字09,每一位用非终结符D表
5、示;最低位只出现1,3,5,7,9,用A表示。由于中间部分可任意位,故需另引入一 非终结符M,它包括最高位和中间部分。,解:奇数集文法GN为:G=(0,1,9,N,A,M,B,D,N,):NA|MA MB|MD A1|3|5|7|9 B1|2|3|4|5|6|7|8|9 D0|B,3.文法产生的语言 设G=(VT,VN,S,)且,(VTVN)*,若存在产生式A,(VTVN)*,则称A可直接推出,记为 A 注意与的不同:是产生式中的定义记号,表示直接推导,是对文法符号串A 中A用产生式A的右部替换。,关于推导的两点说明:(1)若1可直接推出2,2可直接推出3,即存在一个自1至n的推导序列:12
6、3 n(n0)则称1可推导出n,记为1 n,表示从1出发经1步或若干步可推导出n(2)若记1 1,则1 n表示从1出发,经过 0步或若干步可推导出n,即1 n意味着或1=n,或1 n。,例如,考虑算术表达式文法GE:EE+EE*E(E)i 非终结符E代表一类算术表达式,从E出发可进行一系列推导,表达式 i+i*i 的推导如下:E E+E E+E*E E+E*i E+i*i i+i*I注意:在每一步推 导中,只能对其中一个 非终结符用其对应的产生式右部的 一个候选式来替换。,假定GS是一个文法,S是其开始符号,若S,(VTVN)*,则称是文法GS的一个句型;若S,VT*,则称是文法GS的一个句子
7、。由上述定义知:仅含终结符的句型是一个句子。开始符S是一个句型而不是一个句子。i+i*i是一个句子,也是一个句型,E+E*E、E+E*i和E+i*i是句型,但不是一个句子。,对于文法GS,它所产生的句子的全体称为由文法GS产生的语言,记为LG。L(G)=|S 且VT*3.1.2 形式语言分类 Chomsky于1956年定义了四类文法及相应的四类形式语言,它对程序语言的设计、编译方法、计算复杂性等方面都产生了重大影响。,1 0型文法与0型语言(短语文法)若文法G的每个产生式具有下列形式:其中至少含一个非终结符,则称文法G为0型文法或短语文法,记为PSG。0型文法相应的语言称为0型语言,它的识别系
8、统是图灵机。,21型文法与1型语言(对应自然语言)若文法G的每个产生式均满足|则称文法G为1型文法或上下文有关文 法,记为CSG。1型文法相应的语言称为1型语言。1型文法的另一种定义:文法G的每个产生式具有下列形式:A 其中,V*,AVN,V+它更明确地表达了上下文有关的特性。,3 2型文法与2型语言(对应程序设计语言)若文法G的每个产生式具有下列形式:A 其中,AVN,V*称文法G为2型文法或上下文无关文法,记为CFG。2型文法相应的语言称为2型语言或 上下文无关语言。它的识别系统是下推自动机。,4 3型文法与3型语言(对应有限自动机)若文法G的每个产生式具有下列形式:Aa 或 AaB 其中
9、,A,BVN,aVT*,则文法G称为3型文法或正规文法或右线 性文法,记为RG。3型文法相应语言为3型语言或正规语言。它的识别系统是有限自动机。3型文法还可呈左线性形式:Aa 或 ABa,5.四类文法的关系与区别 从0型文法到3型文法逐步增加限制。一般地,13型文法属于0型文法,2,3型文法属于1型文法,3型文法属于2型文法。四类文法的区别:(1)1型文法不允许有形如A的产生式,2,3型文法允许形如A的产生式;(2)0,1型文法的产生式左部可以是含终结 符的符号串或两个以上的非终结符,2,3型文法的产生式左部只允许是单个 非终结符。,anbncn|n1anbncm|m,n1 ambnck|m,
10、n,k1 这说明对文法规则定义形式的限制虽加强了,但相应的语言反而更大了。因此,不能主观认定文法限制越大则语言越小,即下述结论不成立:3型语言 2型语言 1型语言 0型语言 编译方法中通常用3型文法描述词法,用FA识别单词;利用2型文法描述语法,用下推自动机PDA识别各种语法成分。,例3.4 给出=a,b上具有奇数个a和奇数 个b的所有字符串集合的正规文法。解:如图,由S出发经奇数个a到达A,或经奇数个b到达B。再由A出发经奇数个b到达C;同样,由B出发经奇数个a到达C。,正规文法GS如下:SaA|bB AaS|bC BbS|aC CbA|aB|,3.1.3 正规式与上下文无关文法1.正规式到
11、上下文无关文法的转换 由正规式构造CFG的一种方法:(1)构造正规式的NFA;(2)若0为初始状态,则A0为开始符;(3)若存在映射关系f(i,a)=j,则定义产生式Ai aAj;(4)若存在映射关系f(i,)=j,则定义产生式Ai Aj;(5)若i为终态,则定义产生式Ai。,例3.5 用CFG描述正规式(a|b)*abb解:先构造识别(a|b)*abb的NFA M:,GA0:A0aA0bA0aA1 A1bA2 A2bA3 A3,由正规式构造CFG的另一种方法:通过分析正规式凭经验直接构造。例如,把(a|b)*abb看作(a|b)*和abb两部分,第一部分是由0个或若干个a和b组成的字符串,第
12、二部分仅由abb字符串组成,由此得到CFG GA0如下:GA0:AHT HaH|bH|Tabb,2.正规式与CFG描述的对象 CFG既可描述语法,又可描述词法。基于下述原因,通常用正规式描述词法:(1)词法规则简单,用正规式已足以描述;(2)正规式的表示比CFG更简洁、直观 和易于理解;(3)FA的构造比PDA(下推自动机)的构 造简单且效率高。,注意:(1)语言的描述和语言的识别是表示一种语言的两个不同侧面,二者缺一不可。(2)正规式通常适合于描述线性结构,如标识符、关键字和注释等;上下文无关文法通常适合于描述具有嵌套(层次)性质的非线性结构,如 if-else语句、while语句。,3.2
13、 推导与语法树,3.2.1 推导与短语1.规范推导 最右推导:在推导过程中,若每一步推导都是对句型中的最右非终结符用相应产生式的右部进行替换,则称这种推导为最右推导。最左推导:在推导过程中,若每一步推导都是对句型中的最左非终结符用相应产生式的右部进行替换,则称这种推导为最左推导。,例如,考虑句子 i+i*i 按文法GE的推导 最左推导:EE+Ei+Ei+E*E i+i*E i+i*i 最右推导:EE+EE+E*EE+E*i E+i*ii+i*i注意:推导过程不唯一,通常只考虑最左 推导或最右推导。最右推导又称为规范推导。规范推导的逆过程称为规范归约。,2.短语 如果S A且A,则称是句型关于非
14、终结符A的一 个短语,简称是的一个短语。如果S A且A,则称为句型的一个直接短语或 简单短语。注意:短语的两个条件缺一不可。考虑i+i*i,E i+i,但i+i不是短语,3.句柄 句型的最左直接短语称为句柄。注意,一个句型的直接短语不唯一,但最左直接短语唯一。例如,对S A,若为终结符串,则句型中的句柄为。将句型中的句柄用产生式的左部 符号代替便得到新句型A,这是一次 规范归约,恰与规范推导相反。,4.素短语 含有终结符的短语,如果它不存在具有 同样性质的真子串,则该短语为素短语。例如,在E E+E*i中,i、E*i、E+E*i是句型E+E*i的短语,其中,i为素短语,E*i虽含终结符,但其
15、真子串i含终结符,故E*i不是素短语,同样E+E*i也不是素短语。,3.2.2 语法树与二义性1.语法树 对于程序语言,有两个问题需要解决:(1)判别程序在语法上是否正确;(2)句子的识别或分析。为便于分析句子而引入语法树。语法树以图示化形式把句子分解成各 个组成部分,以分析句子的语法结构。语法树表示法与文法规则完全一致,但 更为直观和完整。,满足下列条件的树称为文法G的语法树:(1)每个结点用G的一个终结符或非终结 符标记;(2)根结点用文法开始符S标记;(3)内部结点一定是非终结符,若某内部结 点A有n个分支,且其所有子结点从左 至右依次标记为x1,x2,xn,则 Ax1x2xn一定是G的
16、一条产生式;(4)若某结点标记为,则它必为叶结点且 是其父结点的唯一子结点。,一个句型对应的语法树以文法开始符S作为根结点,并随着推导逐步展开。当某非终结符被产生式右部的某候选式替换时,该非终结符对应的结点产生出下一代结点,即候选式中从左至右的每个符号依次顺序对应一个新结点,且每个新结点与其父结点之间都有一连线。在一棵语法树生长过程中的任何时刻,所有没有后代的叶结点的自左至右排列是一个句型。,例如,句子i+i*i的语法树如下:,构造语法树时,一个句型的最左推导及最右推导只决定先生长左子树还是先生长右子树,推导结束时相应的语法树已看不出先生长的是哪个子树。因此,一棵语法树表示一个句型种种可能的不
17、同推导过程,包括最左(最右)推导。若坚持使用最左(最右)推导,则一棵语法树等价于一个最左(最右)推导,这种等价性包括语法树的每一步生长和推导过程的每一步展开的完全一致性。,2.子树和短语 语法树的某个结点连同它的所有后代组 成了一棵子树。只含有单层分枝的子树称为简单子树。子树与短语的关系:(1)短语:子树的所有叶结点组成的符号 串是相对于子树根的短语;(2)直接短语:简单子树的所有叶结点组 成的符号串是直接短语;(3)句柄:最左简单子树的所有叶结点组 成的符号串为句柄;,(4)素短语:子树的所有叶结点组成的 含终结符的符号串,且在该子树中 没有有包含终结符的更小子树。显然,从语法树出发寻找短语
18、、直接短语、句柄和素短语直观得多。但要注意,子树叶结点组成的符号串是指由该子树根开始向下生长的所有叶结点,该子树的部分叶结点并不是该子树的短语。,考虑句型E+E*i的语法树:短语:i、E*i和E+E*i;直接短语:i;句柄:i;素短语:i,3.文法的二义性 若文法G的一个句子能找到两种不同的最左推导(最右推导),即存在两棵不同的语法树,则称这个句子是二义性的。若一个文法包含二义性句子,则这个文法是二义文法,否则是无二义文法。,例如,对文法(3.1),句子i+i*i存在两种最左(右)推导:,再如,条件语句文法GS:GS:Sif B S Sif B S else S SA/A指其它语句 其中,VN
19、=B,S,A,VT=if,else 文法GS的一个句型if B if B S else S对应两棵不同的语法树,如下图所示,因此,文法GS是二义性文法。,4.文法二义性的消除 一个文法是二义性的,并不说明文法所描述的语言是二义性的。即对于一个二义文法GS,若能找到一个非二义文法GS,使得L(G)=L(G),则该二义文法的二义性可以消除。若找不到这样的GS,则二义文法描述的语言为先天二义性的。,文法二义性的消除方法:(1)不改变文法中原有的语法规则,仅加进 一些语法的非形式规定。如对文法(3.1),不改变已有产生式,仅加 进运算符的优先顺序和结合规则,即*优先于+,且*,+都服从左结合。(2)构
20、造一个等价的无二义文法。即把排除 二义性的规则合并到原文法中,改写原 文法。,GE:EE+TT TT*FF F(E)i此时,句子i+i*i只有唯一 一棵语法树。,例如,将文法(3.1)改写为无二义文法GE:,例3.6 将下述文法GS的二义性消除:GS:Sif b Sif b S else SA解:消除GS的二义性可采用两种方法:,(1)不改变已有规则,仅加 进一项非形式的语法规 定:else与离它最近的if 匹配,这样,句子if b if b A else A对应唯一的一 棵语法树。,(2)改写文法GS为GS:SS1|S2 S1if b S1 else S1|A S2if b S|if b S
21、1else S2 由于引起二义性的原因是if-else语句的if后可以是任意if语句,故改写文法时规定if和else之间只能是if-else语句或其它语句。,编译过程中希望一个文法是无二义性的,这样句子的分析可按唯一确定的方式进行。但文法的二义性是不可判定的,即不存在一种算法能在有限步内判定一个文法是否为二义性的。不过,二义文法有时也可带来一定好处,如语法分析中二义文法的应用。,3.3 自上而下分析方法,自上而下分析从文法开始符出发,向下推导,推出句子。即寻找一个推导序列,使推导出的句子恰为输入串;亦即,从根结点出发向下生长出一棵语法树,其叶结点组成的句子恰为输入串。显然,语法树的每一步生长(
22、推导)都以能否与输入串匹配为准。,1.自上而下分析存在的不确定性 文法GS:SxAy Aaba 若输入串为xay,则其分析过程如下:(1)首先建立根结点S。(2)文法关于S的产生式只有一个。,下一待分析字符a与A匹配。,(3)非终结符A有两个候选式,先选用第一个候选式:,y,A,x,S,a,b,(4)下一待分析字符y与b匹配,失败。(5)将A生成的子树注销,指针回退到输 入串的第二个字符a。,(6)A选用第二个候选式:,这时输入串中a与叶结点a匹配。(7)下一个待分析字符为y,而语法树下 一个叶结点也为y,匹配成功。,在上述分析过程中,若有多个候选式可供选择,则逐一试探每个候选式。一次试探失败
23、时,必须回溯到该试探的初始现场,包括注销已生长子树、指针回退到失败前状态。这种带回溯的自上而下分析方法是一种穷举法,效率极低,在实用编译程序中很少使用。,2.确定的自上而下分析 实现确定的自上而下分析需满足条件:(1)文法不含左递归。左递归:AA 或 A A 左递归的存在可能使自上而下分析过程陷入无限循环,故使用自上而下分析法必须消除文法的左递归。(2)分析过程无回溯。回溯的存在可能使已做的大量语法和语义分析推倒重来,这会严重影响效率,故使用自上而下分析法必须消除回溯。,3.左递归的消除直接左递归的消除 方法:引入一个新的非终结符,把含有 左递归的产生式改写为右递归形式。例如:AA|,是任意串
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 语法分析

链接地址:https://www.31ppt.com/p-5665760.html