【编译原理】编译原理概述——基本知识要点汇总

halo~我是bay_Tong桐小白
本文内容是桐小白个人对所学知识进行的总结和分享,知识点会不定期进行编辑更新和完善,了解最近更新内容可参看更新日志,欢迎各位大神留言、指点

【更新日志】

最近更新:

  • 更新内容——课程研究内容先导(2021.6.14)
  • 持续更新中……
结构导图

在这里插入图片描述

课程研究内容先导

在这里插入图片描述
在这里插入图片描述
显然这个故事很悲伤……
在这里插入图片描述
在这里插入图片描述
因此,人们需要想办法解决类似这样的问题
在这里插入图片描述
其中的相互转换就是编译原理乃至所有语言处理程序所需要研究的内容
在这里插入图片描述
【更多相关易混概念区分详细见 专业基础专栏 文章《计算机语言处理相关知识要点区分汇总》

翻译程序、编译程序、解释程序、汇编程序

翻译程序: 将一种计算机编程语言所编写的程序(源程序)翻译成与之等价的另外一种计算机语言的程序(目标程序),完成这个翻译工作的程序称为翻译程序。编译程序、解释程序、汇编程序均被认为是翻译程序

在这里插入图片描述
编译程序: 源程序语言是高级语言,目标程序语言是汇编语言或机器语言之类的低级语言,这样的翻译程序称为编译程序
在这里插入图片描述
解释程序: 在词法、语法、语义分析方面与编译程序的工作原理基本相同,但在执行过程中不产生目标程序,而是直接解释执行源程序或源程序的内部形式(中间代码),即边解释边执行
在这里插入图片描述

汇编程序: 源程序语言是汇编语言,输出目标程序语言是机器语言,这样的翻译程序称为汇编程序
在这里插入图片描述
通常目标程序文件仍不能被CPU直接执行,需要通过链接程序进行连接后才可生成可执行程序.EXE。现代编译器通常包含以下的主要工作流程:
在这里插入图片描述


在这里插入图片描述
编译原理学科主要研究的即是编译程序的相关知识内容

汇编更多基础概念及相关知识内容详细见 《微机原理与接口技术》 专栏

编译过程及编译程序的基本结构

编译过程主要分为五个阶段(词法分析、语法分析、语义分析及中间代码生成、代码优化、目标代码生成),五个阶段的任务分别由五个程序完成

词法分析概述

该阶段任务是对构成源程序的字符串从左到右进行扫描和分解,根据语言的词法规则识别出一个个具有独立意义的单词,确定单词的类型,将识别出的单词转换成统一的机内表示——词法单元(token)形式。完成该任务的程序为词法分析程序

【简单说,即进行词法分类】以两行C语言代码为例
在这里插入图片描述
token:< 种别码,属性值 >
在这里插入图片描述
举一个例子:
在这里插入图片描述

语法分析概述

该阶段任务是在词法分析的基础上,根据语言的语法规则从词法分析器输出的token序列中识别出各类短语,并构造语法分析树。完成该任务的程序为语法分析程序

【简单说,即进行语法结构的分析构造。如 变量 = 表达式 构成一个赋值语句】
在这里插入图片描述

语义分析及中间代码生成概述

首先对每种语法单位进行静态的语义审查,然后分析其含义,并用另一种语言形式(比源语言更接近于目标语言的一种中间代码或直接用目标语言)来描述这种语义。完成该任务的程序为语义分析及中间代码生成程序

【简单说,即进行语义审查、生成中间代码】

语义分析的主要任务:

1)收集标识符的属性信息

  • 种属:简单变量、复合变量(数组……)、过程……
  • 类型:整型、实型、字符型、布尔型、指针型……
  • 存储位置、长度
  • 作用域
  • 参数和返回值信息:参数个数、参数类型、参数传递方式、返回值类型……

2)语义检查

在这里插入图片描述
常用的中间表示形式:三地址码(由类似于汇编语言的指令序列组成,可表示成四元式、三元式、间接三元式)、语法结构树(简称语法树)【PS:语法结构树不同于语法分析树】

代码优化概述

对前阶段产生的中间代码进行等价变换或改造,以期获得更为高效(省时间省空间)的目标代码。完成该任务的程序为代码优化程序

优化主要包括局部优化和循环优化,使其运行得更快一些,或占用空间更少一些,或二者兼顾

目标代码生成概述

将中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。目标代码生成的一个重要任务是为程序中使用的变量合理分配寄存器

【简单说,即由优化的中间代码转换生成目标代码】

表格管理和错误处理

在编译程序的各个阶段中,都涉及表格管理【记录源程序所使用的变量名、属性等各种相关信息】和错误处理【差错并准确报告错误的种类及出错位置】,分别由表格管理程序和错误处理程序完成

以上为一个典型的编译程序的主要组成部分,结构框图如下:
在这里插入图片描述
编译前端与编译后端:
在这里插入图片描述
优点:程序逻辑结构清晰;优化更充分

PS:编译过程中几个相邻,有联系的阶段的工作可以一起进行,如语法分析进行句子结构分析的同时结合语义规则直接进行语义分析,这一技术称为语法制导翻译

编译程序的生成方法

生成一个编译程序一般要考虑以下几个方面:

  • 对源语言和目标语言认真分析
  • 设计编译算法
  • 选择语言编制程序
  • 调试编译程序
  • 提交相关文档资料

持续更新中……
我是桐小白,一个摸爬滚打的计算机小白


版权声明:本文为bay_Tong原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>