1. 1、本文档共329页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理

编译原理 尹剑飞 科技楼1406 yjfbase@编译原理和技术的重要性 设计和开发编译器的原理和技术将会在一个计算机工作者的职业生涯中被多次使用。--- Compilers: Principles, Techniques, and Tools 编译器的构造综合了计算机科学的各个方面:计算机理论、程序设计、软件工程,是理论应用于实践的成功典范。-- Engineering A Compiler 编译原理和技术的重要性 自计算机科学诞生以来,语言处理器的工程化就一直在推动,随着相关理论的开发不断改进。-- Programming Language Processors in Java - COMPILERS AND INTERPRETERS 相对其它技术而言,编译器技术是一种内功修炼,因为任何计算机问题都可以化为语言翻译问题 -- some one 第一章 编译器介绍 1.1 编译器概貌 1.2 源程序分析 1.3 编译器的阶段 1.4 编译器的同胞 1.5 阶段的组合 1.6 编译器构造工具 1.1 编译器概貌 1.1 编译器概貌 分析 ( Analysis ) 综合 ( Synthesis ) 1.1 编译器概貌 1.1.3 语法树例子 1.1 编译器概貌 很多软件(不一定是编译器)执行类似的“分析” 结构编辑器,如:HTML editor 格式化(美化)打印,如:自动排版系统 静态检查,如:语法检查器 解释器,如:表达式计算器,SQL检查解释器,java … 1.1 编译器概貌 1.2 源程序 “分析” 分析包括三个阶段 词法分析(线性分析):字符-词(Token) 语法分析(层次分析):词-句 语义分析:句-正确(有意义)的句子 1.2 源程序 “分析” 输入字符串:‘p’ ‘o’ ‘s’ ‘i’ ‘t’ ‘i’ ‘o’ ‘n’ ‘ ‘ ‘=‘ ‘ ‘ ‘ ‘ ‘i’ ‘n’ ‘i’ ‘t’ ‘i’ ‘a’ ‘l’ ‘ ‘ ‘+’ ‘r’ ‘a’ ‘t’ ‘e’ ‘*’ ‘6’ ‘0’,得到下述词(Token): 标识符:position, initial, rate 赋值运算符:= 加法运算符:+ 乘法运算符:* 数:60 1.2 源程序 “分析” 1.2 源程序 “分析” 程序的层次结构通常由递归规则定义: 规则1:任何标识符是表达式 规则2:任何数是表达式 给定表达式1和表达式2,则下述也是表达式 规则3:表达式1 + 表达式2 规则4:表达式1 * 表达式2 规则5:(表达式1 ) 1.2 源程序 “分析” 线性 VS 层次 非递归定义 VS 递归定义 三型文法 VS 二型文法 (more on later…) 1.2 源程序 “分析” 检查是否存在语义错误,获取类型信息。 类型检查 1.3 编译器的阶段 1.3 编译器的阶段 符号表,记录符号与其关联的属性,如类型、作用域,对于过程名符号,有其参数个数和类型、传值还是传引用、返回类型。 符号在词法分析阶段进入符号表,而与其关联的属性要在后继阶段补充。 float position, initial, rate; 1.3 编译器的阶段 在遇到错误时,应尽可能继续执行相应阶段。 词法分析:不成词的余留串,如3int 语义分析:语法结构良好,但语义错误,如加两个标识符,类型分别为数组和过程。 1.3 编译器的阶段 中间代码可看作是一种抽象机上的程序,如GCC产生的中间代码,Java Byte代码。 重要特性:容易从语义分析阶段产生,容易翻译到目标代码。 中间代码有多种形式。 三地址码,最多三个操作数 流控和过程调用 (more on later…) 1.3 编译器的阶段 (more on later…) 1.4 编译器的同胞 预处理器 宏扩展 文件包含 语法糖衣 汇编器 装载和联结器 OS 外部引用 1.5 阶段的组合 前端:主要依赖源程序,独立于目标机器,词法分析、创建符号表、语法分析、语义分析、中间代码生成,可能有优化器的参与。 后端:代码优化、代码生成 1.6 编译器构造工具 解析产生器 扫描产生器 语义导向的翻译引擎 自动代码生成器。 数据流引擎 Chaper2.1 一个简单的一遍编译器 文法基础 提纲 本章为后继章节,特别是编译器前端(词法分析、语法分析、中间代码生成)提供一个实践的铺垫。 通过设计与开发一个简单的一遍编译器,展示了编译器前端构造的基本技术。 该一遍编译器为将中缀表达式语句编译成后缀表达式语句。 该例子还不够完善,希望同学们努力读懂并完善之。 编译器前端结构 文法Grammar 我们采用文法来描述语言的句子结构 在得到某语言的文法基础上,我们可判定一个句子是否属于该语言 判定一个句

文档评论(0)

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

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

1亿VIP精品文档

相关文档