第二章 简单的一遍编译器.pptVIP

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * 第2次课 上下文无关文法 2.1-2.2 * 本章主要内容 主要描述编译器的前端 词法分析、语法分析和语义分析 通过本章对编译的过程有所了解 一个简单的语法制导翻译器 一个简单的语法制导编译器 词法分析 语法分析 中间代码生成 * 2.1 引言(2.1) 语法制导翻译器 一个编译器前端的模型:图2.3 词法:词素的正确形式(正则文法:略) 语法:程序的正确形式(上下文无关文法) 语义:程序的含义,即程序在运行时做什么事情(非形式化描述和启发式实例) * 2.1 引言 中间代码 抽象语法树(简称语法树):图2.4a 三地址码:x = y op z 图2.4b 最多只执行一个运算,通常是计算、比较或者分支跳转 * * 2.1 概述 程序设计语言由语法(syntax)和语义(semantics)两个方面定义。 程序设计语言的语法通常用上下文无关文法来表示。 中文:S-主语 谓语 宾语 日语:S-主语 宾语 谓词 阿拉伯语:S-谓词 主语 宾语 语义的描述则比语法的描述难得多,采用非形式化的自然语言描述 * 如何描述语法 上下文无关文法Context Free Grammar (CFG) IP ? NP-SBJ VP NP-SBJ ? DNP NP NN ? 贷款|本息 | 回收|中国 语法分析树 Parse Tree * 上下文无关文法 Context-Free Grammar, CFG 上下文无关文法CFG是一个四元组(Vt, Vn, S, P),其中: Vt 是一个非空有穷集合,称作终结符号集合 Vn 是一个非空有穷集合,称作非终结符号集合,且Vt?Vn = ?。 S ? Vn ,称作开始符号。 P是一个非空有穷集合,称为产生式集合,每条产生式形为A??,其中A?Vn,??(Vt?Vn)*。 * 例2.1 简单的算术表达式 list ? list + digit list ? list - digit list ? digit digit ? 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 终结符号:+ - 0 1 2 3 4 5 6 7 8 9 ? Vt 非终结符号 :list digit ? Vn 开始符号:list “?”:推导,左部是非终结符,右部是(Vt?Vn)* “|” 表示“或者” list list + digit list - digit digit 9 5 2 9-5+2 * 例2.1 简单的算术表达式 list ? list + digit | list – digit | digit digit ? 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 上述文法定义的是由加号和减号分隔的数字序列构成的列表。 * 例2.2 数字序列9 - 5 + 2的推导(derive) list ? list + digit ? list - digit + digit ? digit - digit + digit ? 9 - digit + digit ? 9 - 5 + digit ? 9 - 5 + 2 P1 : list ? list + digit P2 : list ? list - digit P3 : list ? digit P4 : digit ? 9 P4 : digit ? 5 P4 : digit ? 2 从开始符号推导得到的所有的终结符号串的集合称为该文法定义的语言(language)。 * 例2.3 函数调用中的参数列表 call ? id ( opt_params ) opt_params ? params | ? params ? params, param | param main() square(n) max(m,n) * 2.2.1 分析树(Parse Tree) 分析树描述如何从文法的开始符号推导出它的语言中的一个语句。 如果非终结符A有产生式 A ?XYZ,则A的一棵分析树为: A X Y Z * 句法分析树Parse Tree 分析树具有如下性质: 根结点是开始符号Start Symbol 叶子结点是终结符或? 内部结点是一个非终结符 Non-Terminal If A ? x1x2…xn, Then A 是一个非终结符; x1x2…xn 是A 的孩子,是终结符或非终结符 一个文法生成的语言是它的某个分析树生成的串的集合。为给定的符号串找到一棵分析树的过程称为串的语法分析(parsing)。 * li

您可能关注的文档

文档评论(0)

开心果 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档