编译原理第一章

1.1程序设计语言和编译程序

1、汇编语言:用机器语言编写程序不方便且容易出错,编写出来的程序也难以调试、阅读和交流,为此出现了用助记符代替机器语言的另一种语言,这就是汇编语言。

2、汇编程序:由于计算机不能直接识别这种符号化语言,用汇编语言编写的程序必须翻译成机器语言才能执行,这种“翻译”是通过专门的软件——汇编程序实现的。

3、汇编语言和机器语言一样都是面向机器的,它们都成为低级语言;而高级语言是面向应用的语言。

4、一个高级语言的执行分为编译阶段和运行阶段。 

编译阶段是将源程序转变为目标程序。

即:源程序(高级语言)————编译程序————目标程序(机器语言)

运行阶段是将目标程序连同运行系统接收程序的初始数据作为输入,运行后输出计算结果。

即:初始数据——目标程序——计算结果

如编译生成的目标程序是汇编语言形式,则在编译阶段和运行阶段中间要添加汇编阶段,它将生成的汇编语言目标程序经过汇编程序变成机器语言目标程序。

即:源程序(高级语言)——编译程序———目标程序(汇编语言)——汇编程序——目标程序(机器语言)——计算结果

5、汇编程序:是把汇编指令转换为可执行的机器语言;

     编译程序:把高级编程语言(如Java、C#)编写的程序转换为与之在逻辑上等价的低级语言形式的目标程序。

     解释程序:逐条读出源程序中的语句并解释执行,即在解释程序的执行过程中并不产生目标程序。如Basic语言。

1.2编译过程和编译程序结构

一、编译程序的工作过程:从输入源程序开始到输入目标程序为止的整个过程。可划分为以下五个阶段:词法分析、语法分析、语义分析和中间代码生成、优化、目标代码生成。

1、词法分析:将源程序中的字符串变换成单词符号流

     遵循规则——语言的构词规则

2、语法分析:在词法分析的基础上,根据语法规则把单词符号流分解成各类语法单位。通过语法分析可以确定整个输入串是否构成一个语法上正确的“程序”。

遵循规则——语言的语法规则

3、语义分析和中间代码生成:是对各类不同语法范畴按语言的语义进行初步翻译,其包含两个方面的工作:

  • 对每种语法范畴进行静态语义检查
  • 在语义检查正确的情况下进行中间代码翻译

      中间代码 :是介于高级语言的语句和低级语言的指令之间的一种独立于具体硬件的记号系统。常见的中间代码有四元式、三元式、间接三元式和逆波兰记号等。

遵循规则——语言的语义规则

4、优化:对前阶段产生的中间代码进行等价变换或改造bhb,以获得更高效的目标代码。

      常见措施:删除冗余运算、删除无用赋值、合并已知量、循环优化

遵循规则——程序的等价变换规则

5、目标代码生成:把中间代码变换成特定机器上的机器语言程序或汇编语言程序,实现最终的翻译工作。

最后的阶段十分依赖硬件系统,即如何利用现有寄存去,合理地选择指令,生成短而有效的代码。

二、表格管理和出错处理

1、编译过程中源程序的各种信息被保留在不同的表格里,编译过程的绝大部分时间都用在造表、查表和更新表格的事物上,因此编译程序中包括一个表格 管理程序。

2、出错处理与编译的各个阶段都有联系,与前三个阶段的联系尤为密切。

1.3编译程序的开发

编译程序的开发常常采用自编译、交叉编译、自展和移植等技术实现。

1、自编译:用某种高级语言编写自己的编译程序。

2、交叉编译:用A机器上的编译程序来产生可在B机器上运行的目标代码。

3、自展

4、移植:A机器上某种高级语言的编译程序稍加改造后能够在B机器上运行,则该程序是可移植的。

1.4构造编译程序所应具备的知识内容

1、对被编译的源语言,要深刻理解其结构语法和含义

2、对目标机器的硬件和指令系统有深刻了解

3、必须熟练掌握编译方法

 

你可能感兴趣的:(编译原理)