编译原理介绍

什么是编译程序

把某一种语言程序(称为源语言程序)等价地转换
成另外一种语言程序(称为目标语言程序)的程序
高级语言程序须要编译程序的翻译才能变成机器语言程序(目标程序),机器程序能够运行成为结果前端

编译程序:
1.诊断编译程序(Diagnostic Compiler)
2.优化编译程序(Optimizing Compiler)
3.交叉编译程序(Cross Compiler)
4.可变目标编译程序(Retargetable Compiler)
解释程序(Interpreter)
把源语言写的源程序做为输入,但不产生目标
程序,而是边解释边执行源程序后端

为何要学习编译原理

理解计算系统

设计计算系统

训练计算思惟(Computational Thinking)

计算思惟基本概念
Jeannette M. Wing, Computational Thinking,
Communications of ACM, Vol.49, No.3, 2006,
pp.33-35.
被认为是近十年来产生的最具备基础性、长期性的
学术思想,成为21世纪计算机科学研究和教育的热
工具

  • 计算思惟是运用计算机科学的基础概念去求解问题、
    设计系统和理解人类的行为,它包括了一系列普遍
    的计算机科学的思惟方法
  • 计算思惟和阅读、写做和算术同样,是21世纪每一个
    人的基本技能,而不单单属于计算机科学家
  • 计算思惟在生物、物理、化学、经济学、统计学等
    其余学科中的影响已经显现
    计算思惟包括一系列普遍的计算机科学的思惟方法:
  • 抽象
  • 忽略一个主题中与当前问题(或目标)无关的那些方面,
    以便更充分地注意与当前问题(或目标)有关的方面
  • 从众多的事物中抽取出共同的、本质性的特征,舍
    弃其非本质的特征
  • 是一种从个体把握通常、从现象把握本质的认知过
    程和思惟方法
  • 图灵机就是一种抽象
  • 编译原理中的"抽象"
    • 有限自动机
    • 形式文法
  • 自动化
  • 将抽象思惟的结果在计算机上实现,是一个将计算
    思惟成果物化的过程,也是将理论成果应用于技术
    的实践
  • 自动化的思惟方法不只体如今编译程序自己的工做
    机制上,更体如今了编译程序的生成工具的研究和
    设计上
  • 编译原理中的"自动化“
    • 有限自动机
    • 预测分析程序
    • 算符优先分析
    • LR分析
  • 问题分解
  • 分解(Decomposition)
  • 将大规模的复杂问题分解成若
    干个较小规模的、更简单的问
    题加以解决
  • 对问题自己的明确描述,并对问
    题解法做出全局性决策
  • 把问题分解成相对独立的子问题
  • 再以一样的方式对每一个子问题进
    一步精确化,直到得到对问题的
    明确的解答
  • 分解(Decomposition)
  • 层次化管理
  • 编译原理中的"问题分解"
  • 为何编译程序引入中间语言?
  • 为何编译分红多个阶段?
  • 为何分析过程分红多遍?
  • 递归
  • 递归(Recursion)
  • 问题的解决依赖于相似问题的解决,只不事后者的
    复杂程度或规模较原来的问题更小
  • 一旦将问题的复杂程度和规模化简到足够小时,问
    题的解法其实很是简单
  • 编译原理中的"递归"
    • 递归降低分析
    • 基于树遍历的属性计算
    • 语法制导翻译
  • 权衡
  • 权衡(折衷, Tradeoff )
  • 理论可实现 vs. 实际可实现
  • 理论研究重在探寻问题求解的方法,对于理论成果
    的研究运用又须要在能力和运用中做出权衡
  • 编译原理中的"权衡"
  • 用上下文无关文法来描述和处理高级程序设计语言
  • 优化措施的选择
  • ...
  • 保护、冗余、容错、纠错和恢复
  • 利用启发式推理来寻求解答
  • 在不肯定状况下的规划、学习和调度
  • ...学习

    编译原理

  • 编译理论与技术
  • 计算机科学与技术中理论和实践相结合的最好典范
  • ACM 图灵奖
  • 授予在计算机技术领域做出突出贡献的科学家
  • 程序设计语言、编译相关的获奖者是最多的
  • 编译理论与技术
  • 计算机科学与技术中理论和实践相结合的最好典范
  • 体现了不少典型的计算思惟方法
  • 编译原理和方法的应用
  • Html/XML 分析
  • 语言处理工具
  • 搜索引擎优化

    编译过程

    编译程序是怎样把高级语言(如C++)翻译成低
  • 级语言(如机器指令)的?
  • 把英文翻译为中文
  • 识别出句子中的一个个单词---词法分析
  • 分析句子的语法结构---语法分析
  • 根据句子的含义进行初步翻译---中间代码产生
  • 对译文进行修饰---优化
  • 写出最后的译文---目标代码产生
    以上是编译程序工做的五个阶段
  • 编译过程——词法分析
  • 任务: 输入源程序,对构成源程序的字符串进行
    扫描和分解,识别出单词符号
  • 依循的原则:构词规则
  • 描述工具:有限自动机
    for i := 1 to 100 do
    基本字 标识符 赋值号 整常数 基本字 整常数 基本字
  • 编译过程——语法分析
  • 任务:在词法分析的基础上,根据语法规则把
    单词符号串分解成各种语法单位(语法范畴)
  • 依循的原则:语法规则
  • 描述工具:上下文无关文法
    Z := X + 0.618 * Y(算术表达式--》算术表达式--》赋值语句)
  • 编译过程——中间代码产生
  • 任务:对各种语法单位按语言的语义进行初步翻译
  • 依循的原则:语义规则
  • 描述工具:属性文法
  • 中间代码:三元式,四元式,树,...
  • Z:=X + 0.618 * Y 翻译成四元式为
    |序号 | OPR | OPN1 | OPN2 | RESULT | 注释|
    |:--:|:--:|:--:|:--:|:--:|:--:|:--:|
    |(1)| * | 0.618| Y | T1 | T1:=0.618*Y|
    |(2)| + | X | T1 | T2 | T2:=X+T1|
    |(3)| := | T2 | | Z | Z:=T2|
  • 编译过程——优化(;例如乘法变成加法)
  • 任务:对前阶段产生的中间代码进行加工变换,
    以期在最后阶段产生更高效的目标代码
  • 依循的原则:程序的等价变换规则搜索引擎

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

编译程序的结构

  • 编译程序总框
  • 词法分析器------源程序
  • 语法分析器------中间代码(四元式)
  • 语义分析与中间代码生成器------语法单位
  • 优化段------目标代码
  • 目标代码生成器------中间代码(四元式)
  • 出错处理
  • 出错处理程序
  • 发现源程序中的错误,把有关错误信息报告给用户
  • 语法错误
  • 源程序中不符合语法(或词法)规则的错误
  • 非法字符、括号不匹配、缺乏 ;、...
  • 语义错误
  • 源程序中不符合语义规则的错误
  • 说明错误、做用域错误、类型不一致、...
  • 所谓"遍", 就是对源程序或源程序的中间表示
    从头至尾扫描一次
  • 阶段与遍是不一样的概念
  • 一遍能够由若干段组成
  • 一个阶段也能够分若干遍来完成
  • 编译前端与后端
  • 编译前端
  • 与源语言有关,如词法分析,语法分析,语义分析与
    中间代码产生,与机器无关的优化
  • 编译后端
  • 与目标机有关,与目标机有关的优化,目标代码产生
  • 带来的好处
  • 程序逻辑结构清晰
  • 优化更充分,有利于移植

编译程序的生成

  • 以汇编语言和机器语言为工具
  • 优势: 能够针对具体的机器,充分发挥计算机的系统
    功能;生成的程序效率高
  • 缺点: 程序难读、难写、易出错、难维护、生产的效
    率低
  • 高级语言书写
  • 程序易读、易理解、容易维护、生产的效率高
  • 利用已有的某种语言的编译程序实现另外一语言的编
    译程序
  • 移植方法
  • 把一种机器上的编译程序移植到另外一种机器上
  • 自编译方式
  • 编译程序自动产生
  • 编译程序-编译程序,编译程序产生器,编译程序书
    写系统
  • LEX:词法分析程序产生器
  • YACC:语法分析程序产生器
相关文章
相关标签/搜索