




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
语法分析器的设计与实现自上而下的语法分析,阎艳naomi2010.11,编译原理实验2,语法分析器的实质(ch4.1),功能:验证源程序是否符合语法规则。输入:词法分析器生成的单词符号序列-种别输出:语法分析树;如有错,则指明错误的性质和位置。,词法分析器,语法分析器,编译程序后续部分,符号表,语法分析器的分类,按照语法树的建立方法,分为自上而下分析法递归下降预测分析自下而上分析法算符优先,自上而下语法分析器的实现,1从语言定义中整理出语法规则,语法的定义,语法规则通常用上下文无关文法描述(ch2.5),micro语言定义,仅有的数据类型是整型INT。所有的标识符采用显式声明,且长度不超过32个字符。标识符必须以字母开头并由字母、数字和下划线组成。整型常量由一串数字组成。注释由“-”开始,并在当前行尾结束。语句类型为:赋值语句:ID:=Expression;Expression是由标识符、文字常量、+-*/运算符组成的中缀表达式结构,其中允许含有括号。输入输出语句:read(ListofIDs);write(ListofExpressions);begin、end、read、write、INT都是保留字。每条语句以分号(;)结束。程序体由begin和end界定。词法记号不能跨行。,1从语言定义中整理出语法规则,/程序体由begin和end界定$begin$end/每条语句以分号(;)结束$semicolon|.,例1$begin$endboolprogram()symbol=scanner();if(symbol=$begin)then/调用词法分析器获取下一个单词symbol=scanner();if(statements()thenif(symbol=$end)returntrue;returnfalse;,例2$add|$sub|boolexpression(),expression()$addterm(),expression()$subterm(),term(),问题:左递归回溯解决:对语法规则加以限制自上而下的语法要求:LL(1)文法,自上而下语法分析器的实现,2将语法规则改造为LL(1)文法,LL(1)文法的条件,1)文法不含左递归2)对于文法中每个非终结符A的各产生式的候选首符集不相交。即若A1|2|n则FIRST(i)FIRST(j)=(ij)3)对文法中每一个终结符A,若它存在某个候选首符集包含,则FIRST(A)FLLOW(A)=,LL(1)文法消除左递归ch4.3.1,直接左递归的消除方法若AA|,其中不以A开头则修改规则为:AAAA|,LL(1)文法消除左递归ch4.3.1,消除左递归算法(解决间接左递归)对文法G的所有非终结符进行排序按上述顺序对每一个非终结符Pi依次执行:for(j=1;ji-1;j+)将Pj代入Pi的产生式(若可代入的话);消除关于Pi的直接左递归;化简上述所得文法,将间接左递归转化为直接左递归,例3消除表达式语法规则的左递归$add|$sub|$mul|$div|$id|$num|$lpar$rpar,排序:EE$addE|$subE|TT$mulT|$divT|$id|$num|$lpar$rpar,LL(1)文法消除回溯,提左公因子(ch4.3.2)假定A1|2|n|1|2|m则,改写成AA|1|2|mA1|2|n,LL(1)文法消除回溯,对存在产生式的非终结符分析FIRST和FOLLOW(ch4.3.3),FIRST集的构造若XVT,则FIRST(X)=X。若XVN,且Xa,则把a加入到FIRST(X)中;若X,则把加入FIRST(X)中。若XY,则把FIRST(Y)中的所有非-元素都加到FIRST(X)中;若XY1Y2Yk,对任何j(1ji-1),FIRST(Yj)都含有(即Y1Yi-1*),则把FIRST(Yi)中的所有非元素都加到FIRST(X)中;若所有的FIRST(Yj)均含有则把加到FIRST(X)中。,FOLLOW集的构造连续使用下面的规则,至每个FOLLOW不再增大:1)对于文法的开始符号S,置#于FOLLOW(S)中;2)若AB即是一个产生式,则把FIRST()加至FOLLOW(B)中;3)若AB是一个产生式,或AB即是一个产生式而(即FIRST()),则把FOLLOW(A)加至FOLLOW(B)中。,语法规则,micro语言定义,LL(1)文法,整理(手动),改造(手动或自动),自上而下语法分析器的实现,编程,语法分析(错误处理机制),3编程实现语法分析算法,递归下降分析程序(ch4.4,P74-76),每一非终结符对应一个布尔子过程:if某个候选式与输入串匹配then按此式扩充语法树;指针移过已匹配子串;returntrue;elsereturnfalse。,可能存在的缺陷?效率,错误处理解决:非递归化预测分析,预测分析程序,数据结构栈预测分析表M,预测分析表的构造:(1)对文法G的每个产生式A执行第二步和第三步;(2)对于每个终结符aFIRST(),把A加到MA,a中;(3)若FIRST(),则对任何的bFOLLOW(A)把A加至Ma,b中;(4)把所有无定义的MA,a标上“出错标志”或“同步符号”,初始:#、文法开始符入栈,预测分析算法,根据STACK栈顶符号X和当前的输入符号a完成语法分析工作1)若X=a=#,则语法分析成功,停止分析过程。2)若X=a#,则X出栈,让a指向下一个输入符号。3)若X是一个非终结符,则查找分析表M。若MA,a中存放着关于X的一个产生式,则:先X出栈,然后将产生式的右部符号串按反序入栈。4)否则,完成相关的出错处理。,错误处理机制(ch4.6),目的遇到错误时,使语法分析程序可以继续下去。思想栈顶为非终结符:跳过输入符号至同步符号/栈顶为终结符号:弹出该终结符/跳过输入串/同步符号
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年精密仪器生产定制合同范本
- 2025年家庭车辆无偿共享使用协议书
- 2025年度特色主题餐厅品牌授权承包合同
- 2025年度企业财务风险预警系统建设聘用合同
- 2025版塑料编织袋租赁业务合作协议范本
- 2025年度地皮买卖合同解除条件范本
- 2025年度体育赛事运营与合作合同及协议书
- 2025版手绘墙户外广告制作与发布合同
- 2025年度房产抵押回购合同协议书
- 2025年度城市河道整治承包合同
- 高中人工智能教学课件
- 学堂在线 积极心理学(上)厚德载物篇 章节测试答案
- 地面工程基础知识概要课件
- 王本陆课程与教学论课件
- 陪诊培训课件
- QGDW11008-2013低压计量箱技术规范
- 村两委内部管理制度
- 工业管道的定期检查与维护措施
- 2025中国供应链金融科技行业蓝皮书
- 林业发展“十五五”发展规划
- 中间人垫付合同协议书
评论
0/150
提交评论