[工学]第4章编译原理课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《[工学]第4章编译原理课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工学 编译 原理 课件
- 资源描述:
-
1、22.8.9copyright/1 陕西理工学院 计算机系 编译原理1第第4 4章章 语法分析语法分析自上而下分析自上而下分析 4.1 4.1 语法分析器的功能语法分析器的功能 4.2 4.2 自上而下分析面临的问题自上而下分析面临的问题 4.3 LL4.3 LL(1 1)分析法)分析法4.4 4.4 递归下降分析程序构造递归下降分析程序构造4.5 4.5 预测分析程序预测分析程序第第4 4章章 语法分析语法分析自上而下分析自上而下分析 22.8.9copyright/2 陕西理工学院 计算机系 编译原理2句型、句子和语言的定义句型、句子和语言的定义 句型句型有文法有文法GSGS,若,若S=S
2、=*,且,且*,则称是则称是是文法是文法G G的一个句型的一个句型 句子句子有文法有文法GSGS,若,若S=S=*,且,且T T*,则称是则称是是文法是文法G G的一个句子的一个句子 语言语言由文法由文法 G G 产生的所有句子的集合产生的所有句子的集合 L(G)=|S=L(G)=|S=+,且且T T*内容回顾内容回顾 22.8.9copyright/3 陕西理工学院 计算机系 编译原理3 最左最左(最右最右)推导推导在推导的任何一步在推导的任何一步=*(其中其中和和是句型是句型),都对都对中的最左中的最左(最右最右)非终结符进行替换非终结符进行替换 句型分析句型分析(句子分析句子分析)识别一
3、个符号串是否为某文法的句型识别一个符号串是否为某文法的句型(句子句子)的过程的过程也就是某文法的某个推导的构造过程也就是某文法的某个推导的构造过程内容回顾内容回顾 22.8.9copyright/4 陕西理工学院 计算机系 编译原理4 分析算法分析算法(分析器、识别算法分析器、识别算法)在语言的编译实现中,把完成句型在语言的编译实现中,把完成句型(句句 子子)分析的程序称为分析程序或识别程序分析的程序称为分析程序或识别程序 从左到右的分析算法从左到右的分析算法即总是从左到右地识别输入符号串,首即总是从左到右地识别输入符号串,首 先识别符号串中的最左符号,进而依次先识别符号串中的最左符号,进而依
4、次 识别右边的一个符号识别右边的一个符号内容回顾内容回顾 22.8.9copyright/5 陕西理工学院 计算机系 编译原理5 任务任务分析并判定输入的单词符分析并判定输入的单词符 号串是否符合该语言的语号串是否符合该语言的语 法规则法规则(上下文无关文法上下文无关文法)实质实质就是按照文法的产生式,就是按照文法的产生式,识别输入符号串是否为一识别输入符号串是否为一 个句子个句子(合法程序,语句,合法程序,语句,表达式等表达式等)4.14.1语法分析的功能语法分析的功能 22.8.9copyright/6 陕西理工学院 计算机系 编译原理6 设计思想设计思想判断是否能从文法的开始符号出发推导
5、出这个输入串判断是否能从文法的开始符号出发推导出这个输入串或者或者,判断能否建立一棵与输入串匹配的语法分析树判断能否建立一棵与输入串匹配的语法分析树 输入输入 单词符号串单词符号串 输出输出 语法分析树语法分析树格式化的程序格式化的程序合法的表达式、语句、函数合法的表达式、语句、函数 出错处理要求出错处理要求尽快发现错误,准确定位尽快发现错误,准确定位可能时进行恢复处理,继续语法分析可能时进行恢复处理,继续语法分析4.14.1语法分析的功能语法分析的功能 22.8.9copyright/7 陕西理工学院 计算机系 编译原理7根据建立方法,语法分析算法可分为根据建立方法,语法分析算法可分为两大类
6、两大类:自上而下分析法自上而下分析法从文法的开始符号出发,反复使用各种产生式向从文法的开始符号出发,反复使用各种产生式向 下推导,寻找与输入符号串匹配的推导下推导,寻找与输入符号串匹配的推导 自下而上分析法自下而上分析法从输入串开始,逐步进行归约,直至归约到文法从输入串开始,逐步进行归约,直至归约到文法 的开始符号的开始符号 两种方法反映了两种不同的语法树的构造过程两种方法反映了两种不同的语法树的构造过程自上而下自上而下从树根推导到树叶从树根推导到树叶自下而上自下而上从树叶归约到树根从树叶归约到树根4.14.1语法分析的功能语法分析的功能 22.8.9copyright/8 陕西理工学院 计算
7、机系 编译原理84.2 4.2 自上而下分析面临的问题自上而下分析面临的问题 基本方法基本方法对任何输入串对任何输入串,试图从文法的开始符号出发,试图从文法的开始符号出发,自上而下地为输入串建立一棵语法树自上而下地为输入串建立一棵语法树或者说,为输入串寻找一个最左推导或者说,为输入串寻找一个最左推导 过程本质过程本质是一种试探过程,是反复使用不同产生式是一种试探过程,是反复使用不同产生式 谋求匹配输入串的过程谋求匹配输入串的过程如何选择哪个产生式进行推导如何选择哪个产生式进行推导?4.24.2自上而下分析面临的问题自上而下分析面临的问题 22.8.9copyright/9 陕西理工学院 计算机
8、系 编译原理9 例例 文法文法GS SxAy Aab|aGS SxAy Aab|a 判断输入串判断输入串 w=x a yw=x a y是否为该文法的句子?是否为该文法的句子?4.24.2自上而下分析面临的问题自上而下分析面临的问题 22.8.9copyright/10 陕西理工学院 计算机系 编译原理10 公共左因子公共左因子产生回溯产生回溯例例 文法文法G:S xAyG:S xAy A A a ab|b|a a无法确定非终结符无法确定非终结符A A面临输入符面临输入符 号号a a时选用哪个关于时选用哪个关于A A的候选式的候选式 左递归左递归无限循环无限循环例例 文法文法G:G:S S S
9、Sa|abaa|aba4.24.2自上而下分析面临的问题自上而下分析面临的问题 22.8.9copyright/11 陕西理工学院 计算机系 编译原理11为了构造不带回溯的自上而下分析算法为了构造不带回溯的自上而下分析算法 消除文法的左递归消除文法的左递归 消除回溯、提取左因子消除回溯、提取左因子 LL(1)LL(1)分析条件分析条件LL(1)LL(1)文法文法4.3 LL4.3 LL(1 1)分析法)分析法 22.8.9copyright/12 陕西理工学院 计算机系 编译原理12关于非终结符关于非终结符P P的规则的规则 直接左递归定义直接左递归定义:若:若P PP P 、*例如例如 E
10、E E E+T+TT T(含有(含有E E的左递归)的左递归)T T T T*F FF F(含有(含有T T的左递归)的左递归)F (E)F (E)i i 4.3 LL4.3 LL(1 1)分析法)分析法 22.8.9copyright/13 陕西理工学院 计算机系 编译原理13 间接左递归定义:间接左递归定义:若若P=P=+P P *例如例如 间接左递归间接左递归 S AaS Aa A Sb|b A Sb|b S=Aa=Sba S=Aa=Sba 即即S=S=+SbSb 用用S S的产生式右部替换的产生式右部替换A A右部的右部的S S得:得:A Aab|bA Aab|b 变成变成A A的产生
11、式含有直接左递归的产生式含有直接左递归4.3 LL4.3 LL(1 1)分析法)分析法 22.8.9copyright/14 陕西理工学院 计算机系 编译原理14改写为等价的右递归改写为等价的右递归 形如:形如:P PP P 非非,不以不以P P开始开始 改写为:改写为:PPP P(P P为新增加的非终结符)为新增加的非终结符)PPPP 改写前产生式可产生短语改写前产生式可产生短语 P=PP=P=改写后产生式可产生短语改写后产生式可产生短语 P=P=P P =PP =4.3 LL4.3 LL(1 1)分析法)分析法 22.8.9copyright/15 陕西理工学院 计算机系 编译原理15E
12、E E E+T+TT TT T T T *F FF FF (E)F (E)i iE E T ET EE +T EE +T ET T F TF TT T *F T F TF F (E)(E)i i4.3 LL4.3 LL(1 1)分析法)分析法 22.8.9copyright/16 陕西理工学院 计算机系 编译原理16 若有多个左递归的产生式如:若有多个左递归的产生式如:PPPP1 1|P|P2 2|P|Pm m|1 1|2 2|n n4.3 LL4.3 LL(1 1)分析法)分析法 22.8.9copyright/17 陕西理工学院 计算机系 编译原理17练习练习 例如有文法:例如有文法:KK
13、a|Kb|Kc|d|eKKa|Kb|Kc|d|e 4.3 LL4.3 LL(1 1)分析法)分析法 22.8.9copyright/18 陕西理工学院 计算机系 编译原理18间接左递归消除举例间接左递归消除举例 S Qc S Qcc c Q Rb Q Rbb b R R SaSaa aS=Qc=Rbc=Sabc S=Qc=Rbc=Sabc 是间接左递归是间接左递归消除方法消除方法1 1:将非终结符排序:将非终结符排序:R Q SR Q S 将将R R的右部的右部代入代入Q Q,S S:Q Q SaSab ba ab bb b S Qc S Qcc c(不变)(不变)4.3 LL4.3 LL(1
14、 1)分析法)分析法 22.8.9copyright/19 陕西理工学院 计算机系 编译原理19 S S Qc Qcc c Q Rb Q Rbb b R R SaSaa a消除方法消除方法2 2:将非终结符排序:将非终结符排序:S Q RS Q R 将将S S的右部的右部代入代入Q Q,R R:Q RbQ Rbb b(不变)(不变)R R QcQca ac ca a|a a4.3 LL4.3 LL(1 1)分析法)分析法 22.8.9copyright/20 陕西理工学院 计算机系 编译原理20消除左递归算法消除左递归算法 1.1.以某种以某种S S顺序将文法的非终结符排列顺序将文法的非终结符
15、排列 P P1 1,P P2 2,,P,Pn n 2.FOR i:=1 TO n DO2.FOR i:=1 TO n DO BEGIN BEGIN FOR j:=1 TO i-1 DO FOR j:=1 TO i-1 DO 把形如把形如P Pi iPPj j的规则改写成的规则改写成 P Pi i1 1|2 2|k k,其中其中 P Pj j1 1|2 2|是关于是关于P Pj j的所有规则的所有规则;消除消除P Pi i的直接左递归的直接左递归 ENDEND 3.3.化简由化简由2 2所得的文法,即去除那些从开始符号所得的文法,即去除那些从开始符号 出发永远无法到达的非终结符的产生式出发永远无
16、法到达的非终结符的产生式4.3 LL4.3 LL(1 1)分析法)分析法 22.8.9copyright/21 陕西理工学院 计算机系 编译原理21 消除回溯目的消除回溯目的对文法的任何非终结符,当它去匹配输入串对文法的任何非终结符,当它去匹配输入串 时,能够根据输入符号,时,能够根据输入符号,准确地准确地选择合适的选择合适的 候选式去候选式去匹配匹配若需要若需要非终结符非终结符A A去匹配输入串,去匹配输入串,A A的候选式的候选式 为为AA1 1|2 2|n n ,A A所面临的第一所面临的第一 个个输入符号为输入符号为a a时,时,A A能准确地选择能准确地选择i i去执行去执行 匹配任
17、务,则无需回溯匹配任务,则无需回溯4.3 LL4.3 LL(1 1)分析法)分析法 22.8.9copyright/22 陕西理工学院 计算机系 编译原理22 对于所有形如对于所有形如 AA1 12 2.n n的规则的规则 其中,其中,为左因子,为左因子,不以不以开头开头 改写为改写为AAAA 其中其中A A为新增加的非终结符为新增加的非终结符 AA1 12 2.n n 例如例如 S xAyS xAy A A a ab|b|a a4.3 LL4.3 LL(1 1)分析法)分析法 22.8.9copyright/23 陕西理工学院 计算机系 编译原理234.3.3 LL(1)4.3.3 LL(1
18、)分析条件分析条件 FIRSTFIRST集合的定义集合的定义 FOLLOWFOLLOW集合的定义集合的定义 LL(1)LL(1)分析条件分析条件 LL(1)LL(1)文法的定义文法的定义4.3 LL4.3 LL(1 1)分析法)分析法 22.8.9copyright/24 陕西理工学院 计算机系 编译原理24设设G=(G=(T T,N N,S S,P P)*FIRST(FIRST()=a|)=a|=*a a,aaT T 若若=*,则,则FIRST(FIRST()FIRST(FIRST()是是的所有可能推导的首遇的所有可能推导的首遇 终结符号或终结符号或,是选择产生式的依据,是选择产生式的依据4
19、.3 LL4.3 LL(1 1)分析法)分析法 22.8.9copyright/25 陕西理工学院 计算机系 编译原理25 A A N N FOLLOW(FOLLOW(A A)=)=a aS=S=*A Aa a,a aT T 若若S=S=*A A,则,则#FOLLOWFOLLOW(A A)#输入串的结束符输入串的结束符 也可看作是句子的括号也可看作是句子的括号#S#S#FOLLOW(A)FOLLOW(A)表示了句型中可能紧跟在表示了句型中可能紧跟在A A后面的终结符号后面的终结符号4.3 LL4.3 LL(1 1)分析法)分析法 22.8.9copyright/26 陕西理工学院 计算机系 编
20、译原理26 非终结符非终结符A A的所有候选首符集两两不相交,的所有候选首符集两两不相交,即即A A的任何两个不同候选的任何两个不同候选和和,满足:,满足:FIRST(FIRST()FIRST()FIRST()=)=当要求当要求 A A 匹配输入串时,匹配输入串时,A A就能根据它所面就能根据它所面 临的第一个输入符号临的第一个输入符号 a a,准确地指派某一个,准确地指派某一个 候选去执行任务,这个候选就是那个候选去执行任务,这个候选就是那个终结首终结首 符集含符集含 a a 的的4.3 LL4.3 LL(1 1)分析法)分析法 22.8.9copyright/27 陕西理工学院 计算机系
21、编译原理27 当非终结符当非终结符 A A 面临输入符号面临输入符号a a,但,但a a不属于不属于A A 的任何候选首符集,如果的任何候选首符集,如果A A有候选式有候选式AA(A(A 的某个候选首符集包含的某个候选首符集包含),可以,可以让让A A自动得自动得 到匹配到匹配,即,即A A匹配于空字匹配于空字,但输入符号不读,但输入符号不读 进进 要想让要想让A A自动匹配成功,需要考察自动匹配成功,需要考察FOLLOW(A)FOLLOW(A)4.3 LL4.3 LL(1 1)分析法)分析法 22.8.9copyright/28 陕西理工学院 计算机系 编译原理284.3 LL4.3 LL(
22、1 1)分析法)分析法 22.8.9copyright/29 陕西理工学院 计算机系 编译原理29 输入输出输入输出输入:符号串输入:符号串(有序的有序的)输出:结构化的符号串输出:结构化的符号串(树结构树结构)产生式的选择产生式的选择根据当前符号(单词)根据当前符号(单词)语法分析树的表示语法分析树的表示按照使用序列排列的产生式序列按照使用序列排列的产生式序列4.3 LL4.3 LL(1 1)分析法)分析法 22.8.9copyright/30 陕西理工学院 计算机系 编译原理30 文法不含左递归文法不含左递归 对于文法的每个非终结符对于文法的每个非终结符 A A 的任何两的任何两 个不同的
23、产生式个不同的产生式 A|A|1)FIRST()FIRST()=1)FIRST()FIRST()=2)=2)=*和和=*不能同时成立不能同时成立3)3)如果如果=*,则,则 FISRT(/FISRT(/A A)FOLLOW(A)=)FOLLOW(A)=满足以上条件的文法称为满足以上条件的文法称为LL(1)LL(1)文法文法4.3 LL4.3 LL(1 1)分析法)分析法 22.8.9copyright/31 陕西理工学院 计算机系 编译原理31 含义含义第一个第一个 L L 表示从左向右扫描输入符号串表示从左向右扫描输入符号串第二个第二个 L L 表示生成最左推导表示生成最左推导1 1 表示读
24、入一个符号可确定下一步推导表示读入一个符号可确定下一步推导对于对于LLLL(1 1)文法,可以对输入串进行有效的无回)文法,可以对输入串进行有效的无回溯的自上而下分析。溯的自上而下分析。对于文法对于文法G G,当面临的输入符号为,当面临的输入符号为a a,要用非终结符,要用非终结符A A进行匹配时,假设进行匹配时,假设A A的所有产生式为的所有产生式为 AA1 1|2 2|n n1)1)若若aFIRST(aFIRST(i i ),则指派,则指派i i去执行任务去执行任务2)2)若若a a不属于不属于任何任何候选首符集,则:候选首符集,则:若若属于某个属于某个FIRST(FIRST(i i )且
25、且 aFOLLOW(A)aFOLLOW(A),则让,则让A A与与自动匹配自动匹配 否则,否则,a a的出现是一种语法错误的出现是一种语法错误4.3 LL4.3 LL(1 1)分析法)分析法 22.8.9copyright/32 陕西理工学院 计算机系 编译原理32不带回溯的自上而下分析程序不带回溯的自上而下分析程序4.4 4.4 递归下降分析程序构造递归下降分析程序构造 22.8.9copyright/33 陕西理工学院 计算机系 编译原理334.4 4.4 递归下降分析程序构造递归下降分析程序构造 22.8.9copyright/34 陕西理工学院 计算机系 编译原理34C C语言语言 E
展开阅读全文