编译原理 第一章 总论

来源:互联网 发布:网络神话的缔造者 编辑:程序博客网 时间:2024/04/30 13:48

总论:下面是自己对编译原理整个过程中所用的一些重要术语的理解

编译原理就是研究编译器的原理

编译器(compiler)是完成将程序翻译成一种能够被计算机执行的形式的软件系统,而编译原理就是编写编译器的原理。

编译器是程序:用于阅读以某一种语言编写的程序,并翻译成另一种。编译的工作是找错。

解释器:用户输入直接输出,逐个语句执行。

对比:编译器的目标程序比解释器快,解释器的错误诊断效果好。


编译器构成

预处理器(preprocessor):把程序整合到一起(转化宏)

汇编器(assembler):处理汇编语言

链接器(linker):把文件整合成一个

加载器(loader):把目标文件放到内存中

编译器结构:

分析(analysis):程序的编译过程创建中间表示,并收集有关源程序信息放到符号表(symbol table)的数据结构中,和中间表示一起给后端。(前端front end)

综合(synthesis):生成目标程序。(后端back end)



编译原理的重要过程

词法分析lexical analysis:

例:position=initial+rate*60

词素(lexeme):position->词法单元<id,1> id标识符(identifier),1指符号表中position的条目,条目存放的是标识符信息

词素:=+* 60相应映射成词法单元

词素initial->词法单元<id,2> rate->词法单元<id,3>

空格过滤。

词法单元序列:<id,1><=><id,2><+><id,3><*><60>

语法分析syntax analysis:创建树形的中间表示,表示方式为语法树(syntax tree)

语义分析器semantic analyzer:检查源程序是否和语言定义的语义一致。其中需要做类型检查(type checking)(例如+两边的变量能不能+,数组下标是不是整型),自动类型转换(coercion)

代码优化(改进中间代码):更快、更短、能耗更低,优化编译器完成此工作。

符号表:记录变量的各个属性。


编译器的目的

优化编译器的目标:正确、性能、时间、设计和维护。

软件生成率(检查错误):类型检查、边界检查、内存管理。


例子:


摘录自龙书,初学者,有理解不到位的地方欢迎指正。

0 0