编译原理第二章总结
2018-03-16 23:00
288 查看
1.语法的三要素
字母表、单词符号、语法单位。
2.语义、语法的概念以及描述方法
语义:一组规则,使用它可以定义一个程序的意义。
描述方法:属性文法和基于属性文法的语法制导翻译方法。
语法:一组规则,用这组规则可以产生形式上正确的程序。包括语法规则和词法规则。
描述方法:上下文无关文法
3.数据类型的三要素
a.用于区别这种类型的数据对象的属性
b.这种类型的数据对象可以具有的值
c.可以作用于这种类型数据对象的操作
4.符号串级符号串集合的运算
a.基本概念
字母表:由若干元素组成的有限非空集合,用∑表示,它的每个元素称为一个符号。
符号串: 由∑中的符号所构成的有穷序列。
符号串的前缀和后缀及子串:设x是一个符号串,将x的尾(前)部删掉几个字符后形成的符号串,称为x的前(后)缀;从一个符号串中删去他的一个前缀和后缀后所剩下部分称为x的子串。
空字:不包含符号的序列称为空字,记为ε。
b.运算
连接:将两个符号串拼接起来。
方幂:一个符号串与其自身的n-1的任意连接称为次符号串的n次幂,记作:x^n。
字符串的和:等价于集合的并运算,记作a+b或aUb,定义为aUb={w∈a或w∈b}
集合的连接: UV={αβ∣α∈U & β∈V }。
闭包:符号串集合V自身的n次(连接)积
正闭包:不包括v^0。
5.上下文无关法
文法含义:文法是描述语言的语法结构的形式规则(即语法规则)
特点:它所定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境的。即独立性。
缺点:不能用来描述自然语言
内容:一个上下文无关文法G包括四个组成部分:一组终结符号,一组非终结符,一个开始符号,以及一组产生式。
形式上定义一个上下文无关文法G是一个四元式(VT,VN,S,P)。
VT是一个非空有限集,它的每一个元素称为终结符号;
VN是一个非空有限集,它的每一个元素称为非终结符号,
VT∩VN=φ;
S是一个非终结符号,称为开始符号;
P是一个产生式(有限)集合,每个产生式形式是A→α ,其中,P∈VN, α ∈( VT∪VN)*
开始符号S至少必须在某一产生式的左部出现一次。
a.终结符号乃是组成语言的基本符号,即在程序语言中以前屡次提到的单词符号,如基本字,标识符,常数,算符和界符等.
b.非终结符号(也称语法变量)用来代表语法范畴。如 “算术表达式”、 “布尔表达式”、 “过程” 等。一个非终结符代表一个一定的语法概念。因此非终结符是一个类(或集合)记号,而不是个体记号。
c.开始符号是一个特殊的非终结符号,它代表所定义的语言中我们最感兴趣的语法范畴。
d.产生式:一种书写规则。一个产生式的形式是 A→ α,其中箭头左边的A是一个非终结符,称为产生式的左部符号;
箭头右边的α是终结符号或与非终结符号组成的一符号串,称为产生式的右部,或称候选式。
直接推导:仅当Aγ是一个产生式,有
αAβ -> αγ β
该推导称为直接推导(直接导出)
推导的描述形式:
![](//img-blog.csdn.net/20180316224256502?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L2NzZG5fa2VsbHk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
:任意次推导
![](//img-blog.csdn.net/20180316224415523?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L2NzZG5fa2VsbHk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
:至少一次推导
6.最左最右推导
最左(最右)推导:在推导的任何一步α==>β,其中α、β是句型,都是对α中的最左(右)非终结符进行替换。
7.语法分析树
1)语法树的根结由开始符号所标记。
2)随着推导的展开,当某个非终结符被它的某个候选式所替换时,这个非终结符的相应结就产生了下一代新结点。每个新结点和其父亲结点间都有一条连线。
3)在一棵语法树生长过程中的任何时刻,所有那些没有后代的端末结自左至右排列起来就是一个句型。
文法 E→E+E|E*E|(E)|i, 关于(i*i+i)的推导形成语法树如图
8.文法二义性
如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。
也就是说,若一个文法存在某个句子,它有两个不同的最左(最右)推导,则这个文法是法是二义的。
9.文法二义性的几个问题
文法二义不等于语言二义
文法的二义性是不可判定的
文法的二义性证明:找出一个句子,它有两个不同的最左推导或最右推导
文法二义性的消除:给每个产生式定义优先级
10.二义性原因分析
没有定义运算符优先级和结合性
消除方法
定义优先级和结合性
引入新的非终结符,建立新的产生式
11.四种文法的比较
12.典型例题
试构造文法,该文法可以生成所有不能以0开头的偶数,
解:偶数的组成和特点:
包含符号位,
可以是一位偶数 (A)
2,4,6,8
可以是多位偶数(B)
首位不能为0,末位只能是0,2,4,6,8,中间为任意
G(Z): ESA|SB
S->+|-|
A->2|4|6|8
C->A|1|3|5|7|9
D->0|C
G->0|A
B->CFG
F->DF|D|
13.做题过程中出现的问题
1.推导的过程注意推导符号(不是单箭头)
2.最左最右推导的定义掌握的不牢,我写最左推导的过程中,先从左到右依次把非终结符转化成终结符的前一个符号,
然后再依次替换成了终结符,导致出错。
3.证明文法的二义性:找出一个句子的两棵不同的语法树即可
4.由语言到文法以及由文法到语言之间的相互转换关系。
14.心得体会:
从整体上来看,这一章的章节学习类似于英语中的认识单词到了解每个单词的意思再到总结出句意的过程。从语法到语法规则的,再到上下文无关文法,如果单个理解起来,会觉得很抽象,但是一整个章节学完,感觉通透了许多,怎么说呢,就像英文的翻译一样,心里知道是怎么回事,但是表述不出来...整章节最重要的是语法的描述这一小节,要认真理解,要知道文法是基础,句子是结果,但是如果中间过程不熟悉,是推导不出正确的句子的。
相关文章推荐
- 编译原理——第二章高级语言及其语法描述总结
- 编译原理第二章高级语言及其语法描述内容总结
- 编译原理—第二章学习总结
- 编译原理第二章总结
- 编译原理-第二章-高级语言及其语法描述总结
- 编译原理第二章总结
- 编译原理第二章学习总结
- 编译原理第二章高级语言机器语法描述总结
- 编译原理第二章高级语言及其语法描述内容总结
- 程序设计语言——编译原理 第二章总结
- 编译原理学习总结
- 命令行下JDK自带编译javac和执行java,以及环境变量的原理总结
- 编译原理-高级语言及其语法描述作业总结
- 编译原理学习总结
- 第二章 Javac编译原理
- 编译原理总结
- 编译原理第三章总结
- 编译原理第三章词法分析内容总结
- 深度探索Linux操作系统第二章:系统构建和原理解析-工具编译
- 编译原理第二章简单的一遍编译器