中国大学Mooc - 编译原理学习 - 第一讲诸论

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28788687/article/details/82502137

中国大学Mooc - 编译原理学习1

首先附上视频原链接
https://www.icourse163.org/learn/HIT-1002123007#/learn/content?type=detail&id=1004566059&cid=1005737096&replay=true
以及使用的教程地址:链接: https://pan222(取这三个2掉).baidu.com/s/1aCAXpALoGgb09f1SYHOyfA 密码: btkm

  • 什么是编译??
    ① 编译:将高级语言翻译成汇编语言或机器语言的过程.(什么叫做语言?)
    ②编译器在语言处理系统中的位置
         如图所示:
       搞清清楚这个问题的同时,我们也要搞清楚图中其他几种“部件”的作用,这是大有裨益的。
       预处理器:将储存在不同的文件中的源程序汇聚在一起。把称为宏的扩展缩写语句转化为原始语句。
       链接器:将多个重定位的机器代码,包括库文件连接到一起,解决外部内存地址问题。
       加载器:修改可重定位地址。将修改后的指令和数据放到内存中适当的位置。
       汇编器:将汇编语言翻译为机器语言的程序。(详见简要理解源程序到可执行文件
  • 编译器的结构
       这里写图片描述
       注意:因为优化是可选的,所以图中所示的两个优化步骤之一可以被省略。
       In the room,he broke the windows with a hammer.
       ①词法分析/扫描: 从左向右逐行扫描源程序的字符,识别出各个单词,确定单词的类型,并生成token(词法单元)序列。一个词法单元形如<抽象符号,属性值(指向符号表中关于这个词法单元的条目)>.详见书1.2.1节。
      ②语法分析:从生成的token序列中识别出各类短语,并构造语法分析树。实际上并不会真正生成一颗树。 
    这里写图片描述
    ③语义分析:收集标识符的属性信息(种属种类、储存位置、长度、值、作用域、参数和返回值信息),储存在符号表中;语义检查(如数组下表不为整数等)

注:这张图只是一个编译器的逻辑组织方式,实际完全可以将不同过程放在一起实现,如下位的“中间代码生成”与”语义分析“.
中间代码生成和编译器后端

①中间代码生成:生成一个明确的低级的或类机器语言的中间表示。
②代码优化:为改进代码所进行的等价程序变换,使其运行得更快,更节约空间。如int x = 5;int y = x + 2;在某些情况下会被替换为int y = 5; (实际中该工程可能会很复杂).


猜你喜欢

转载自blog.csdn.net/qq_28788687/article/details/82502137