一、遍
- 遍:对源程序或源程序的中间结果从头到尾扫描一次,并做有关的加工处理,生成新的中间结果或目标代码的过程。
- 注:遍与阶段毫无关系。 遍与阶段的关系可以是,一遍覆盖了若干个阶段,也可以是一个阶段分好几遍去扫描。
- 多遍扫描:
- 优点;节省内存空间,提高目标代码的质量,使编译的逻辑结构清晰。
- 缺点:编译时间较长。
- 注:在内存许可的情况下,遍还是少一些好 🍊:下面看一个简单的例子:(源程序经过一遍扫描,生成目标代码,以语法分析为中心)
二、编译程序的生成
-
直接用机器语言编写编译程序
-
用汇编语言编写编译程序
- 注:编译语言的核心部分常用汇编语言编写
-
用高级语言编写编译程序
注:这是普遍采用的方法 -
自编译
-
编译工具:LEX与YACC
-
移植:(同种语言的编译程序在不同类型的机器之间移植)
三、编译程序的构造:
- 在某些方面上为某种语言构造编译程序要掌握以下三方面;
- 源语言
- 目标语言
- 编译方法
第二章: 编译基础知识
一、高级语言:
程序语言是一个记号系统
-
语法
-
语义
二、语法:
- 任何语言程序都可以看成是一定字符集(字母表)上的字符串
- 语法使得这串字符形成一个形式上正确的程序
- 语法=词法规则+语法规则
-
单词符号:语言中具有独立意义的基本结构。
-
词法规则:
- 规定了哪些字符串是单词符号。
- 单词符号一般包括:常数、标识符、基本字、算符、界限符等等。
- 用正规式和有限自动机理论来描述词法结构和进行词法分析。
-
语法单位:表达式、子句、语句、函数、过程、程序
-
语法规则:
- 规定了如何从单词符号来形成语法单位。
- 现在多数程序语言使用上下文无关文法来描述语法规则。
- 语言的词法规则和语法规则定义了程序的形式结构,是判断输入字符是否构成一个形式上正确的程序的依据。
三、语义:(了解)
- 对于一个语言来说,不仅要给出词法、语法规则,而且要定义它的单词符号和语法单位的意义。
- 离开语义,语言只是一堆符号的集合。
- 各种语言中有形式上完全相同的语法单位,含义却不同。
- 对某种语言,可以定义一个程序意义的一组规则称为语义规则。
- 目前大多数编程序使用基于属性文法的语法指导翻译方法来分析语义。
2.1 字母表与符号串:
一、相关概念:
-
字母表:
-
是符号的非空有穷集合
-
用 ∑ \sum ∑
和V表示
-
-
符号:是语言中最基本的不可再分的单位。
-
符号串:
- 符号串是字母表中符号组成的有穷数列。
- 空串:不含邮任何符号的串称作空串,
- 记作 ε \varepsilon ε
-
句子:字母表上符合某种规则构成的串
-
字母表上句子的集合。
二、符号串集合的运算: