网站大量收购独家精品文档,联系QQ:2885784924

第五章 语法分析1.ppt

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 5 章 语法分析 5.1 语法分析的基本概念 5.1.1 语法分析的定义与分类 (接上页) 5.1.2 算法设计分析1 5.1.2 算法设计分析2 5.2.1 递归子程序法的设计原理: 5.2.2 递归子程序的构造算法 5.2.3 递归子程序法对文法的要求: 练习题: 【习题5.1】解释下述词语: 语法分析 ;语法分析的分类。 【习题5.2】构造下述文法的递归子程序: G(S): S - a A S b | B d A - c S | ? B - b B | d 基本图形库 谢谢收看! * * 语法分析是编译的第二阶段;其任务是识别和处理比单词更大的语法单位,如:程序设计语言中的表达式、各种说明和语句乃至全部源程序,指出其中的语法错误;必要时,可生成内部形式,便于下一阶段处理。 内容提要: 5.1 语法分析的基本概念 5.2 递归子程序法 5.3 LL(1)分析法 5.4 LR()分析法 5.5 简单优先分析法 【定义】形式上说,语法分析是指对给定的符号串(?),判定其是否是某文法G(Z)的句子。即 Z ? 成立吗 ? = + ? Z 成立吗 ? = . + 【分类】语法分析方法通常分两大类: 1. 自顶向下法(推导法) 2. 自底向上法(归约法) 从开始符号出发,采用推导运算,试图自顶向下构造语法树。 从给定的符号串出发,采用归约运算,试图自底向上构造语法树。 或 ※ 通常采用“最左推导法”。 ※ 通常采用“最左归约法” 给定:? = a*(b+c), ?是否是表达式? 【例5.1】 G(E): E - T | E+T | E-T T - F | T*F | T/F F - i | (E) ※ 最左推导分析过程: 【结论】自顶向下分析的关键技术是如何确定具有相同左部的产生式之侯选者! 即 E a*(b+c) = + =T*F =F*F =a*F =a*(E) =a*(E+T) =a*(T+T) =a*(F+T) =a*(b+T) =a*(b+F) =a*(b+c) ---- 自顶向下法: E =T ※ 为了清楚每次归约的是什麽?我们观察语法树的 ? = a*(b+c) E - T | E+T | E-T T - F | T*F | T/F F - i | (E) ---- 自底向上法 a*(b+c) = . F*(b+c) = . T*(E+c) = . T*(b+c) = . T*(F+c) = . T*(T+c) = . T*(E+F) = . T*(E+T) = . T*(E) = . T*F = . E = . T = . + E a*(b+c) 即 【结论】自底向上分析的关键技术是如何确定当前句型的句柄! 最左归约分析过程: 构造过程: 语法分析的核心技术是“文法”的机内表示问题;递归子程序法直接把文法变成程序。 对每一个非终结符,构造一个子程序,用以识别该非终结符所定义的符号串。每个子程序以产生式左部非终结符命名,以产生式右部构造子程序内容。 例如:设有如下产生式: A - aBeD | bAc | ? 则有:递归子程序 A: 递归子程序法属于自顶向下语法分析方法。故又名递归下降法。 设计原理: y n 入口 出口 a? b? NEXT(w) y NEXT(w) NEXT(w) n c? y n err2 e? 遇ε时 B A D y err1 n NEXT(w) A - aBeD | bAc | ? 判断当前单词是否是c 即w=c? 调用 子程序A (接上页) 读单词函数 ⑴ 扩展文法: ※增设一个产生式,作为主程序:Z`-Z , ⑵ 入出口约定: ※子程序入口时,其首符号已经读来! ※子程序出口时,其后继符应该读来! ⑶ 子程序内容设计: ※遇终结符,判定之 ,确认后读下一单词; ※遇非终结符,调用之,返回后不读下一单词; ※遇空串( ? ) ,直接出口; 【例5.2】G(S): 令 Z - S , 则 递归子程序: 子程序A 开始 结束 # S NEXT(w) err0 y n 入口 出口 a b err1 NEXT(w) A b err2 NEXT(w) S NEX

文档评论(0)

qingfengxulai + 关注
实名认证
内容提供者

文档来源于网络

1亿VIP精品文档

相关文档