《编译原理课程教案》第2章:文法基础.ppt

上传人:小飞机 文档编号:5903749 上传时间:2023-09-01 格式:PPT 页数:71 大小:380.50KB
返回 下载 相关 举报
《编译原理课程教案》第2章:文法基础.ppt_第1页
第1页 / 共71页
《编译原理课程教案》第2章:文法基础.ppt_第2页
第2页 / 共71页
《编译原理课程教案》第2章:文法基础.ppt_第3页
第3页 / 共71页
《编译原理课程教案》第2章:文法基础.ppt_第4页
第4页 / 共71页
《编译原理课程教案》第2章:文法基础.ppt_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《《编译原理课程教案》第2章:文法基础.ppt》由会员分享,可在线阅读,更多相关《《编译原理课程教案》第2章:文法基础.ppt(71页珍藏版)》请在三一办公上搜索。

1、形式语言基本知识,第二章,本章要求,主要内容:符号串,文法的概念及分类,语言的定义过程重点掌握:上下文无关文法、推导、句型、句子、语言,语法树、二义性文法、文法的语言生成过程,问题:1.程序语言的定义主要包括哪两个方面?2.什么是语言的语法?3.什么是语言的语法规则?一般程序语言的语法单位有哪些?4.什么是语言的语义?5.什么是名字的作用域?说明名字的作用域规则“最近嵌套原则”。,6.什么是名字的左值、右值?7.描述程序语言中表达式的形成规则。8.什么是符号串的闭包、正则闭包?9.什么是文法?什么是上下文无关文法?10.什么是终结符号、非终结符号、开始符号、产生式?11.描述上下文无关文法的形

2、式定义。12.和 两个符号的含义及区别。13.和 两个符号的含义及区别。14.什么是句型、句子、语言?,15.什么是句型的最左推导,最右推导?16.什么是语法树?17.什么是二义性文法?18.可否用算法确切地判定一个文法是二义性的?19.描述程序设计语言时,对于上下文无关文法有哪些限制?20.什么是左线性文法,右线性文法?,2.1 程序语言定义的基本概念,高级程序语言的基本功能和层次结构,程序语言的基本功能:描述数据和对数据的运算。所谓程序,本质上说是描述一定数据的处理过程。,程序的层次结构,程序|子程序或分程序、过程、函数|语句|表达式|数据引用 算符 函数调用,程序语言每个组成成分的逻辑和

3、实现意义,抽象的逻辑的意义数学意义 计算机实现的意义具体实现,与机器语言或汇编语言比较,高级语言的优点:较接近于数学语言和工程语言,比较直观、自然和易于理解;便于验证其正确性,易于改错;编写效率高;易于移植.,语 法,词法规则:单词符号的形成规则。单词符号是语言中具有独立意义的最基本结构。一般包括:常数、标识符、基本字、算符、界符等。描述工具:有限自动机语法规则:语法单位的形成规则。语法单位通常包括:表达式、语句、分程序、过程、函数、程序等;描述工具:上下文无关文法,程序语言的语法描述基础,几个概念:考虑一个有穷 字母表 上的字符集,其中每一个元素称为一个字符,上的字(也叫字符串、符号串)是指

4、由中的字符所构成的一个有穷序列。不包含任何字符的序列称为空字,记为用*表示上的所有字的全体,包含空字例如:设=a,b,则*=,a,b,aa,ab,ba,bb,aaa,.,符号串的长度:符号串中符号的个数,例如:某符号串中有m个符号,则称其长度为m,表示为x=m,如001110的长度是6。空符号串:即不包含任何符号的符号串,用表示,其长度为0,即=0。,*的子集U和V的连接(积)定义为UV|U&V 设:U a,aa V b,bb 那么:UV=ab,abb,aab,aabb,*的子集U和V的连接(积)定义为UV|U 记 VVV*,称V+是V的正规闭包。,设:U a,aa 那么:U*=,a,aa,a

5、aa,aaaa,U=a,aa,aaa,aaaa,2.2 上下文无关文法及其语言,文法是描述语言的语法结构的形式规则。文法是一种工具,它可用于严格定义句子的结构;用有穷的规则刻划无穷的集合。文法是被用来精确而无歧义地描述语言的句子的构成方式。文法描述语言的时候不考虑语言的含义。,He gave me a book.He me book a gave,引 例,He me book a gave,He He He gave He gave He gave me He gave me He gave me a He gave me a book,文法的形式定义,由四部分组成:终结符号:是组成该语言的最

6、基本的符号,是不可再分的基本符号,如保留字、标识符等。非终结符号:规则中用尖括号括起来的符号,表示一些语法成分,可以推导出其他的语法成分,表示一定符号串的集合,是一个类,如表达式。开始符号:规则中的一个特殊的非终结符号,语言中的句子都从它开始推导,如程序、句子产生式:定义语法成分的规则,其中:,一个文法G抽象地表示为四元组G=(Vn,Vt,P,S)其中Vn表示非终结符号Vt表示终结符号,VnVt=(字母表),VnVt=S是开始符号,P是产生式,形如:(V+且至少含有一个非终结符号,V*),产生式的形式为:A,左部符号,非终结符,右部,可以含有非终结符和终结符,产生式又称为一条规则。有时一个产生

7、式不足以描述该语法范畴,就用多个产生式,如算术表达式的描述为:(递归定义)E E+E|E*E|i E E+E E E*E E i相同左部的一个右部又称一个候选式。,形式语言与自动机理论(蒋宗礼等,清华大学出版社)对文法的定义:,上下文无关文法的定义一个上下文无关文法G是一个四元式 G=(VT,VN,S,P),其中VT:终结符集合(非空)VN:非终结符集合(非空),且VT VN=S:文法的开始符号,SVNP:产生式集合(有限),每个产生式形式为P,PVN,(VT VN)*开始符S至少必须在某个产生式的左部出现一次。,上下文无关文法所定义的语法成分独立于它可能出现的环境,即不考虑上下文。,算术表达

8、式的文法定义,变量是表达式表达式+表达式是表达式表达式*表达式是表达式(表达式)是 表达式,E E+E E E*E E(E)E i,E E+E|E*E|(E)|i,上下文无关文法产生句子的方法:从文法的开始符号出发,反复连续使用产生式,对左边的非终结符进行替换和展开例:表达式定义规则,E E+E E E*E E(E)E i,(i+i),E=(E)=(E+E)=(i+E)=(i+i),例,定义只含+,*的算术表达式的文法 G=,其中,P由下列产生式组成:E iE E+EE E*EE(E),几点规定:“”也可以用“:=表示,这种表示称为巴科斯范式(BNF)P 1 P 2 可缩写为 P 1|2|n

9、P n 其中,“|”读成“或”,称为P的一个候选式。表示一个文法时,通常只给出开始符号和产生式,如上例,可表示为:G(E):E i|E+E|E*E|(E),例,定义只含+,*的算术表达式的文法 G=,其中,P由下列产生式组成:E iE E+EE E*EE(E),定义:称A直接推出,即A 仅当A 是一个产生式,且,(VT VN)*。如果1 2 n,则我们称这个序列是从1到n的一个推导。若存在一个从1到n的推导,则称1可以推导出n。对文法G(E):E i|E+E|E*E|(E)E(E)(E+E)(i+E)(i+i),通常,用 表示:从1出发,经过一步或若干步,可以推出n。,用 表示:从1出发,经过

10、0步或若干步,可以推出n。,所以:即 或,定义:假定G是一个文法,S 是它的开始符号。如果,则称是一个句型。仅含终结符号的句型是一个句子。文法G所产生的句子的全体是一个语言,将它记为 L(G)。,文法G所产生的语言定义为:L(G)=x|S=x,其中S为文法的开始符号,xVt*。即:一个文法G可以推导出的所有句子构成的一个集合,就确定了一个语言。,*,例2.1(P30)考虑文法G1:它定义了什么语言。,S bAA aA|a,推导过程:S=bA=ba S=bA=baA=baa.S=bA=baA=baa,归纳得:L(G1)=ban|n1,例2.2(P30)考虑文法G2:它定义的语言是:,S ABA

11、aA|aB bB|b,L(G2)=ambn|m,n1,练习:文法(A,B,S,a,b,c,P,S)S Ac|aB A ab B bc写出(G)的全部元素,L(G)=abc,例:(i*i+i)是文法G(E):E i|E+E|E*E|(E)的一个句子。证明:E(E)(E+E)(E*E+E)(i*E+E)(i*i+E)(i*i+i)E,(E),(E*E+E),(i*i+i)是句型。,例:文法G1(A):A c|AbG1(A)的语言?L(G1)=c,cb,cbb,以c开头,后继若干个b,例:文法G2(S):S ABA aA|aB bB|bG2(S)的语言?L(G2)=ambn|m,n0,例:给出产生语

12、言为anbn|n1的文法。G3(S):S aSb S ab,例:给出产生语言为ambn|1nm2n的文法。G4(S):S aSb|aaSb S ab|aab,思考:构造一个文法G3使得:,L(G3)=anbn|n1,S aSbS ab,a,b的个数相同,则文法G3为:,文法等价:若文法G1和文法G2所产生的语言相同,即L(G1)=L(G2),则称文法G1和文法G2等价。,例:有如下两个文法,判断它们是否等价?G1=(S,0,S,S0S,S0)G2=(S,0,S,SS0,S0),S0S0S00S0S 00S 0000,L(G1)=0n|n1,对于G2:,对于G1:,SS0 S00 0000,L(

13、G2)=0n|n1,G1G2,但L(G1)=L(G2),文法G1和G2等价,例3:G=(E,i,+,*,(,),P,E)P:E E+E|E*E|(E)|i 表达式(i+i)*i的推导过程:(1)E E*E(E)*E(E+E)*E(i+E)*E(i+i)*E(i+i)*i(2)E E*E E*i(E)*i(E+E)*i(E+i)*i(i+i)*i,得到一个语言,是通过利用所有的产生式推导出所有可能的句子,构成一个集合。但是一个句型到另一个句型(句子)的推导过程不是唯一的。,从一个句型到另一个句型的推导往往不唯一。E+Ei+Ei+i E+EE+ii+i最左推导:任何一步 都是对中的最左非终结符进行

14、替换。最右推导:任何一步 都是对中的最右非终结符进行替换。,最左推导:在整个推导过程中,任何一步推导=都是对中最左边的非终结符进行替换。最右推导:,在推导之前确定推导的顺序,是对句子进行确定性分析所必须的,例3:G=(E,i,+,*,(,),P,E)P:E E+E|E*E|(E)|i(i+i)*i的最左推导过程:E E*E(E)*E(E+E)*E(i+E)*E(i+i)*E(i+i)*i最右推导过程:E E*E E*i(E+E)*i(E+i)*i(i+i)*i,2.3 语法树和文法的二义性,语法树,语法树:推导的形式化表示,有助于理解句子语法结构的层次每个结点都有一个标记,该标记属字母集中的一

15、个符号,根由开始符号标记。当某个非终结符被它的某个候选式所替换时,就产生相应的下一层的结点,候选式中自左至右的每个符号对应一个新的结点,并标记它,画出其与父结点之间的连线。,例:对文法G=(E,i,+,*,(,),P,E)P:E E+E|E*E|(E)|i 句子(i+i)*i 的语法树:,在语法树的推导过程中的任何时刻,没有后代的端末结点自左至右排列起来就是一个句型。一棵语法树表示了一个句型很多可能的不同推导过程。(包括最左推导和最右推导)。,例3:G=(E,i,+,*,(,),P,E)P:E E+E|E*E|(E)|i 句子(i*i+i)的语法树:(1)E(E)(E+E)(E*E+E)(i*

16、E+E)(i*i+i),(2)E(E)(E*E)(i*E)(i*E+E)(i*i+E)(i*i+i),并不是任何情况下一个句型就唯一地对应一棵语法树。,文法的二义性,定义:如果一个文法存在某个句子对应两棵不同的语法树,则说这个文法是二义的。,对二义文法中的某个句子的分析不是唯一的,因此总是希望文法是无二义的。但是二义文法有时也是有用的。,2.4 文法的分类,Chomsky于1956年建立形式语言体系,他把文法分成四种类型:0,1,2,3型。与上下文无关文法一样,它们都由四部分组成,但对产生式的限制有所不同。,0型(短语文法,图灵机):产生式形如:其中:(VT VN)*且至少含有一个非终结符;(

17、VT VN)*1型(上下文有关文法,线性界限自动机):产生式形如:其中:|,仅 S 例外。,2型(上下文无关文法,非确定下推自动机):产生式形如:A 其中:A VN;(VT VN)*。3型(正规文法,有限自动机):产生式形如:A B 或 A 其中:VT*;A,BVN 产生式形如:A B 或 A 其中:VT*;A,BVN(注意:线性文法中,产生式的右部只有一个非终结符。),右线性文法,左线性文法,四种类型描述能力比较,0型,1型,2型,3型,语言的层次,这四种语言可被4种自动机识别:0型图灵机 1型线性界限自动机2型下推自动机 3型有穷自动机,从外到内,四种文法对产生式的限制越来越多,语言的描述

18、能力越来越弱,正规文法的描述能力比上下文无关文法的描述能力弱。正规文法只能用于描述单词的构成。上下文无关文法有足够的能力描述现今大多数程序设计语言的语法结构。,2.5 类Pascal语言Sample的文法描述,类PASCAL语言Sample,是PASCAL语言的裁减版本,具有一般高级语言的共同特征:它的字符集包括所有的大小写字母、数字和一些界符;有多种数据类型:整型、实型、字符型等;有变量说明和常量说明;包括顺序、条件和循环三种语句结构。,详细地说,Sample语言包括如下一些语法成分:1数据类型:整型、布尔型、实型和字符类型2表达式:可进行算术、逻辑表达式的运算3说明语句:常量说明、变量说明

19、4赋值语句5控制语句:If语句、while语句、repeat语句和for循环语句6begin end复合语句7程序语句(program)与结束语句(end.),2.5.1 Sample语言字符集的定义,(1):=|(2):=a|b|c|z|A|B|C|Z(3):=0|1|2|3|9(4):=+|-|*|/|=|(|)|:|;|,|_|.,、Sample语言词法定义,(1):=|(2):=and|begin|bool|char|const|do|else|end|false|for|if|input|integer|not|or|output|program|read|real|repeat|t

20、hen|to|true|until|var|while|write(3):=/*|*/|=|:=(4):=|,Sample语言词法定义(续),(5):=|(6):=|(7):=true|false(8):=除以外的任意字符串(9):=(10):=.,、Sample语言数据类型的定义,(1):=integer|bool|char|real,2.5.4 Sample语言表达式的定义,(1):=|(2):=|(3):=*|/|(4):=(5):=|(6):=or|,Sample语言表达式的定义(续),(7):=and|(8):=|not(9):=|(10):=|=|=,2.5.5 Sample语言语

21、句的定义,(1):=|(2):=(3):=const|(4):=标识符=,|标识符=;(5):=var|(6):=:;|:;,(7):=,|(8):=|(9):=(10):=:=(11):=(12):=|(13):=begin end(14):=;|,Sample语言语句的定义(续),Sample语言语句的定义(续),(15):=if then(16):=if then else(17):=while do(18):=for:=to do(19):=repeat until,Sample语言程序定义,(1):=program;(2):=,2.5.7 sample语言源程序举例,程序文件名:Example.srcprogram example1;vara,b,c:integer;x:char;beginif(a+c*3 b)and(b3)then c:=3;x:=2+(3*a)-b*c*8;for x:=1+2 to 3 do b:=100;while ab do c:=5;repeat a:=10;until ab;end.,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号