第一章 引论
1、关于编译过程概述
一般划分为5个阶段:词法分析、语法分析、语义分析与中间代码产生、优化、目标代码生成
2、编译程序的结构
把源语言程序转换成另一种语言程序,两者在逻辑上等价,这样的一个程序称为编译程序
第二章 高级语言及其语法描述
1、程序语言主要由语法和语义两个方面定义
2、语义是指一组规则,使用它可以定义一个程序的意义
3、高级语言的分类
- 强制式语言(过程式语言)
- 应用式语言(函数式语言)
- 基于规则的语言
- 面向对象的语言
4、程序语言的语法描述
几个概念: 设∑是一个有穷字母表,每一个元素称为一个符号。∑上的一个符号串是指由∑中的符号构成的一个有穷序列。不包含任何符号的序列称为空字ℇ。∑*表示∑上所有符号串的全体。∑*的子集U和V的(连接)积定义为
UV = {ab|a∈U&b∈V} (一般 UV≠VU)
规定V⁰ = {ℇ}
称V*是V的闭包
V* = V0 U V1 U V2 U V3…
V+ = VV*称为V的正则闭包
4—1、上下文无关文法
文法是描述语言的语法结构的形式规则
所谓上下文无关文法是所定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境的。因此上下文无关文法是不适合描述任何自然语言。
一个上下文无关文法G包括四个组成: 一组终结符号、一组非终结符号、一个开始符号、以及一组产生式。
G(VT,VN,S,P)
- 终结符号(VT)是组成语言的基本符号,在程序语言中就是单词符号如基本字、标识符、常数等。 从语法分析的角度看是一个语言不可再分的基本符号
- 非终结符号(VN)(也称语法变量)用来代表语法范畴,例如“算术表达式”、“赋值语句”等。因此它不是一个个体符号,代表一个一定的语法概念,也可以说 每个非终结符号表示一定的符号串集合(由终结符号和非终结符号组成的符号串)
- 开始符号(S) 是一个特殊的非终结符号 ,它代表所定义的语言中“ 句子”这个语法范畴
- 产生式 (P) 是定义语法范畴的一种书写规则
文法G所产生的句子的全体是一个语言将它记为L(G),
4–2语法分析树与二义性
用一张图来表示一个句型的推导这种表示称为语法分析树
如果一个文法存在某个句子对应两颗不同的语法书则称这个文法是二义的
对文法的几点限制:
1. 文法中不含任何 P->P i=形式的产生式,因为这种产生式除了引起二义性外没有任何用处
2. 每个非终结符P必须有用处
4–3 形式语言鸟瞰
乔姆斯基把文法分成4种类型 0型、1型、2型、3型 。 0型强于1型,1型强于2型,2型强于3型。这几类文法的差别在于对产生式施加不同的限制。
0型文法也称短语文法。
如果对0型文法分别施加以下第i条限制,则我们就得i型文法
(1)G的任何产生式a->b均满足 |a| ⩽ |b| (代表a、b的长度);仅仅S->ℇ例外,但S不得出现在任何产生式的右部。
(2)G的任何产生式为A->b,A∈VN,b∈(VNUVT)*
(3) G的任何产生式为A->aB 或 A->a,其中a∈(VT)*,A、B∈VN
1型文法也称上下文有关文法
2型文法称上下文无关文法
3型文法等价于正规式,也称正规文法
(1)课后题:大部分做了 一些也是参考着答案做的
(2)这部分学习后感觉是有些模糊,只是在大体上了解了文法的情况,其中的概念是感觉有时候弄不清糊具体的情况,