Arya

01&02
[+] 没有买到喜欢的帽子,自闭了 QAQ0x01 第一课  主要概述了编译器(compiler)和解释器(int...
扫描右侧二维码阅读全文
18
2019/01

01&02

[+] 没有买到喜欢的帽子,自闭了 QAQ

0x01 第一课

  主要概述了编译器(compiler)解释器(interpreter)
  因为老师是英文授课,所以就我就简单的解释一下

编译器:源代码->预处理器->编译器->目标程序,最终可以生成可执行文件,对输入的数据可以直接执行,而且不需要再次编译;是将源代码整个编译成目标代码,执行速度较慢:off-line(当时考研考机组的时候专门学过这些知识,可以直接理解为机器语言经过编译生成目标代码,再经过链接可以生成exe文件)
Image.png

解释器:执行前不做任何处理,把高级编程语言一行一行直接转义运行,执行速度比较缓慢
类似于一个中间人:on-line
Image1-2.png
之后简单的介绍了一些历史,可以听听,
因为现代的大多数自动编译器依然保留了FORTRANⅠ的一些轮廓,也可以理解为结构与 FORTRANⅠ类似,所以最后介绍了一下FORTRAN

Fortarn(公式翻译, FormulaTranslation 的缩写),也是第一种高级编程语言
FORTRAN的结构:1.Lexical Analysis(词法分析)
                       2.Parsing(句法分析)
                      (1和2主要关心的是语言的句法方面)
                       3.Semantic Analysis(语义分析)
                      (主要关心的是语言的语义方面,类似于类型和范围)
                       4.Optimization(优化)
                      (提高运行的速度,节省存储空间等)
                       5.Code Generation(代码生成)

0x02 第二课

编译器的结构:
  1.Lexical Analysis(词法分析)
  2.Parsing(句法分析)
   3.Semantic Analysis(语义分析)
   4.Optimization(优化)
     5.Code Generation(代码生成)

 编译器理解程序的步骤,类似于人理解一句话的步骤

eg. This is a sentence.

  1.词法分析:
            理解单词,将一句话拆分成每个单词,识别出里面的空格和标点符号
            词法分析的目的就是为了将程序拆分成每个小片段(token):变量,符号等,类似于我们将句子拆分成每个单词一样,去理解每个单词。

  2.句法分析:
            第一步)理解一句话的结构,识别出每个单词在句子中的词性(n. , adj.,)
            第二步)找到主语,谓语,宾语等,识别句子的语法构成        
Image1-3.png

句法分析一段代码也是如此步骤,
Image1-4.png

3.语义分析:
           编译器编译器执行有限的语义分析以捕获不一致,如果程序本身表达含义不清,编译器就会注意到并进行报错提示。
                这里举了一个例子:
                在英语中,
                        A said B left his assignment at home.
                我们并不能知道这里的his指的是A还是B,会引歧义。
               
                在中文中:
                        路明非和芬格尔一起出门,结果他丢了他的钥匙。
                我们不能得知这个他是谁

          所以程序一般会有严格的定义结构,以避免这样的歧义出现,且通过某些方式,如括号来区分每个变量的执行范围,不至于出现歧义
Image1-4.png

 除了变量绑定之外,编译器还执行许多语义检查,比如类型定义是否正确,用c语言举例比较方便

int i='a';//将i定义为int型,但赋值给i的是'a',编译器会报错
int i=1; //正确运行

4.优化
    但是要注意一点,在优化的过程中,要注意不同变量定义的类型是否一致等类似的问题
    例如

X=Y*0 可以等同于 X=0

但是,当定义为 float X,类型不一致则为非法输入
或者X=NAN时则会报错,因为NAN*0=NAN
此时X=Y*0则不等同于X=0

Image1-6.png

5.代码生成:
        将高级语言程序转为汇编代码

Last modification:January 23rd, 2019 at 07:48 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment