编译原理第二章高级语言及其语法描述内容总结



一、学习内容

首先我们需要对高级语言有明确的定义,了解程序设计语言是建立在有限字母集之上的一个符号系统,具体如下:

(一)程序语言主要由语法和语义两方面定义

1.语法:一组规则,用这组规则可以产生形式上正确的程序。

三个基本概念包括:字母表(一个有限的字符集包括大小写英文字母,数字和特殊字符);单词符号(一般包括:常数,标识符,基本字、算符和界符);语法单位(一般包括表达式,语句,分程序,函数,程序)

2.语义:定义一个语言的单词符号和语法单位的意义,指使用它可以定义一个程序的意义的规则。

语义描述方法:属性文法和基于属性文法的语法制导翻译方法。

 

其次我们了解了不同类型的高级语言,并介绍了高级语言的一般特征:

(二)高级语言的一般特征

1.高级语言分类:

1)按照程序设计范型:强制式语言(过程式语言)、应用式语言、基于规则的语言、面向对象的语言

2)按照编译时是否需要类型检查:静态类型语言(编译确定类型)、动态类型语言(运行时确定)

3)按照类型检查强弱:弱类型语言、强类型语言

2.程序设计语言的一般特性:程序结构(支持/不支持过程的嵌套定义)、数据类型(基本数据类型、构造数据类型、自定义数据类型)与操作、语句、控制结构。

1)程序设计语言支持特定的数据类型与操作:

 一个数据类型通常包括三种要素:用于区别这种类型的数据对象的属性;这种类型的数据对象可以具有的值;可以作用于这种类型数据对象的操作。

2)数据结构(构造数据类型)

a.数组:一个数组是由同一类型数据所组成的某种n维矩形结构。每个元素占相同的存储空间

b.结构体类型/记录/类类型: 多种基本数据类型组成的新的数据类型

c.表达式:包括前缀,中缀,后缀

 

对于高级程序语言及编译程序而言,语言的语法定义是非常重要的,此处的逻辑思路需开阔,更倾向于应用:

(三)程序语言的语法描述

1.字符串集合的和(等价于集合的并运算):设AB是两个符号串的集合,则将集合AB的和记为A+BAUB,定义为:AUB={w|wÎAwÎB}

符号串集合的连接:S*的子集UV中的(连接)积定义为: UV={abaÎU & bÎV },即集合UV中的符号串是由UV的符号串连接而成的

符号串集合V自身的n次(连接)积记为:Vn = V V…V (nV),规定V0 = {e}

V的闭包:V*= V0V1V2…

V的正则包(正闭包,正则闭包):记V+ = VV*, V+V的正则包,即V+ =V1UV2UV3…

2.文法是描述语言的语法结构的形式规则(即语法规则)

1)上下文无关文法的特点:它所定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境的。包括一组终结符号,一组非终结符,一个开始符号,以及一组产生式,形式上定义一个上下文无关文法G是一个四元式(VT,VN,S,P

a.终结符号:组成语言的基本符号,即在程序语言中以前屡次提到的单词符号

b.非终结符号(也称语法变量):用来代表语法范畴

c.开始符号:一个特殊的非终结符号,它代表所定义的语言中我们最感兴趣的语法范畴

d.产生式(也称为产生规则或简称规则):定义语法范畴的一种书写规则, A→ α

2)句型与句子

假定G是一个文法,S是它的开始符号。若从S出发,经0步或若干步可推出a,则称a是一个句型。

最左(最右)推导:在推导的任何一步αÞβ,其中α、β是句型,都是对α中的最左(右)非终结符进行替换

3)语法分析树

a.语法树的根结由开始符号所标记

b.随着推导的展开,当某个非终结符被它的某个候选式所替换时,这个非终结符的相应结就产生了下一代新结点

c. 在一棵语法树生长过程中的任何时刻,所有那些没有后代的端末结自左至右排列起来就是一个句型

4)二义性

a.定义:如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。也就是说,若一个文法存在某个句子,它有两个不同的最左(最右)推导,则这个文法是法是二义的

b.原因:没有定义运算符优先级和结合性

c.消除方法:定义优先级和结合性;引入新的非终结符,建立新的产生式

 

二、知识运用

例如第6D0-9,所以L(G6)0-9的数字序列集合;最左推导是对最左非终结符进行替换,例如0127,先N->ND->NDD->NDDD->DDDD->0DDD->01DD->012D->0127;最右推导是对最右边非终结符进行替换,例如34,先N->ND->N4->D4->34。第8题推导需要注意*+-顺序,方法不变例如i+i*i,E->E+T->T+T->F+T->i+T->i+T*F->I+F*F->i+i*F->i+i*I;语法树的根由开始符号所标记,当非终结符被它的候选式所替换时,这个非终结符的相应结就产生了下一代新结点,所有那些没有后代的端末结自左至右排列起来就是一个句型,按照此规律可写出语法树。第9题证明二义,只需找到某个句子具有两个不同的最左或最右推导,此题我选用iiiei。第10题改为无二义引入新的非终结符T,建立新的产生式。第11题给出文法注意abc的幂次方是否相同,注意inm的范围是>=0还是>=1来确定是否有空,同时注意引入AB作为非终结符。

 

三、我的感受

刚开始接触编译原理,第一反应就是比较难。第二章前两节概念性的东西比较多,对于刚开始接触的我,感觉很晦涩难懂,不能理解,这种知识更多的是铺垫作用,个人感觉掌握的不够灵活,需要加强;第三节运用性比较强,老师通过例题的具体讲述带我们深入的体会如何利用公式或者技巧解题,例如文法的二义性无法判定,证明只需找出一个句子,它有两个不同的最左推导或最右推导即可,有关写出文法的例题讲的很多,这个地方老师也减缓了授课进度,虽然难度大的题目暂时无法快速解出,但是这种类型题掌握的还算不错的,收获较大。对于编译原理这门课的学习我认为主要还是上课需要认真听,自己看书理解的不够深入,课堂对重点的把握更准确,因此我将提高课堂效率,及时复习保证课程的学习效果。

猜你喜欢

转载自blog.csdn.net/xmj1886480/article/details/79674181
今日推荐