- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《编译原理及实践教程》第4章自上而下语法分析报告
按照语法树的建立方法,可把语法分析方法分成两类: 自上而下分析法 自下而上分析法 LL(1)文法 问题:是否每个非终结符A的多个候选式不存在公共左因子,文法也不含左递归,就可以进行确定的自上而下的语法分析呢? 答:不能。 如文法对输入串dbc进行分析。 LL(1)文法 结论:并非所有的文法都能进行确定的自上而下的分析。 新问题:对于P→α1|α2|…|αn,当前输入串$:…αi…。能否有一种办法,只根据当前的αi就能在α1、α2、…、αn中准确地选择一个候选式进行匹配? 先给出两个定义:First集、Follow集。 算法4.1 计算非终结符A的First集。 例4.6 求下列文法中各个非终结符和各个候选式的First集。 基于LL(1)文法的语法分析程序实现 有两种确定的自上而下的语法分析方法: 递归下降的语法分析方法 预测分析方法(也称LL(1)分析方法) 预测分析过程举例 例4.11 使用表4.1对输入串i+i*i 进行语法分析。 程序结构与伪代码 若非终结符U的产生式形如U→u1|u2|…|un,其递归子程序的原型如下: U( ){ ch=当前输入符号; if(ch∈First(u1)) 调用u1( ); else if(ch∈First(u2)) 调用u2( ); ┆ else if((ε∈First(U))(ch∈Follow(U))); else error( ) ; } 代码说明:P87 对于U的每个右部ui=x1x2…xn的处理架构如下: ui( ) { 处理x1子程序; 处理x2子程序; ┆ 处理xn子程序; } 处理xi子程序 { if (xi是终结符) match(ch); else xi( ) } void match(token ch ) { if (xi==ch) //与当前输入符号相同? { ch=getnexttoken( ); // 取下一个符号 return; } else error( ); //不匹配,进行出错处理 } 例4.10 编写例4.4中的文法G4.2对应的递归下降分析程序。 (解答看教材87页) E ?TEE ? +TE |εT ? FTT ? *FT |εF ?(E) |i 实例:写IF语句的递归下降的分析程序 方法:在给定的语法定义中选择与IF语句有关的产生式,再对每个非终结符写一个函数。 if语句 ::= if 布尔表达式 then 执行句 布尔表达式 ::= 变量关系符变量 关系符 ::= | | | = | = | = 执行语句 ::= 变量:=整数 变量 ::= 标识符 整数 ::= 数字 | 整数 数字 数字::=0|1|2|3…|9 对应于非终结符if语句,有产生式 if语句 ::= if 布尔表达式 then 执行句 则if语句对应的函数可描述为: ifs() { token =getnexttoken(); If (token !=“if”) error; token = getnexttoken(); bool_expr(); token = getnexttoken(); If (token !=“then”) error; token = getnexttoken(); exe_sentence(); } 相应于非终结符布尔表达式,有产生式: 布尔表达式 ::= 变量关系符变量 布尔表达式的函数可描述为: bool_expr() { gettoken(); handle_varible(); Getnexttoken(); If (token not in ! ( | | | = | = | = ) error; Getnexttoken(); handle_varible(); } 练习:请写出for语句的递归下降的分析程序: for语句::= for 标识符:=算术表达式1 to 算术表达式2 do 执行句 算术表达式::=算术表达式±项|±项|项 项::= 项*因子|项/因子|因子 因子::=算术量 算术量::=标识符|整数 执行语句 ::= 变量:=整数 执行语句 ::= for语句 …………. 递归分析程序的优缺点 优点:实现思想简单
您可能关注的文档
最近下载
- 2025年光伏电站设计与运维职业技能等级考试模拟试题集(含答案解析).docx VIP
- DB13(J)T 218-2016外墙保温装饰复合板应用技术规程(盒状金属装饰保温一体板).pdf
- 护理警示标识课件.pptx VIP
- EN1563-2011 球墨铸铁 中文版.pdf VIP
- 水泥罐施工方案方针.pdf VIP
- 六年级数学下册折扣与成数人教版.pptx VIP
- 跨文化交际:中英文化对比 (3).ppt VIP
- 2025年光伏运维人员职业技能竞赛考试练习题库(含各题型)含答案.pdf VIP
- “素养导向”初中历史大单元教学策略及案例 课件.pptx
- 云南劳技七年级上册家政教案.docx VIP
文档评论(0)