程序设计语言——编译原理 第二章总结

程序设计语言——编译原理 

第二章总结

知识点

程序设计语言的定义

语法是语言结构的形式描述;分词法规则语法规则;词法规则定义了单词符号的形成,语法规则定义了语法单位的形成。

但由字母表组成的单词构成的语句满足构成规则但其意义无法理解,这便是语义问题。

高级语言的特点

高级语言的分类;数据类型;操作;语句。

程序设计语言的语法描述

字母表;连接积;闭包;正规则闭包;文法;上下文无关文法;产生式;最左推导;最右推导;语法分析树;语法二义性,0型文法,1型文法,2型文法,3型文法

1.上下无关文法可由四元组表示,(VT,VN,S,P)

VT是一个非空有限集,它的每一个元素称为终结符号;
VN是一个非空有限集,它的每一个元素称为非终结符号,VT∩VN=空集;
S是一个非终结符号,称为开始符号;
P是一个产生式(有限)集合,每个产生式形式是A→a ,其中,P∈VN,   a ∈( VT∪VN)*

开始符号S至少必须在某一产生式的左部出现一次。

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

3.

程序设计语言——编译原理 第二章总结_第1张图片
  • 文法与语言的转换

1.由文法推其语言

课后题 6

求文法G6的语言L(G6)

N——>D|ND

D——>0|1|2|3|4|5|6|7|8|9

L(G6)是由0~9组成的符号串;

课后题 7

求奇数集的文法,不以0开头


2.由语言推其文法

课后题11


分析:L1可知a与b是同时出现,c可不出现,即为空字。

L2可知c与b是同时出现,a可不出现,即为空字。

L3可知a与b是同时出现,但有两种组合,还可出现空字。

L4可知1与0是同时出现,0与1是同时出现,在10的组合中出现01,还可为空字。

  • 最左推导与最右推导

课后题6求0127,34,568的最左推导,最右推导


课后题8


求i+i*i,i*(i+i)的最左推导,最右推导


  • 文法二义性的判定与消除

 如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。
 文法二义不等于语言二义。
文法的二义性是不可判定的。
文法的二义性证明:找出一个句子,它有两个不同的最左推导或最右推导。
文法二义性的消除:给每个产生式定义优先级。
如课后题9,10

体会

编译原理的学习比较偏理论化,要注重理解记忆,而且涉及到许多数学知识尤其是离散数学,感觉忘得差不多了。在上述总结中我只是把知识点列出来,并未详细解释。只是总结,定义列出也没有大用处,要记在脑子里,在知识的巩固下,还要掌握知识的运用,我在做题的过程中就运用的时候不太会。尤其要注意推导的时候的错误,不要老是犯错。




你可能感兴趣的:(程序设计语言——编译原理)