第一章绪论
程序设计语言和编译程序
- 计算机所能执行的每一种操作对应为一条指令,计算机能够执行的全部指令集合就叫做指令系统。
- 由0和1编码的二进制指令集合称为机器语言,计算机唯一能是直接识别的语言;用助记符代替二进制编码的另一种语言叫汇编语言。
- 机器语言和汇编语言都是面向机器的故统称低级语言,而c,java这类面向应用的语言称为高级语言。
- 编译程序:能够将用高级语言编写的源程序转换为与之在逻辑上等价的低级语言形式的目标程序。
- 一个高级语言的执行包括两个阶段,即编译阶段和运行阶段。
- 高级语言也可以由解释程序来执行。
- 编译程序和解释程序的区别:编译程序将源程序翻译成目标程序后再执行,而解释程序是逐句解释并执行,不生成目标程序。
- 整个编译过程可以分为五个阶段:词法分析阶段,语法分析阶段,语义分析和中间代码生成阶段,优化阶段和目标代码生成阶段。
- 编译程序结构示意
- 编译程序的开发应具有的知识
- 深刻理解被编译语言的结构(语法)和含义
- 深刻了解目标机器的硬件和指令系统
- 熟练掌握编译方法
第二章 词法分析
-
词法分析简述
-
单词符号分类:保留字(关键字),标识符,常数,运算符和界符。
-
单词符号的输出形式(单词种别,单词自身的值)
-
在词法分析中用状态转换图来识别单词。用程序实现状态转换图的办法是让每一个状态对应一小段程序。
-
状态转换图:有限的有向图,结点代表状态,用圆圈表示;结点之间可以由有向边连接,有向边上可标记字符。状态数是有限的,其中必有一初始状态以及若干终止状态,终止状态的结点用双圈表示。
-
状态转换图的形式化表达方式叫做正规表达式。它可以表示单词符号的结构,从而精确定义单词符号集。正规表达式简称正规式,它表示的集合即为正规集。
-
如程序语言的标识符是以字母开头的字母数字串,用正规式表达为
letter(letter|digit)*
letter和(letter|digit)并置(省略了 · 表示连接)表示两者的连接,|(或)表示letter|digit二选一,
-
有限自动机是更一般化的状态转换图,它分为确定有限自动机DFA和非确定有限自动机NFA两种。
-
NFA和DFA的区别主要有两点:初态数量和函数关系。NFA可以有若干初态,DFA只有一个。NFA的状态转换函数是多值函数而DFA是单值函数。
-
状态转换图和状态转换矩阵(必学)书上19页
-
正规表达式到有限自动机的构造(必学)
-
NFA的确定化(必学)书20页:指对给定的NFAM,构造与之等价的DFAM.
-
DFA化简
第三章 语法分析
文法和语言
- 语法分析的方法分为两类,即自顶向下分析法和自底向上分析法
- 自顶向下分析法:从文法开始符出发,根据文法规则进行推导,最终推导出给定的句子。
- 自底向上分析法:从给定的输入串开始,根据文法规则逐步进行归约,直到归约到文法的开始符为止。
- 语言:字母表上所有字符串组成的集合的任意一个子集
- 文法由终结符号集Vt,非终结符号集Vn,文法开始符和产生式的非空有限集。
- 句型(包含句子),句子是终结符组合产生的符号串。
句子一定是句型,句型不一定是句子。
7. 正规表达式到上下文无关文法的转换
推导与语法树
-
规范推导:所给句子i+i*i推导序列中的每一步推导都是对句型中的最右非终结符用相应产生式的右部进行替换,这样的推导称为最右推导;若每一步推导都是对句型的最左非终结符用相应产生式的右部进行替换则称为最左推导。规范推导的逆过程便是规范归约。
-
语法树
在构造语法树时,一个句型的最左推导或最右推导只决定先生长左子树还是右子树,句型推导结束时语法树生成。 -
短语:句型的组成部分(子树的叶子结点组成的符号串是所在子树根的短语)
-
直接短语:叶子结点组成的符号串
-
句柄:一个句型的最左直接短语称为该句型的句柄(最左简单子树的叶子结点组成的符号串)
-
素短语:含有终结符的短语,且在该子树中不再有含有终结符的更小子树。
-
文法的二义性:文法G[s]的一个句子如果能找到两种不同的最左或最右推导,或存在两棵不同的语法树,则称这个句子具有二义性。
-
自顶向下分析法:从文法的开始符号出发并寻找这样一个推导序列,推导出的句子恰为输入符号串。
-
确定的自顶向下分析法要求文法满足下述两个条件
- 文法不包含左递归,即不存在这样的非终结符A→A…
- 无回溯,产生式右部候选式首字符要保持不同。
第四章 语义分析和中间代码的生成
引入:一个源程序通过词法分析和语法分析的审查和处理,表明该源程序在书写上是正确的,符合程序语言所规定的语法。但是语法分析并未对程序内部的逻辑含义加以分析,因此编译程序需要进行语义分析。
第五章 代码优化
第六章 目标代码生成