- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理06要点
上次课程内容回顾 计数问题 3.3.3 形式语言与自动机简介 3.3.3 形式语言与自动机简介(续) 3.4 自上而下语法分析3.4.1 自上而下分析的一般方法 3.4.1 自上而下分析的一般方法(续1) 3.4.2 消除左递归 1 消除文法的直接左递归(续1) 1 消除文法的直接左递归(续1) 1 消除文法的直接左递归(续2) 2 消除文法的左递归 2 消除文法的左递归(续1) 3.4.3 提取左因子 3.4.3 提取左因子(续1) 3.4.4 递归下降分析 稳妥的笨方法: 文法的状态转换图 : 状态图的化简: 状态图的化简(续1) 3 递归下降子程序 3 递归下降子程序(续) 上次课程内容回顾 3.4.4 递归下降分析 稳妥的笨方法: 文法的状态转换图 : 状态图的化简: 状态图的化简(续1) 3 递归下降子程序 3 递归下降子程序(续) 3.4.5 预测分析器 3.4.5.1 非递归预测分析器的工作模式 1 预测分析表 2 工作方式 3 驱动器算法 4 用预测分析器分析句子 4 用预测分析器分析句子(续) 3.4.5.2 构造预测分析表 3.4.5.2 构造预测分析表(续1) 3.4.5.2 构造预测分析表(续2) 3.4.5.2 构造预测分析表(续3) 3.4.5.2 构造预测分析表(续4) 3.4.5.2 构造预测分析表(续5) 上次课程内容回顾 上次课程内容回顾 3.4.5.2 构造预测分析表 3.4.5.2 构造预测分析表(续1) 3.4.5.2 构造预测分析表(续2) 3.4.5.2 构造预测分析表(续3) 3.4.5.2 构造预测分析表(续4) 3.4.5.2 构造预测分析表(续5) 3.4.5.3 LL(1)文法 3.4.5.3 LL(1)文法(续1) 3.4.5.3 LL(1)文法(续2) 3.4.5.3 LL(1)文法(续3) 3.4.5.3 LL(1)文法(续4) 放幻灯的方式: 每张“幻灯片”称为一个格局。 分析从某个初始格局开始,经过一系列的格局变化,最终到达接收格局,表明分析成功; 或者到达出错格局,表明发现一个语法错误。 格局:格局是一个三元组 (栈内容,当前剩余输入,改变格局的动作) ^top ^ip 改变格局的动作: ① 匹配终结符:若^top=^ip(但≠#),则pop且next(ip); ② 展开非终结符: 若^top= X且M[X,^ip]=α(X→α),则pop且push(α); ③ 报告分析成功:若^top=^ip=#,则分析成功并结束; ④ 报告出错:其它情况,调用错误恢复例程。 算法3.4 非递归的预测分析 输入 输入序列ω和文法G的预测分析表M 输出 若ω∈L(G),得到ω的一个最左推导;否则指出一个错误 方法 初始格局为: (#S,ω#,分析器的第一个动作) 令ip指向ω#中的第一个终结符,top指向S; loop x:=top^; a:=ip^; exit when x=# and a=#; -- 分析成功 end loop; ■ if x ∈ T then if x=a then pop(x); next(ip); -- 匹配终结符 else error(1); -- 出错:栈顶终结符不是a end if; else if M[x, a] = X→Y1Y2...Yk then pop(X); push(YkYk-1...Y2Y1);--展开产生式 else error(2); -- 出错:产生式不匹配 end if; end if; loop x := top^; a := ip^; if x ∈ T then if x=a then pop(x); next(ip); -- 匹配终结符 else error(1); -- 出错:栈顶终结符不是a end if; else if M[x, a] = X→Y1Y2...Yk then pop(X); push(YkYk-1...Y2Y1);--展开产生式 else error(2); -- 出错:产生式不匹配 end if; end if; exit when x=#; -- 分析成功 end loop; (E) num id F ε ε mod FT /FT *FT ε ε T FT FT FT T ε ε -TE +TE E T
原创力文档


文档评论(0)