总览

编译程序结构

编译阶段组合

  • 前后端
    • 前端: 仅依赖于源程序而与机器硬件无关的阶段组成前端
    • 后端: 与机器硬件相关的阶段组成后端
  • 遍(躺)
    • 从头到尾扫描一遍称为遍
    • 每遍完成编译的相应阶段的任务

各阶段分析

词法分析

单词是字母组成的有具体含义的最小成分,词法分析即从输入串中划分出一系列的单词,其特性如下

  • 无歧义
  • 有顺序
  • 有限性
  • 空格为特殊单词,为单词分隔符
  • 句点为特殊单词,为句子结束标志

单词一般包括五种类型

  • 常数
  • 保留字
  • 标识符
  • 运算符
  • 界符

词法分析的自动构造工具: lex

描述工具: 有限自动机

语法分析

功能:层次分析。依据源程序的语法规则把源程序的单词序列组成语法短语(表示成语法树)。

使用上下文无关语法进行分析.

语法分析的自动生成工具: YACC

描述工具: 上下文无关语法

语义分析

语义审查

  • 上下文相关性检查(是否声明等)
  • 类型匹配
  • 类型转换

补充

编译方法

  • 交叉编译
  • 自编译

标识符是语法概念,名字是语义概念

课后作业

  1. 解释下列术语:编译程序,源程序,目标程序,编译程序的前端、后端和遍

答:

  • 编译程序:把用高级程序设计语言书写的源程序,翻译成等价的计算杋汇编语言或机器语言书写的目标程序的翻译程序。
  • 源程疗:是指未经编译的,按照一定的程序设计语言规范书与的,人类可读的文本文件。
  • 目标程序:为源程序经编译可自接被计算机运行的机器码集合,在计算机文件上以.obj作扩展名
  • 编译程序的前端通常:词法分析、语法分析、语义分析等生成最终代杩以前的一系列步骤
  • 后端:代码优化和目标代码生成部分
  • 遍:对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程
  1. 编译程序有哪些主要构成成分?各自的主要功能是什么?

答: 编译程序的主要构成成分有:词法分析程序、语法分析程序、语乂分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、表格管理程序及岀错处理程序.各自功能如下所示:
(1)词法分析程序:从左到右扫描源程序,识别单词及其有关属性;
(2)语法分析程序:分析源程序的结构,判别它是否为相应程序设计语言中的一个合法程序;
(3)语义分析程序:审查源程序有无语义错误,为代码生成阶段收集类型信息;
(4)中间代码生成程序:将源程序变成一种内部表示形式;
(5)代码优化程序:对前阶段产生的中间代码进行变换或进行改造,使生成的目标代码更为高效
(6)目标代码生成程序:把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码;
(7)表格管理程序:保存编译过程中的各种信息;
(8)岀错处理程序:若编译过程中发现源程序存在错误,则报告错误的性质和错误发生的地点,有些还可以自动校正错误

  1. 什么是解释程序?它与编译程序的主要不同是什么?

答: 解释程序接受某个语言的程序并立即运行这个源程序。它的工作模式是一个个的获取分析并执行源程序语句,一旦第一个语句分析结束,源程序便开始运行并且生成结果,它特别适合程序员交互方式的工作情况而编译程序是一个语言处理程序,它把一个高级语言程序翻译成某个机器的汇编或二进制代码程序,这个二进制代码程序再机器上运行以生成结果。
它们的主要不同在于:解释程序是边解释边执行,解释程序运行结束即可得到该程序的运行结果,而编译程序只是把源程序翻译成汇编或者二进制程序,这个程序再执行才能得到程序的运行结果。(当然还有其他不同,比如存储组织方式不同)

  1. 对下列错误信息,请指岀可能是编译的哪个阶段(词法分析、语法分析、语义分析、代码生成)报告的。

(1)else没有匹配的if
(2)数组下标越界
(3)使用的函数没有定义
(4)在数中出现非数字字符

答:
(1) 语法分析
(2) 语义分析
(3) 语法分析
(4) 词法分析

参考


我很好奇