知识点:
2.1 高级语言的定义
任何语言实现的基础是语言定义,程序语言主要由语法和语义两个方面定义。语法,即一组规则,一部分称为词法规则,另一部分称为语法规则。语义,即符合构成规范的句子,要考虑意义,是指一组规则,使用它可以定义一个程序的意义。
2.2 高级语言的一般特征
程序设计语言的一般特性:程序结构、数据类型与操作、语句、控制结构。(关于标识符的笔记:程序运行时,同一名在不同时间也可代表不同的存储单元;同意存储单元也可能有几个不同的名字。)
2.3 程序语言的语法描述
与文法定义有关的几个术语:字母表,符号,符号串,空字等。【注】用S*表示S上的所有符号穿的全体,空字也包括在其中。符号串的运算有连接,方幂,符号串集合的运算有和,连接积。此外,要注意,V+是V的正则闭包,V+=VV*,相当于无空字符串存在。
上下文无关文法
文法是描述语言的语法结构的形式规则。上下文无关文法所定义的语法范畴是完全独立于这种范畴可能出现的环境的。不宜于描述任何自然语言。对于一个句子,可以用直接推导或者图示化的方法来推导。上下文无关文法由四元组组成:一组终结符号(组成语言的基本符号,如基本字、标识符、常数、算符和界符等),一组非终结符号(代表语法范畴,如算术表达式),一个开始符号(特殊非终结符),以及一组产生式(定义语法范畴的书写规则,一个产生式的形式:A→a)。
语言的定义:
假定G是一个文法,S是它的开始符号。如果S (a (表示从S出发,经0步或若干步可推出a),则称a是一个句型。仅含终结符号的句型是一个句子。文法G所产生的句子的全体是一个语言,将它记为L(G).
L(G)={a|S a & a∈VT }
要掌握产生式和语言之间的转换,掌握最左(最右)推导。
语法分析树与二义性
语法分析树:简称语法树,用来表示推导过程。
如果一个文法存在某个句子对应两颗不同的语法树,则称这个文法是二义的。【注】文法二义性≠语言二义性。二义原因:没有定义运算符优先级和结合性。消除方法:定义优先级和结合性。
eg:
乔姆斯基把文法分为四种类型
0型,1型,2型,3型
0型强于1型,1型强于2型,2型强于3型。这几文法的差别在于对产生式施加不同的限制。
应用:
课程感悟:
通过这一章的学习和练习,我觉得这些题目跟我们大二学的离散数学有一定的联系,老师说以后越高层次的研究问题,就会发现我们研究的其实就是数学模型,希望通过自己的不断钻研,可以逐步到达那个层次。我觉得编译原理的概念性东西比较多,比较抽象,老师上课会讲到很多例子,这样理解起来就会容易一些。这章老师讲的知识大部分都掌握了,但是通过做题来看,有好多关于知识运用起来还不太熟练,比如说通过定义优先级和结合性来消除二义性,课后我会多多钻研,希望能理解透彻。