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