




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 3 4自上而下语法分析3 4 1自上而下分析的一般方法 用推导的方法分析输入序列 记号流 对任何一个输入序列 从S开始进行最左推导 直到得到一个合法的句子或发现一个非法结构 在推导的过程中试图用一切可能的方法 自上而下 从左到右为输入序列建立分析树 分析是一种试探的过程 是反复使用不同产生式谋求与输入序列匹配的过程 2 3 4 1自上而下分析的一般方法 续1 例3 20用下述文法分析输入序列 cad S cAdA ab a 问题 若有A 1 2 公共左因子 则会虚假匹配 大量回溯 造成分析效率低 语义动作难以恢复 以及出错位置的报告不确切等 若有A A 左递归 则死循环使分析无法进行下去 重写文法 消除左递归 以避免陷入死循环 提取左因子 以避免回溯 3 3 4 2消除左递归 定义3 9若文法G中的非终结符A 对某个文法符号序列 存在推导A A 则称G是左递归的 若G中有形如A A 的产生式 则称该产生式对A直接左递归 消除文法的直接左递归考虑 A A 产生的语言 替换为 A A A A 消除了一个直接左递归 算法3 1消除直接左递归输入G中所有的A产生式 含直接左递归 输出等价的不含直接左递归的G 方法首先 整理A产生式为如下形式 A A 1 A 2 A m 1 2 n其中 i非空 j均不以A开始 然后用下述产生式代替A产生式 A 1A 2A nA A 1A 2A mA 4 消除文法的直接左递归 续1 例3 17用算法3 1消除算术表达式文法的直接左递归 分析输入序列id id id G3 4 E TE E TE T FT T FT F E F id E E T TT T F FF E F id 替换 A A 为 A A A A 关键 将实际文法符号对应到A 和 具体到E表达式 E T TA Whatamess 5 消除文法的左递归 文法 S Aa bA Ac Sd S是左递归的 但不是直接左递归 因为 S Aa Sda 算法3 2消除左递归输入无回路文法G输出无左递归的等价文法G 方法将非终结符合理排序 A1 A2 An foriin2 nloopforjin1 i 1loop用Aj 1 2 k的右部替换每个形如Ai Aj 产生式中的Aj 得到新产生式 Ai 1 2 k 消除Ai产生式中的直接左递归 endloop endloop 核心思想 将不是直接左递归的符号用其右部展开到其他产生式中 注意 若G产生句子的过程中出现A A的推导 则无法消除左递归 6 消除文法的左递归 续1 例3 18用算法3 2消除文法中的左递归 文法 S Aa bA Ac Sd 核心思想 将不是直接左递归的符号用其右部展开到其他产生式中 关键步骤 合理排序非终结符 A1 A2 An 用Aj 1 2 k替换Ai Aj 中的Aj得到Ai 1 2 k 消除Ai产生式中的直接左递归 排序 S在先A在后 将S右部代入A产生式中 得到 A Ac Aad bd 消除新产生式中的直接左递归 得到 S Aa bA bdA A G3 8 A cA adA 7 3 4 3提取左因子 当不确定用A产生式的哪个候选项替换A时 可以重写A 产生式来推迟这种决定 直到看见足够的输入 能正确决定所需选择为止 这一过程被称为提取左因子 它类似于有限自动机的确定化 公共前缀 A 1 2 算法3 3提取文法的左因子输入文法G输出等价的无左因子文法G 方法重复下述过程 直到所有A产生式候选项中均不再有公共前缀重排A产生式 A 1 2 n 并用A A A 1 2 n取代原A产生式 例3 20考察悬空else文法 S iCtS iCtSeS aC b用算法3 3提取左因子 得到如下文法 S iCtSS aS eS C b 既有左递归又含左因子 先消除左递归 为什么 8 3 4 4递归下降分析 递归下降分析是直接以程序的方式模拟产生式产生语言的过程 它对文法的限制是不能有公共左因子和左递归 它是一种非形式化的方法 只要能写出子程序 用什么样的方法和步骤均可 稳妥的笨方法 构造文法的状态转换图并且化简 将转换图转化为EBNF表示 从EBNF构造子程序 递归下降分析的文法 L E L E E T E T TT T F T F TmodF FF E id num 消除左递归后的等价文法 L E L E TE E TE TE T FT T FT FT modFT F E id num 构造状态转换图且化简 9 文法的状态转换图 每个非终结符对应一个状态转换图 文法状态转换图 为非终结符A建立一个初态和一个终态 为A X1X2 Xn构造从初态到终态的路径 边标记为X1 X2 Xn 根据识别同一集合的原则 化简转换图 L E L E TE E TE TE T FT T FT FT modFT F E id num 10 状态图的化简 标记为A的边可等价为标记 的边转向A转换图的初态 边连接的两个状态可以合并 标记相同的路径可以合并 不可区分的状态可以合并 化简E产生式 1 合并路径 2 转向E 的初态 3 合并 连接的节点 4 将E 的转换图代入E 5 合并 连接的节点 6 合并相同路径 11 状态图的化简 续1 最终得到全部化简的转换图 F无需化简 为什么 文法的扩展BNF EBNF 表示 重复0或若干次 while 可选择 if或while 括弧 之内的或关系 case 改变运算的优先级和结合性EBNF表示 L E E T T T F mod F F E id num 12 递归下降子程序 L E E T T T F mod F F E id num procedureLisbeginlookahead lexan while lookaheadeof loopE match endloop endL procedureEisbeginT whilelookahead loopmatch lookahead T endloop endE procedureFisbegincaselookaheadis match E match id match id num match num others error syntaxerror2 endcase endF 13 递归下降子程序 续 再看左递归问题 若存在产生式E E id 则E的递归下降子程序如下 procedureEisbeginE match match id endE 此程序永不停机 同样 文法中的公共左因子也会给递归下降子程序造成困难 includeconstintid 0 voidmatch intx voidE cout matchE endl E match match id voidmain E 14 3 4 5预测分析器3 4 5 1非递归预测分析器的工作模式 预测分析器的核心概念 1 分析方法 格局与格局变换2 分析表 驱动器 模拟算法 3 预测分析表的构造4 LL 文法 语言 分析器 15 预测分析表 L E L E TE E TE TE T FT T FT FT modFT F E id num 文法 分析表 M A a L E L E E T E T TT T F T F TmodF FF E id num M A a 的内容 若当前栈顶是非终结符A 下一输入终结符是a 则M A a 指示下一步动作 16 工作方式 放幻灯的方式 每张 幻灯片 称为一个格局 分析从某个初始格局开始 经过一系列的格局变化 最终到达接收格局 表明分析成功 或者到达出错格局 表明发现一个语法错误 格局 格局是一个三元组 栈内容 当前剩余输入 改变格局的动作 top ip 改变格局的动作 匹配终结符 若 top ip 但 则pop且next ip 展开非终结符 若 top X且M X a X 则pop且push 报告分析成功 若 top ip 则分析成功并结束 报告出错 其它情况 调用错误恢复例程 17 驱动器算法 算法3 4非递归的预测分析输入输入序列 和文法G的预测分析表M输出若 L G 得到 的一个最左推导 否则指出一个错误方法初始格局为 S 分析器的第一个动作 令ip指向 中的第一个终结符 top指向S loopx top a ip ifx Tthenifx athenpop x next ip 匹配终结符elseerror 1 出错 栈顶终结符不是aendif elseifM x a X Y1Y2 Ykthenpop X push YkYk 1 Y2Y1 展开产生式elseerror 2 出错 产生式不匹配endif endif exitwhenx 分析成功endloop 18 用预测分析器分析句子 id id id 栈当前剩余输入动作 Lid id id pop L push E L L E L L Eid id id pop E push TE E TE L E Tid id id pop T push FT T FT L E T Fid id id pop F push id F id L E T idid id id pop id next ip id L E T id id pop T T L E id id pop E push TE E TE L E T id id pop next ip L E Tid id pop T push FT T FT L E T Fid id pop F push id F id L E T idid id pop id next ip id L E T id pop T push FT F FT L E T F id pop next ip L E T Fid pop F push id F id L E T idid pop id next ip id L E T pop T T L E pop E E L pop next ip L pop L L 正确结束 19 3 4 5 2构造预测分析表 首先构造FIRST集合与FOLLOW集合 然后根据两个集合构造预测分析表 定义3 10文法符号序列 的FIRST集合如下 FIRST a a a T 若 则 FIRST 定义3 11非终结符A的FOLLOW集合如下 FOLLOW A a S Aa a T 若A是某句型的最右符号 则 FOLLOW A 通俗地讲 的FIRST集合就是从 开始可以导出的文法符号序列中的开头终结符 而A的FOLLOW集合 就是从开始符号可以导出的所有含A的文法符号序列中紧跟A之后的终结符 例如 FIRST E id num FOLLOW E L E L E TE E TE TE T FT T FT FT modFT F E id num 20 3 4 5 2构造预测分析表 续1 算法3 5计算X的FIRST集合输入文法符号X输出X的FIRST集合方法应用下述规则 1 若X T 则FIRST X X 2 若X是非终结符且有X 则加入 到FIRST X 3 若X是非终结符且有X Y1Y2 Yk 并设Y0 Yk 1 则对所有j 0 j k 若a FIRST Yj 1 且 FIRST Yj 则加入a到FIRST X 对任意文法符号序列X1X2 Xn FIRST X1X2 Xn 的计算方法与算法3 5中步骤3类似 即 FIRST X1X2 Xn 是所有FIRST Xi i 1 2 k 的并集 其中k为第一个具有性质 不属于FIRST Yj 或k n的文法符号 若k n 则 FIRST X1X2 Xn 再考虑 FIRST E FIRST TE FIRST FT E id num L E L E TE E TE TE T FT T FT FT modFT F E id num 21 3 4 5 2构造预测分析表 续2 算法3 6计算所有非终结符的FOLLOW集合输入文法G输出G中所有非终结符的FOLLOW集合方法应用下述规则 1 加入 到FOLLOW S 其中S是开始符号 是输入结束标记 2 若有产生式A B 则除 外 FIRST 的全体加入到FOLLOW B 3 若有产生式A B或A B 而 FIRST 则FOLLOW A 的全体加入到FOLLOW B 步骤3的理解 若S Aaa紧跟A之后则 Baa也紧跟B之后因为 FIRST 使得B成为A产生式右部最右的文法符号即对任何a FOLLOW A 均有a FOLLOW B 22 3 4 5 2构造预测分析表 续3 例3 22计算非终结符的FIRST与FOLLOW 提示 自下而上计算FIRST自上而下计算FOLLOW 为什么 L E L E TE E TE TE T FT T FT FT modFT F E id num FIRST F idnum FIRST T mod FIRST T FIRST F idnum FIRST E FIRST E FIRST T FIRST F idnum FIRST L FIRST E idnum FOLLOW L FOLL0W E FOLLOW E FOLLOW T FOLLOW T FOLLOW F mod 23 3 4 5 2构造预测分析表 续4 算法3 7构造预测分析表输入文法G输出分析表M方法应用下述规则 1 对文法的每个产生式A 执行2和3 2 对FIRST 的每个终结符a 加入 到M A a 3 若 FIRST 则FOLLOW A 每个终结符b 包括 加入 到M A b 4 M中其它没有定义的条目均是error M A a 如何指导下一步动作 1 若当前栈顶为A 当前输入为a 则规则2表示下一步动作是展开A 因为a FIRST 所以展开后下一次正好匹配a 2 若当前栈顶为A 当前输入为b且b FOLLOW A 则规则3表示下一步动作是展开A 即栈顶弹出A 继续分析A之后的部分 因为b FOLLOW A 所以弹出A后下一次正好匹配A的后继b 24 从文法构造分析表3 4 5 2构造预测分析表 续5 L E L E TE E TE TE T FT T FT FT modFT F E id num FIRST F T E idnum FIRST T mod FIRST E FIRST L idnum FOLLOW L FOLL0W E E FOLLOW T T FOLLOW F mod 2 对FIRST 的每个终结符a 加入 到M A a 3 若 FIRST 则FOLLOW A 每个终结符b 包括 加入 到M A b 25 3 4 5 3LL 1 文法 M A a 的作用 指导产生式产生句子 指导推导 问题 是否为任意文法构造的分析表M A a 中都最多有一个条目 例3 23二义文法文法的预测分析表 文法 S iCtSS aS eS C b 预测分析表 FIRST与FOLLOW集合 FIRST C b FIRST S e FIRST S i a FOLLOW S e FOLLOW S e FO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年初入职场新人面试技巧与常见问题解答
- 20XX年度XX市社会保基金管理局信息系统运维服务项目采购需求
- 单韵母的教学课件
- 2025年水利工程管理专业初级考试要点回顾与热点预测题集
- 中式面点师教学课件
- 2025年特岗教师招聘考试美术学科模拟试题及答案
- 2025年新媒体运营师实战手册与模拟题集
- 2025年河南省平顶山市中考化学一模试卷
- 电信诈骗消防知识培训课件
- 2025年中小学教师招聘考试数学科目模拟题与解析
- 硫磺安全技术说明书MSDS
- 贵州省遵义市红花岗区小升初数学试卷
- 贵州省新型农村社会养老保险经办规程
- 高压氧治疗相关知识
- 外科学麻醉专题知识讲座培训课件
- GB/T 1871.3-1995磷矿石和磷精矿中氧化铝含量的测定容量法和分光光度法
- 课程设计与评价
- 广东省中山市20222022学年下学期期末考试八年级英语试卷
- 霍尔电流传感器实训台课件
- 2023年国药控股股份有限公司招聘笔试题库及答案解析
- 石料场开采方案
评论
0/150
提交评论