《编译原理》第一章

动态 0 277

摘要:

引论:

编译程序:编译程序是指能够把某一种语言程序(源程序)转换成另一种语言程序(目标程序)的程序,前者后者在逻辑上是等价的。

编译程序根据侧重点与用途的不同可以分为:

1.诊断编译程序(主要用于调试开发)

2.优化编译程序(提高代码效率);

 


语言程序的编译过程:

1. 识别出句子中的一个个单词(词法分析)

2. 分析句子的语法结构(语法分析)

3. 根据句子的含义进行初步的翻译(语义与中间代码生成)

4. 对译文进行修饰(优化代码,提高效率)

5. 写出最后的译文(目标代码生成)

大多编译程序都会有这五个步骤,但是也有的对部分没有着重要求的比如不去优化代码,没有中间代码等等。

 

编译程序的结构

 

词法分析器,又称扫描器,输入源程序,进行词法分析,输出单词符号

语法分析器,简称分析器,对单词符号进行语法分析(根据语法规则进行推到,或者进行规约),识别出各类语法单位,最终判断输入字符串是否构成语法上正确的程序。

语义分析与中间代码产生器:按照语义规则对语法分析器进行规约出(或者推导出)语法单位进行语义分析并把他们翻译成一定形式的中间代码。

优化器,对中间代码进行优化处理

目标代码生成器,把中间代码生成目标程序。

 除了上述五个功能模块以外,完整的编译程序还包括‘表格管理’和‘出错管理’。

表格与表格管理:

表格:符号表(关键字,变量,常量,过程名等),表格管理就是对符号表的管理

 

出错处理:

编译程序执行的每一个阶段都有可能出现错误,例如语法错误语义错误。

出错处理就是要把语法或者词法错误检测出来。词法错误:例如括号不匹配,缺少分号之类的错误。语法错误:例如说明错误,作用域错误,类型不匹配等

 


编译的前端与后端:

前端:

主要是由与语言有关但与目标机器无关的那些部分组成。通常这些部分包括词法分析,语法分析,语义分析,与中间代码产生,有的代码优化也在前端。

后端:
后端包括与目标机器有关的那些部分,例如目标机器的代码优化和目标代码生成等,通常,后端不依赖源语言而依赖中间语言。


回帖
  • 消灭零回复
您没有登录请点击登录