编译原理(1)——编译原理引论

目录

计算机语言发展

码文不易,希望支持,谢谢->支持原创

 机器语言 machine language

机器语言(machine language)是一种指令集的体系。这种指令集称为机器码(machine code),是电脑的CPU可直接解读的数据。维基——机器语言

 汇编语言 assemble language

汇编语言(英语:assembly language)[注 1][1]是一种用于电子计算机、微处理器、微控制器,或其他可编程器件的低级语言。在不同的设备中,汇编语言对应着不同的机器语言指令集。一种汇编语言专用于某种计算机系统结构,而不像许多高级语言,可以在不同系统平台之间移植。维基——汇编语言

 高级语言 high level language

语句定义数据 描述算法
维基——高级语言

高级语言分类

 命令式语言 imperative language

指令式编程(英语:Imperative programming),是一种描述电脑所需作出的行为的编程典范。几乎所有电脑的硬件工作都是指令式的;几乎所有电脑的硬件都是设计来运行机器码,使用指令式的风格来写的。较高级的指令式编程语言使用变量和更复杂的语句,但仍依从相同的典范。菜谱和行动清单,虽非计算机程序,但与指令式编程有相似的风格:每步都是指令,有形的世界控制情况。因为指令式编程的基础观念,不但概念上比较熟悉,而且较容易具体表现于硬件,所以大部分的编程语言都是指令式的。维基——命令式编程

 函数(应用)式语言

函數式編程(英語:functional programming)或稱函式程式設計,又稱泛函編程,是一種編程典範,它將電腦運算視為數學上的函式計算,並且避免使用程式狀態以及易變物件。函數程式語言最重要的基礎是λ演算(lambda calculus)。而且λ演算的函式可以接受函式當作輸入(引數)和輸出(傳出值)。维基——函數程式語言

 逻辑式语言

 面向对象式语言

物件導向程式設計(英語:Object-oriented programming,縮寫:OOP)是種具有物件概念的程式編程典範,同時也是一種程式開發的抽象方針。它可能包含資料、屬性、程式碼與方法。物件則指的是類別的例項。它將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充功能性,物件裡的程式可以存取及經常修改物件相關連的資料。在物件導向程式編程裡,電腦程式會被設計成彼此相關的物件。维基——面向对象程序设计

翻译系统

 翻译程序 Translator

翻译程序

 解释程序 Interpreter

解释程序

 编译程序 compiler

编译程序

 其他

  • 诊断编译
  • 优化编译
  • 交叉编译
  • 可变目标
  • 并行编译
  • 汇编程序
  • 交叉汇编
  • 反汇编

编译系统功能分析

编译器(compiler),是一种计算机程序,它会将用某种编程语言写成的源代码(原始语言),转换成另一种编程语言(目标语言)。 维基——编译器

 分析

词法、语法、语义

 翻译

语句的翻译、代码生成

编译程序总体结构

编译程序总体结构

码文不易,希望支持,谢谢->支持原创

 1.词法分析

  词法分析(英语:lexical analysis)是计算机科学中将字符序列转换为标记(token)序列的过程。进行词法分析的程序或者函数叫作词法分析器(lexical analyzer,简称lexer),也叫扫描器(scanner)。词法分析器——维基百科
- 输入:字符串
- 输出:(种别码,属性值)——序对属性值——token的机内表示

 2.语法分析

  语法分析(英语:syntactic analysis,也叫 parsing)是根据某种给定的形式文法对由单词序列(如英语单词序列)构成的输入文本进行分析并确定其语法结构的一种过程。语法分析——维基百科

  • 输入:Token序列
  • 输出:语法成分

 3.语义分析

  语义分析是编译过程的一个逻辑阶段, 语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查,进行类型审查。语义分析——百度百科

 4.中间代码生成 intermediate code

  中间代码生成是产生中间代码的过程。所谓“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统复杂性介于源程序语言和机器语言之间,容易将它翻译成目标代码。中间代码生成——百度百科

  • 输入:语法成分
  • 输出:中间代码

扩展阅读 波兰表达式和逆波兰表达式

 5.代码优化

  所谓代码优化是指对程序代码进行等价(指不改变程序的运行结果)变换。代码优化——百度百科

  对中间代码的优化处理:对代码进行等价变换以求提高执行效率——提高运行速度和节省存储空间。

  与机器无关的优化
  1. 局部优化

    • 常量合并:常数运算在编译期间完成,如8+5
    • 公共子表达式的提取:基本块内
  2. 循环优化

    • 强度削减
    • 代码外提

  与机器有关的优化
  1. 寄存器的利用
    将常用量放入寄存器,以减少访问内存的次数
  2. 体系结构
    MIMD、SIMD、SPMD、向量机、流水机

  3. 存储策略
    根据算法访存的要求安排:Cache、并行存储体系——减少访问冲突

  4. 任务划分
    按运行的算法即体系结构,划分子任务(MPMD)


  • 输入:中间代码
  • 输出:优化过的中间代码

 6.目标代码生成

  将中间代码转换成目标机上的机器指令代码或汇编代码

  • 输入:中间代码
  • 输出:指令代码或汇编代码

 7.表格管理

  管理各种符号表(常数、标号、变量、过程、结构……)

 8.错误处理

  进行各种错误的检查、报告、纠正,以及相应的续编译处理(如:错误的定位与局部化)

编译程序的生成

  如何实现编译器?

在另一篇中作了较为详细的讲解,可以前往阅读。编译程序的生成

打赏作者

码文不易,希望支持,谢谢->支持原创

微信支付微信支付

再次感谢,大家对本人的支持。

本文引用

1.维基——机器语言
2.维基——汇编语言
3.维基——高级语言
4.维基——命令式编程
5.维基——函數程式語言
6.维基——面向对象程序设计
7. 维基——编译器
8. 词法分析器——维基百科
9. 语法分析——维基百科
10. 语义分析——百度百科
11. 中间代码生成——百度百科
12. 代码优化——百度百科

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值