您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 第3章 程序设计语言的语法描述
第3章程序设计语言的语法描述3.1文法的引入文法:对语言结构的定义和描述。先讨论自然语言的文法。例:thebigelephentateabanana3.1文法的引入㈠语法树根据英语的语法,上述句子的语法结构可用图(语法树)表示如下:3.1文法的引入3.1文法的引入①非叶结点称为语法单位,在形式语言中称为非终结符。②处于根结点位置的结点又称为开始符号。③叶结点称为单词符号,在形式语言中称为终结符。3.1文法的引入㈡规则可以通过建立一组规则,来描述上述句子的语法结构,规则在形式语言中称为产生式。上述英文句子可用下述规则来描述:3.1文法的引入1.句子→主语谓语2.主语→冠词形容词名词3.冠词→the|a4.形容词→big5.名词→elephant|banana6.谓语→动词直接宾语7.直接宾语→冠词名词8.动词→ate3.1文法的引入㈢由规则推导句子可用规则来推导出句子。从开始符号出发,若能从规则推导出某符号串,则该符号串就是该文法的合法的句子,反之语法错误。3.1文法的引入句子主语谓语冠词形容词名词谓语the形容词名词谓语thebig名词谓语thebigelephant谓语thebigelephant动词直接宾语thebigelephantate直接宾语thebigelephantate冠词名词thebigelephantatea名词thebigelephantateabanana3.1文法的引入上述推导可简单表示为:句子thebigelephantateabanana。3.1文法的引入值得注意的是用上述规则可推导出多个句子,因存在推导句子thebigbananaateanelephant故thebigbananaateanelephant也是文法的一个合法的句子。但意义是荒谬的,也就是说句子的语义是错误的。一个语法正确的句子不能保证其语义是正确的,故一个句子是否正确,需要进行语法和语义两方面检查。3.1文法的引入㈣递归规则和递归文法①递归定义定义某事物,又用到某事物。在规则的左部和右部有相同的非终结符U→xUyU为非终结符,xy为终结符。3.1文法的引入㈣递归规则和递归文法②递归规则(直接递归)在产生式的左部和右部都含有非终结符U,故U→xUy是递归规则。若x=ε,U→Uy称为左递归规则,若y=ε,U→xU称为右递归规则。3.1文法的引入㈣递归规则和递归文法③间接递归文法的递归性还可以在推导过程中由规则间接产生:V→Uy|z,U→Xv上述规则不是递归规则,但存在推导VUyxUy,即VxUy,称文法含有间接递归。3.1文法的引入㈣递归规则和递归文法④递归文法含有递归规则或间接递归的文法称为递归文法3.1文法的引入利用递归文法我们可以用有穷的规则来描述无穷的语言,这不但解决了语言的定义问题,而且使得对语言的语法检查成为可能。3.1文法的引入例:定义无符号整数。①不采用递归规则,描述无符号整数全体就要使用无穷多条的规则。无符号整数→数字|数字数字|数字数字数字|…数字→0|1|2|3|4|5|6|7|8|9|0②采用递归规则,描述无符号整数全体仅需12条规则。无符号整数→无符号整数数字|数字N→ND|D数字→0|1|2|3|4|5|6|7|8|9|0D→0|1|2|3|4|5|6|7|8|9|03.1文法的引入例1:无符号整数1ND1例2:无符号整数23NNDDD2D23例3:无符号整数456NNDNDDDDD4DD45D4563.2上下文无关文法文法是描述语言结构的形式规则(语法规则),这些规则必须是准确的,易于理解的,应当有较强的描述能力,足以描述各种不同的结构3.2上下文无关文法形式语言的奠基人乔姆斯基将文法分为4种类型,它们是:l短语文法(0型文法)l上下文有关文法(1型文法)l上下文无关文法(2型文法)l正规文法(3型文法)这四种文法在形式语言中都有严格的定义。但对于程序设计语言来说,上下文无关文法已经够用了,上下文无关文法有足够的能力描述大多数现今使用的程序设计语言的语法结构。以后,“文法”一词若无特别说明,则指“上下文无关文法”。3.2上下文无关文法上下文无关文法所定义的语法单位和该语法单位可能出现的环境无关。自然语言中,一个句子或一个字,其意义和它们所处的上下文有密切关系,因此上下文无关文法不适合描述自然语言。3.2上下文无关文法㈠文法和语言一个文法G是一个四元式(VT,VN,S,VP),其中lVT是一个终结符的非空有限集,终结符通常用小写字母表示。lVN是一个非终结符的非空有限集,非终结符通常用大写字母表示。lS是一个特殊的非终结符(S∈VN),称为开始符号。lVP是一个产生式(规则)的有限集合,每个产生式的形式是A→α,其中A∈VN,α∈(VT∪VN)*。3.2上下文无关文法终结符是语言的基本符号,就是源程序中的单词,是语言不可分割的最小单位。单词经过词法分析后,语法分析只使用单词二元式的种别code。语法分析关心的是:单词是标识符还是常数,不考虑是哪个标识符,常数是多少。3.2上下文无关文法因此,终结符用单词的种别表示。i表示标识符x表示整形或实形变量y表示无符号实常数单字符单词种别与单词本身相同+基本字借用原单词形式3.2上下文无关文法非终结符用来表示抽象的语法单位,算术表达式,赋值语句,说明语句,程序。通常用大写字母表示,也用汉字表示开始符号是特殊的非终结符,定义文法的出发点3.2上下文无关文法产生式是定义语法单位的一种书写规则。上下文无关文法产生式的左部必定是一个非终结符,该非终结符称为产生式的左部符号,简称左部符号。产生式的右部是终结符和非终结符经过有限次连接构成的文法符号串,可以是空字。3.2上下文无关文法为方便,若干个左部符号相同的产生式,如A→1A→2A→3A→4A→N合并:A→1|2|…|N3.2上下文无关文法例:G=(VT,VN,S,VP)VT={+,*,(,),i}VN={E}S=EVP={E→E+E,E→E*E,E→(E),E→i}可简记为:G:E→E+E|E*E|(E)|i根据上述文法,可推导出任何仅包含加乘的算术表达式。3.2上下文无关文法㈡基本术语①直接推出和直接归约②推导和归约③句型④句子⑤语言⑥等价文法⑦最左推导和最右推导3.2上下文无关文法㈢文法的二义性①语法树我们可以用一个有向图表示一个句型的推导,这种表示称为语法树。在一般情况下,某一句型不论其推导过程如何,其最终形成的语法树是相同的,故语法树是不同推导过程的共性抽象。若仅进行最左(右)推导,则语法树和最左(右)推导等价。3.2上下文无关文法②二义文法某些文法的句型的推导可能对应一棵以上的语法树,或存在一个以上的最左(右)推导。3.2上下文无关文法例:已知文法G:E→E+E|E*E|(E)|i和句子i+i*i,该句子存在二个最左(右)推导,即二棵语法树。3.2上下文无关文法语法树1(先形成+后形成*)3.2上下文无关文法语法树2(先形成*后形成+)3.2上下文无关文法句子i+i*i的二个最左推导序列:EE+Ei+Ei+E*Ei+i*Ei+i*iEE*EE+E*Ei+E*Ei+i*Ei+i*i句子i+i*i的二个最右推导序列:EE+EE+E*EE+E*iE+i*ii+i*iEE*EE*iE+E*iE+i*ii+i*i3.2上下文无关文法二义文法:若一个文法所产生的语言中,只要存在一个句子,它有二个最左推导,或有二个最右推导,或句子的推导对应两棵语法树,则称该文法为二义文法。3.2上下文无关文法③二义文法的利用和处理l根据条件修改文法,语言不变。根据条件修改编译程序的某一部分,文法保持不变
本文标题:第3章 程序设计语言的语法描述
链接地址:https://www.777doc.com/doc-3142767 .html