ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:163.91KB ,
资源ID:18614507      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18614507.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理 第5章课件Word格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编译原理 第5章课件Word格式.docx

1、分类: 1、简单优先分析:对一个文法按一定原则求出所有符号即终结符号和非终结符号之间的优先关系,按照这种关系确定归约过程中的句柄. 特点:准确、规范,但分析效率底,使用价值不大. 2、算符优先分析:只规定算符(终结符号)之间的优先关系,不考虑非终结符号之间的优先关系,只要找到句柄就归约,不考虑归约到那个非终结符号。 特点:不是规范归约,分析速度快,特别适合于表达式的分析.5.2 简单优先分析法基本思想: 1、对句型中相邻的文法符号规定优先关系,以寻找句型中的句柄。2、规定句柄内各相邻符号之间具有相同的优先级。3、规定句柄两端符号优先级要比位于句柄之外而又和句柄相邻的符 号的优先级高,以先归约句

2、柄。4、对于文法中所有符号,只要它们可能在某个句型中相邻,就要为它们规定相应的优先关系,若某两个符号永远不可能相邻,则它们之间就无关系。与数学中的=,不同!一、优先关系:相等、小和大A)XY:当且仅当G中含有形如PXY的产生式,B)X当且仅当G中含有形如PXQ的产生式,其中Q为非终结符,且Q Y.C)X当且G中含有形如PQR的产生式,其中Q为非终结符,且Q = X,R=YD)对任何X,若文法开始符号S = X,则# X,若S = X,则X #,#=#。关系有:b=A,A=b,(=B,A=a, a=) 关系有:b(, ba (, (a, (b, ab, Bba, aa, B GS:S-#S# S

3、-bAb对于#有: #=# #S, #, b# A-(B|a B-Aa)简单优先矩阵:用于表示文法符号之间的简单优先关系的矩阵S(B)=二、简单优先文法的定义一个文法G,若它不含产生式,也不含任何右部相同的不同产生式,并且它的任何符号对(X,Y),或者没有关系,或者存在下述三种关系: 、 、 =之一,则称该文法是一个简单优先文法。三、简单优先分析法数据结构:构造文法的优先关系矩阵保存文法的产生式设置栈S。算法步骤:将输入符号串a1a2an#依次逐个存入符号栈S中,直到遇到栈顶符号ai的优先性 下一个待输入符号aj为止。栈顶当前符号ai为句柄尾,由此向左在栈中找句柄的头ak, 即找到ak-1 a

4、k为止。由句柄ak.ai在文法的产生式中查找右部为ak.ai的产生式,若找到,则用相应的左部替换句柄,若找不到则为出错,这时输入串不是该文法的句子。重复以上三步,直到归约完输入符号串,栈中只剩下文法的开始符号为止。5.3 算符优先分析方法一、基本思想 1、自下而上归约 2、规定算符(更一般地说,指终结符)的优先级及结合规则,以使得分析过程唯一 3、比较相邻两个算符而决定动作 注:1)这里的关键是对所有算符定义某种优先关系 2)算符优先分析法是仿效四则运算的计算过程而构造的一种语法分析方法 4、实例 表达式文法: E E+E|E-E|E*E|E/E|(E)|i 对这个二义文法可能会有好几个规范推

5、导和归约,真正运算时也有几种不同结果,但若按算符优先顺序和结合规则的规定进行归约,句子的归约过程就是唯一的,运算结果也唯一。例如: i+i-i*(i+i)归约过程如下:i+i-i*(i+i) 设算量级别最高,最先归约;E +i-i*(i+i) E+E-i*(i+i) ,同级,先归约左边“”E-i*(i+i) E-E*(i+i) ,*不同级,先归约右边“*”E-E*(E+i) 先括号内,后括号外E-E*(E+E) 归约括号内E-E*(E) 归约括号对E-E*E 先归约“*”E-E 后归约“-”E 结束(接受)二、直观算符优先分析法1、确定运算符的优先级 关键是对一个给定文法G,人为地规定其运算符

6、的优先顺序,优先关系的表示与简单优先文法类似:对于任何两个可能相继出现的终结符a,b,则a、b之间的关系为: 1) ab a的优先级低于b 2) a=b a的优先级等于b 3) ab a的优先级高于b 4) 若ab在任何情况下都不可能相继出现,则a,b无关系。1)算符优先分析法的关键是比较两个相继出现的终结符的优先级而决定应采取的动作。 2)要完成运算符间优先级的比较,可以先定义各种可能相继出现的运算符的优先级,并表示为矩阵的形式,使得能够在分析中通过查询矩阵元素而得到算符之间的优先关系。左 右+*I1)在此表中,包括,*包括/,“”是一个特殊符号,用于语句的开 始 符号和结束符号。 2)这张

7、表满足通常数学上的习惯约定: a、运算量i的优先级高于算符; b、语句开始和结束符号“”与终结符a相继出现时,应该有# a和a#,以此来保证语句内先归约。 3)(=)表示括号是成对归约的。 4)优先关系和代数中的大于小于关系不同, a b并不意味着b a,终 结符所处的左右位置很重要。三、算符文法的定义1、定义及性质 给定上下文无关文法G,若G中所有产生式右部都不包含两个相继的非终结符,则G为算符文法Operater Grammar(OG)。 注:算符文法保证了两个运算符之间只有一个操作数。算符文法性质 性质1 在算符文法中任何句型都不包含两个相邻的非终结符 。证明:用归纳法。 设是句型,即S

8、 S=0 1 . n-1 n= 推导长度为n,归纳起点n=1时, S=0 1=,即S ,必存在产生式S,而由算符文 法的定义,文法的产生式中无相邻的非终结符,显然满足性质1。 假设n1, n-1满足性质1。 若n-1=A,A为非终结符。 由假设的尾符号和的首符号都不可能是非终结符,否则与假设矛盾。 又若A是文法的产生式,则有n-1 n= 而A是文法的原产生式,不含两个相邻的非终结符,所以也 不含两个相邻的非终结符。满足性质1。证毕。 性质2 如果Ab或(bA)出现在算符文法的句型中,其中AVN ,bVT,则中任何含b的短语必含有A。用反证法。 因为由算符文法的性质1知可有: S * =bA 若

9、存在B b,这时b和A不同时归约,则必有S BA,这样在 句型BA中存在相邻的非终结符B和A,所以与性质1矛盾,证毕。注意:含b的短语必含A,含A的短语不一定含b。2、算符优先文法定义 设G是一个不包含空串产生式的算符文法,并设a,b VT; P,Q,R VN,定义关系:1)a =b 当且仅当G中含有形如P ab产生式,或者P aQb产生式;2)ab 当且仅当G中含有形如P aR的产生式,其中Rb, 或RQb;3)a b 当且仅当G中有形如P Rb产生式,其中R a,或R aQ. 若G中任何终结符序偶(a,b)至多满足上述关系之一,则称G为算符优先文法Operater Precedence G

10、rammar(OPG)。用语法树来理解更直观 Aa B B b .a ba=Pa a b a表达式文法: E E+E|E*E| (E)|I是算符文法和算符优先文法吗?注意 是算符文法,但不是算符优先文法。两个算符之间的优先关系是有序的,允许有a b, b a同时存在,而不允许有a b,ab,a =b三种情况之两种同时存在。3、算符文法和算符优先文法定义的意义这两个定义相当于对文法的句型和可归约的短语做了如下规定:设A1A2Ai-1AiAi+1An是文法G的一个句型,1)、若AiVN,则Ai-1、Ai+1 VT,即不许出现相继两个非终结符;+ *矛盾 2)、若B1B2Bm是当前可归约短语,并可归

11、约为Ai,则: a) B1B2Bm中不能有相继两个非终结符且相邻的终结符优先级全相等; b)对于B1B2Bm中首终结符b有Ai-1 c)对于B1B2Bm中尾终结符c有cAi+1.实际上,可归约短语是某产生式右部符号串,所以通过检查G的每个产生式的每个候选式,可以查找出任意优先级相同的终结符序偶。 要找出所有满足关系a或P=Qa,a VT; P,Q VN 尾终结符集LASTVT(P)= a|P = a或P= aQ,a VT; 注:1)有了这两个集合,就可通过检查每个产生式的每个候选式,确定满足关系和的所有终结符序偶。2)确定优先关系方法如下: 若产生式右部有形如:aP的串,则对于任何b FIRS

12、TVT(P),有aab A-aBb则有a =例如:设文法G的产生式为: S aAcBe A Ab|b B d 计算每个非终结符的FIRSTVT与LASTVT及所有终结符之间的关系。解:FIRSTVT(S)=a LASTVT(S)=e FIRSTVT(A)=b LASTVT(A)=b FIRSTVT(B)=d LASTVT(B)=d 优先关系表:右左cdea 例考虑下面文法: 0. E-#E# 1. EE+T|T 2. T T*F|F 3. F PF|P 4. P (E)|i 构造优先关系表 解:1) =关系:# =# , (=2) 计算每个非终结符的FIRSTVT和LASTVT集合FIRSTV

13、T(E)=# LASTVT(E)=#FIRSTVT(E)=+,*, ,(,i LASTVT(E)=+,*, ,),iFIRSTVT(T)= *, ,(,i LASTVT(T)=*, ,),iFIRSTVT(F)= ,(,i LASTVT(F)=,),iFIRSTVT(P)= (,i LASTVT(P)=),i 3) 对表达式文法中终结符在前,非终结符在后的相邻符号对有: #E,+T, *F, F,(E 终结符a或A-Ba的产生式DO INSERT(A,a);WHILE STACK 非空 DO 把STACK的栈顶弹出记为(B,a); FOR 每个形如A-B的产生式 DO INSERT(A,a);

14、 INSERT(A,a); IF NOT FA,a THEN FA,a=TRUE; PUSH(A,a) ONTO STACK 1、 表达式文法#E# 1. EE+T|T 2. T T*F|F 3. F PF|P 4. P (E)|i求FIRSTVT(B),第一次扫描后STACK的初始值为:2、(P,i)为栈顶时,由产生式F-P,T-F,E-T,栈顶内容逐次变为:(F,i), (T,i),(E, i)3、(P,()为栈顶时,由产生式F-(F,( ) , (T,( ), (E, ( )4、(F, )为栈顶时,由产生式T-(T, ),(E, )5、(T,*)为栈顶时,由产生式E- (E, *)6、逐

15、次弹出栈顶无进栈,直到栈空。凡在栈中出现过(A,a)的数组FA,a为1。E1ETFFIRSTVT(E)=# FIRSTVT(E)=+,*, ,(,iFIRSTVT(T)= *, ,(,i FIRSTVT(F)= ,(,iFIRSTVT(P)= (,i 2)同样我们可得,构造LASTVT(P)的算法。 a)方法1根据LASTVT的定义,按下面的规则来构造: 若有产生式P a或P aQ ,则a LASTVT(P) 若a LASTVT(Q),且有产生式P Q ,则 a LASTVT(P)FP,atrue,当且仅当a LASTVT(P) ;算法类似。我们有了每个非终结符P 的FISTVT(P)和LAS

16、TVT(P)之后我们就能够造文法G的优先表。3)构造算符优先表的算法 FOR 每条产生式P X1X2Xn DO FOR ( i=1,i=n-1,i+) if Xi和Xi+1均为终结符 then 置Xi =Xi+1 ; if i=n-2 and Xi和Xi+2均为终结符 and Xi+1为非终结符 then置Xi =Xi+2 ;if Xi为终结符而Xi+1为非终结符 then for FIRSTVT(Xi+1)中的每个a DO置 Xia if Xi为非终结符而Xi+1为终结符 then for LASTVT(Xi)中的每个a DO置 a Xi+1 注;如果文法G按此算法构造出的优先表没有重定义项

17、,则文法G是个算符优先文法。例:构造下面文法的算符优先表。 S if Eb then E else E EE+T|T TT*F|F F i Eb b 1)求各非终结符的首终结符集和尾终结符集。为了考虑语句的开始和结束符号“”,对文法拓广,加一个产生式SS FIRSTVT(S)=if LASTVT(S)=else,+,*,i FIRSTVT(E)=+,*,i LASTVT(E)=+,*,i FIRSTVT(T)=*,i LASTVT(T)=*,i FIRSTVT(F)=i LASTVT(F)=i FIRSTVT(Eb )=b LASTVT(Eb)=b 2)填写算符优先表 右 左ifthenels

18、eIfThenElse四、算符优先分析方法1、优先表构造算法的讨论 构造优先表的算法仅仅反映文法符号间关系,并不反映附加条件,对二义性文法构造算符优先表,可能会出现多重定义项.2、非规范分析 1)规范归约: 严格按照句柄进行归约,终结符和非终结符一起考虑,只要栈顶形成句柄,不管句柄内是否包含终结符都要进行归约。2)算符优先分析:在算符优先分析中,仅研究终结符之间的优先关系,而不考虑非终结符之间的优先关系,但句柄是由终结符和非终结符一起构成的,所以算符优先分析相对来说是非规范的分析。3、最左素短语 在算符优先分析中,可归约的短语不再称为句柄,而称为最左素短语。素短语是指这样一个短语,至少含有一个

19、终结符,且除它自身外不再包含其他素短语,最左边的素短语称为最左素短语。考虑非二义的表达式文法G(E): E E+T|T T T*F|F F (E)| i 句型T+T*F+i#的素短语是什么?我们把算符优先文法句型(括在两个#号之间)的一般形式写成:#N1a1N2a2Nnan Nn+1# 其中每个ai都是终结符,Ni是可有可无的非终结符。一个算符优先文法G的任何句型的最左素短语是满足如下条件的最左子串: NjajNia i Ni+1, a j-1aj aj=aj+1, , a i-1=a i aia i+1 根据这个最左素短语的定义我们可以构造算符优先分析算法。4、算符优先分析算法在文法的产生式中存在右部符号串的符号个数与该素短语的符号个数相等,非终结符号对应 Nk,(k=i,j+1)不管其符号名是什么。终结符对应ai,aj,其符号名要与ai,aj的实际名相一致,相应位置也一致,才有可能形成素短语。我们在分析过程中可以设置一个符号栈S,用以寄存归约或待形成最左素短语的符号串,用一个工作单元a存放当前读入的终结符号,归约成功的标志是当读到句子结束符#时,S栈中只剩#N,即只剩句子最左括号#和一非终结符N。k=1;sk=#; /* S为下推栈,这里称符号栈*/ repeat 将一个输入符号读入SYM中; IF SkVT THEN j=k

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1