编译原理完整学习笔记(一):引论

文章目录

    • 引论
      • 一、编译与解释
        • 1.1 编译程序
        • 1.2 解释程序
      • 二、计算思维
        • 2.1 概述
        • 2.2 编译中的计算思维
          • 2.2.1 抽象
          • 2.2.2 自动化
          • 2.2.3 分解
          • 2.2.4 递归
          • 2.2.5 权衡
      • 三、编译过程
        • 3.1 词法分析
        • 3.2 语法分析
        • 3.3 中间代码生成
        • 3.4 优化
        • 3.5 目标代码产生
      • 三、编译程序结构
        • 3.1 总框图
          • 3.1.1 出错处理
          • 3.1.2 遍(pass)
        • 3.2 前端后端
      • 四、编译程序生成
        • 4.1 概述
        • 4.2 编译程序生成与移植

引论

一、编译与解释

1.1 编译程序

翻译程序(Translator)

  • 把某一种语言程序(源语言程序)等价地转换成另一种语言程序(目标语言程序)的程序
    编译原理完整学习笔记(一):引论_第1张图片

编译程序(Compiler)

  • 把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编、机器语言)的程序
    编译原理完整学习笔记(一):引论_第2张图片

  • 分类

    • 诊断编译程序(Diagnostic Compiler)
      • 发现代码中的错误
    • 优化编译程序(Optimizing Compiler)
      • 提高编译效率
    • 交叉编译程序(Cross Compiler)
      • 宿主机与目标机不同
      • 概念解释
        • 宿主机 - 运行编译程序计算机
        • 目标机 - 运行目标语言程序计算机
    • 可变目标编译程序(Retargetable Compiler)
      • 只要改变和目标机器有关的部分,就可以针对不同目标平台生成不同的目标机器上的代码

1.2 解释程序

解释程序(Interpreter)

  • 把源语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序
    编译原理完整学习笔记(一):引论_第3张图片

二、计算思维

2.1 概述

「定义」计算思维是运用计算机科学的基础概念去求解问题、设计系统和理解人类的行为,它包括了一系列广泛的计算机科学的思维方法。

「分类」

  • 抽象
  • 自动化
  • 问题分解
  • 递归
  • 权衡
  • 保护、冗余、容错、纠错和恢复
  • 利用启发式推理来寻求解答
  • 在不确定情况下的规划、学习和调度

2.2 编译中的计算思维

2.2.1 抽象
  • 方法
    • 忽略一个主题中与当前问题(或目标)无关的那些方面
    • 从众多的事物中抽取出共同的、本质性的特征,舍弃其非本质的特征
    • 是一种从个体把握一般、从现象把握本质的认知过程和思维方法
  • 编译中的体现
    • 有限自动机
    • 形式文法
2.2.2 自动化
  • 方法
    • 将抽象思维的结果在计算机上实现,是一个将计算思维成果物化的过程,也是将理论成果应用于技术的实践
    • 自动化的思维方法不仅体现在编译程序本身的工作机制上,更体现在了编译程序的生成工具的研究和设计上
  • 编译中的体现
    • 有限自动机
    • 预测分析程序
    • 算符优先分析
    • LR分析
2.2.3 分解
  • 方法
    • 将大规模的复杂问题分解成若干个较小规模的、更简单的问题加以解决
  • 编译中的体现
    • 中间语言的引入
    • 编译多阶段
    • 多遍分析过程
2.2.4 递归
  • 方法
    • 问题的解决依赖于类似问题的解决,只不过后者的复杂程序或规模较原来的问题更小
  • 编译中的体现
    • 递归下降分析
    • 基于树遍历的属性计算
    • 语法制导翻译
2.2.5 权衡
  • 方法
    • 理论可实现 vs. 实际可实现
  • 编译中的体现
    • 尽管上下文无关文法不是万能的,但我们依然用它来处理高级程序设计语言
    • 优化措施的选择

三、编译过程

3.1 词法分析

  • 「任务」
    • 输入源程序,对构成源程序的字符串进行扫描和分解,识别出单词符号
  • 「依循的原则」
    • 构词规则
  • 「描述工具」
    • 有限自动机
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MixZ3jsB-1597629249323)(media/15920167467640.jpg)]

3.2 语法分析

  • 「任务」
    • 在词法分析的基础上,根据语法规则把单词符号串分解成各类语法单位(语法范畴)
  • 「依循原则」
    • 语法规则
  • 「描述工具」
    • 上下文无关文法
      编译原理完整学习笔记(一):引论_第4张图片

3.3 中间代码生成

  • 「任务」
    • 对各类语法单位按语言的语义进行初步翻译
  • 「依循原则」
    • 语义规则
  • 「描述工具」
    • 属性文法
  • 「中间代码」
    • 三元式、四元式、树、…

3.4 优化

  • 「任务」
    • 对前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码
  • 「依循原则」
    • 程序的等价变换规则

3.5 目标代码产生

  • 「任务」
    • 把中间代码变换成特定机器上的目标代码
  • 「依赖」
    • 依赖于硬件系统结构和机器指令的含义
  • 「三种形式的目标代码」
    • 汇编指令代码:需要进行汇编
    • 绝对指令代码:可直接运行
    • 可重新定位指令代码:需要链接

三、编译程序结构

3.1 总框图

编译原理完整学习笔记(一):引论_第5张图片

3.1.1 出错处理
  • 出错处理程序
    • 发现源程序中的错误,把有关错误信息报告给用户
  • 语法错误
    • 源程序中不符合语法(或词法)规则的错误
    • 非法字符、括号不匹配、缺少;、…
  • 语义错误
    • 源程序中不符合语义规则的错误
    • 说明错误、作用域错误、类型不一致、…
3.1.2 遍(pass)
  • “遍”:对源程序或源程序的中间表示从头到尾扫描一次
  • 阶段 v.s. 遍
    • 一遍可以由若干段组成
    • 一个阶段也可以分若干遍来完成

3.2 前端后端

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6KEoh5x6-1597629249330)(media/15920174692174.jpg)]

  • 编译前端
    • 与源语言有关,如词法分析、语法分析、语义分析与中间代码产生,与机器无关的优化
  • 编译后端
    • 与目标机有关,与目标机有关的优化、目标代码生成
  • 分离的好处
    • 程序逻辑结构清晰
    • 优化更充分,有利于移植
      编译原理完整学习笔记(一):引论_第6张图片

四、编译程序生成

4.1 概述

  • 以汇编语言和机器语言为工具
    • 优点:针对具体机器,充分发挥计算机功能,程序效率高
    • 缺点:程序难读、难写、易出错、难维护、生产的效率低
  • 高级语言
    • 程序易读、易理解、容易维护、生产效率高
    • 编译原理完整学习笔记(一):引论_第7张图片

4.2 编译程序生成与移植

  • 「生成」利用已有的某种语言的编译程序实现另一种语言的编译程序
    编译原理完整学习笔记(一):引论_第8张图片

  • 「移植」把一种机器上的编译程序移植到另一种机器上
    编译原理完整学习笔记(一):引论_第9张图片

  • 「自编译方式」不断扩大涵盖语言的范围
    编译原理完整学习笔记(一):引论_第10张图片

  • 「自动生成」
    编译原理完整学习笔记(一):引论_第11张图片

你可能感兴趣的:(大学课程笔记(重要),#,编译原理,编译原理,编译过程,编译程序结构,编译程序生成,编译中的计算思维)