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

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

《《编译原理课程教案》第2章:文法基础.ppt》由会员分享,可在线阅读,更多相关《《编译原理课程教案》第2章:文法基础.ppt(71页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

2、式的形成规则。8.什么是符号串的闭包、正则闭包?9.什么是文法?什么是上下文无关文法?10.什么是终结符号、非终结符号、开始符号、产生式?11.描述上下文无关文法的形式定义。12.和两个符号的含义及区别。13.和两个符号的含义及区别。14.什么是句型、句子、语言?15.什么是句型的最左推导,最右推导?16.什么是语法树?17.什么是二义性文法?18.可否用算法确切地判定一个文法是二义性的?19.描述程序设计语言时,对于上下文无关文法有哪些限制?20.什么是左线性文法,右线性文法?2.1 程序语言定义的基本概念程序语言定义的基本概念高级程序语言的基本功能和层次结构高级程序语言的基本功能和层次结构

3、程序语言的基本功能基本功能:描述数据和对数据的运算。所谓程序,本质上说是描述一定数据的处理过程。程序的层次结构程序的层次结构程序程序|子程序或分程序、过程、函数子程序或分程序、过程、函数|语句语句|表达式表达式|数据引用数据引用 算符算符 函数调用函数调用程序语言每个组成成分的逻辑和实现意义程序语言每个组成成分的逻辑和实现意义抽象的逻辑的意义抽象的逻辑的意义数学意义数学意义 计算机实现的意义计算机实现的意义具体实现具体实现与机器语言或汇编语言比较,高级语言高级语言的优点:的优点:较接近于数学语言和工程语言,比较直观、自然和易于理解;便于验证其正确性,易于改错;编写效率高;易于移植.语语 法法词

4、法规则词法规则:单词符号的形成规则:单词符号的形成规则。单词符号是语言中具有独立意义的最基本结构单词符号是语言中具有独立意义的最基本结构。一般包括:常数、标识符、基本字、算符、界一般包括:常数、标识符、基本字、算符、界符等。符等。描述工具:有限自动机描述工具:有限自动机语法规则语法规则:语法单位的形成规则:语法单位的形成规则。语法单位通常包括:表达式、语句、分程序、语法单位通常包括:表达式、语句、分程序、过程、函数、程序等过程、函数、程序等;描述工具:上下文无关文法描述工具:上下文无关文法程序语言的语法描述基础程序语言的语法描述基础几个概念几个概念:考虑一个考虑一个有穷有穷 字母表字母表 上的

5、字符集,上的字符集,其中每一个元素称为一个其中每一个元素称为一个字符,字符,上的上的字字(也叫也叫字符串、符号串字符串、符号串)是指由是指由中中的字符所构成的一个有穷序列。的字符所构成的一个有穷序列。不包含任何字符的序列称为不包含任何字符的序列称为空字空字,记为,记为用用*表示表示上的所有字的全体上的所有字的全体,包含空字包含空字例如例如:设设 =a=a,bb,则,则 *=,a,b,aa,ab,ba,bb,aaa,.,a,b,aa,ab,ba,bb,aaa,.符号串的长度符号串的长度 :符号串中符号的个数,例如:某符号串中有m个符号,则称其长度为m,表示为x=m,如001110的长度是6。空符

6、号串空符号串:即不包含任何符号的符号串,用表示,其长度为0,即=0。*的子集的子集U和和V的的连接连接(积积)定义为)定义为UV|U&V 设:设:U a,aa V b,bb 那么:那么:UV=ab,abb,aab,aabb*的子集的子集U和和V的的连接连接(积积)定义为)定义为UV|U&V V自身的自身的 n次积记为次积记为Vn=VVV规定规定V0=,令,令 V*=V0 V1 V2 V3 称称V*是是V的的闭包闭包;记记 VVV*,称,称V+是是V的的正规闭包正规闭包。设:设:U a,aa 那么:那么:U*=,a,aa,aaa,aaaa,U=a,aa,aaa,aaaa,2.2 上下文无关文法及

7、其语言上下文无关文法及其语言文法文法是描述语言的语法结构的形式规则。是描述语言的语法结构的形式规则。文法是一种工具,它可用于严格定义句子的结构;用有穷的规则刻划无穷的集合。文法是被用来精确而无歧义地描述语言的句子的构成方式。文法描述语言的时候不考虑语言的含义。He gave me a book.He He me me book book a a gave 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文法的形式定义文法的形式定义由四部分组

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

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

10、。上下文无关上下文无关文法所定义的语法成分独立于它可能出现的环境,即不考虑上下文。算术表达式的文法定义算术表达式的文法定义变量是表达式表达式+表达式是表达式表达式*表达式是表达式(表达式)是表达式EE+EEE*EE(E)EiEE+E|E*E|(E)|i上下文无关文法产生句子的方法上下文无关文法产生句子的方法:从文法的开始符号出发,反复连续使用产生式,对左边的非终结符进行替换和展开例:表达式定义规则EE+EEE*EE(E)Ei(i+i)E=(E)=(E+E)=(i+E)=(i+i)例,定义只含例,定义只含+,*的算术表达式的文法的算术表达式的文法 G=,其其中,中,P由下列产生式组成:由下列产生

11、式组成:E iE E+EE E*EE (E)几点规定:几点规定:“”也可以用也可以用“:=表示,表示,这种表示称为巴这种表示称为巴科斯范式科斯范式(BNF)P 1 P 2 可缩写为可缩写为 P 1|2|n P n 其中,其中,“|”读成读成“或或”,称为,称为P的一个候选式。的一个候选式。表示一个文法时,通常只给出开始符号和产生式,表示一个文法时,通常只给出开始符号和产生式,如上例,可表示为:如上例,可表示为:G(E):E i|E+E|E*E|(E)n例,定义只含例,定义只含+,*的算术表达式的文法的算术表达式的文法 G=,其中,其中,P由下列产生式组成:由下列产生式组成:E iE E+EE

12、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)n通常,用通常,用 表示:从表示:从 1 1出发,经过出发,经过一步或若干步,可以推出一步或若干步,可以推出 n n。用用 表示:从表示:从 1 1出发,经过出发,经过0 0步或步或若干

13、步,可以推出若干步,可以推出 n n。所以所以 :即即 或或q定义:假定定义:假定G G是一个文法,是一个文法,S S 是它的开始符号。是它的开始符号。如果如果 ,则,则 称是一个称是一个句型句型。仅含终结符。仅含终结符号的句型是一个号的句型是一个句子句子。文法。文法G G所产生的句子的全体所产生的句子的全体是一个是一个语言语言,将它记为,将它记为 L(G)L(G)。文法文法G所产生的语言所产生的语言定义为:L(G)=x|S=x,其中S为文法的开始符号,xVt*。即:一个文法G可以推导出的所有句子构成的一个集合,就确定了一个语言。*例2.1(P30)考虑文法G1:它定义了什么语言。S bAA

14、aA|a推导过程:S=bA=ba S=bA=baA=baa .S=bA=baA=baa归纳得:L(G1)=ban|n1例2.2(P30)考虑文法G2:它定义的语言是:S ABA aA|aB bB|bL(G2)=ambn|m,n1练习:文法(A,B,S,a,b,c,P,S)SAc|aBAabBbc写出(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)是句型。是句型。q例:文法例:文法G1(

15、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,n0q例:给出产生语言为例:给出产生语言为anbn|n 1的文法。的文法。G3(S):S aSb S abq例:给出产生语言为例:给出产生语言为ambn|1 n m 2n的文法。的文法。G4(S):S aSb|aaSb S ab|aab 思考:构造一个文法G3使得:L(G3)=anbn|n1 S aSbS ab a,b的个数相同,则文法G3为:文法等价:文法等价:若文法G1和

16、文法G2所产生的语言相同,即L(G1)=L(G2),则称文法G1和文法G2等价等价。例:有如下两个文法,判断它们是否等价?G1=(S,0,S,S0S,S0)G2=(S,0,S,SS0,S0)S0S0S00S0S00S0000L(G1)=0n|n1 对于对于G2:对于对于G1:SS0S000000 L(G2)=0n|n1 G1G2,但L(G1)=L(G2),文法G1和G2等价 例3:G=(E,i,+,*,(,),P,E)P:EE+E|E*E|(E)|i表达式(i+i)*i的推导过程:(1)EE*E(E)*E(E+E)*E(i+E)*E(i+i)*E(i+i)*i(2)EE*EE*i(E)*i(E

17、+E)*i(E+i)*i(i+i)*il得到一个语言,是通过利用所有的产生式推导出所有可能的句子,构成一个集合。l但是一个句型到另一个句型(句子)的推导过程不是唯一的。从一个句型到另一个句型的推导往往不唯从一个句型到另一个句型的推导往往不唯一。一。E+Ei+Ei+i E+EE+ii+i最左推导最左推导:任何一步:任何一步 都是对都是对 中的最中的最左非终结符进行替换。左非终结符进行替换。最右推导最右推导:任何一步:任何一步 都是对都是对 中的最中的最右非终结符进行替换。右非终结符进行替换。最左推导最左推导:在整个推导过程中,任何一步推导=都是对中最左边的非终结符进行替换。最右推导最右推导:在推

18、导之前确定推导的顺序,是对句子进行确定性分析所必须的例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)*i2.3 语法树和文法的二义性语法树和文法的二义性语法树语法树语法树语法树:推导的形式化表示推导的形式化表示,有助于理解句子语法结构的层次每个结点都有一个标记,该标记属字母集中的一个符号,根由开始符号标记。当某个非终结符被它的某个候选式所替换时,就产生相应的下一层的结点,候选式中

19、自左至右的每个符号对应一个新的结点,并标记它,画出其与父结点之间的连线。例:对文法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*E +E)(i*i+i)(2)E (E)(E*E)(i*E)(i*E+E)(i*i+E)(i*i+i)并

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

21、产生式形如:其中:其中:(VT VN)*且至少含有一个非终结且至少含有一个非终结符;符;(VT VN)*1型型(上下文有关文法,线性界限自动机上下文有关文法,线性界限自动机):产生式形如:产生式形如:其中:其中:|,仅,仅 S 例外。例外。2型型(上下文无关文法,非确定下推自动机上下文无关文法,非确定下推自动机):产生式形如:产生式形如:A 其中:其中:A VN;(VT VN)*。3型型(正规文法,有限自动机正规文法,有限自动机):产生式形如:产生式形如:A B 或或 A 其中:其中:VT*;A,B VN 产生式形如:产生式形如:A B 或或 A 其中:其中:VT*;A,B VN(注意:线性文

22、法中,产生式的右部只有一(注意:线性文法中,产生式的右部只有一个非终结符。)个非终结符。)右线性文法右线性文法左线性文法左线性文法四种类型描述能力比较四种类型描述能力比较0型1型2型3型语言的层次语言的层次这四种语言可被4种自动机识别:0型图灵机1型线性界限自动机2型下推自动机3型有穷自动机从外到内,四种文法对产生式的限制越来越多,语言的描述能力越来越弱正规文法的描述能力比上下文无关文法的描述能力弱。正规文法只能用于描述单词的构成。上下文无关文法有足够的能力描述现今大多数程序设计语言的语法结构。2.5 类类Pascal语言语言Sample的文法描述的文法描述类PASCAL语言Sample,是P

23、ASCAL语言的裁减版本,具有一般高级语言的共同特征:它的字符集包括所有的大小写字母、数字和一些界符;有多种数据类型:整型、实型、字符型等;有变量说明和常量说明;包括顺序、条件和循环三种语句结构。详细地说,Sample语言包括如下一些语法成分:1数据类型:数据类型:整型、布尔型、实型和字符类型2表达式:表达式:可进行算术、逻辑表达式的运算3说明语句:说明语句:常量说明、变量说明4赋值语句赋值语句5控制语句控制语句:If语句、while语句、repeat语句和for循环语句6begin end复合语句复合语句7程序语句(程序语句(program)与结束语句)与结束语句(end.)2.5.1 Sa

24、mple语言字符集的定义语言字符集的定义(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|then|to|true|until|var|while|write(3):=/*|*/|=|:=(4):=|Sample语言词法定义(续)语言词法定义(续

25、)(5):=|(6):=|(7):=true|false(8):=除以外的任意字符串(9):=(10):=.、Sample语言数据类型的定义语言数据类型的定义(1):=integer|bool|char|real2.5.4 Sample语言表达式的定义语言表达式的定义(1):=|(2):=|(3):=*|/|(4):=(5):=|(6):=or|Sample语言表达式的定义(续)语言表达式的定义(续)(7):=and|(8):=|not(9):=|(10):=|=|=2.5.5 Sample语言语句的定义语言语句的定义(1):=|(2):=(3):=const|(4):=标识符=,|标识符=;

26、(5):=var|(6):=:;|:;(7):=,|(8):=|(9):=(10):=:=(11):=(12):=|(13):=beginend(14):=;|Sample语言语句的定义(续)语言语句的定义(续)Sample语言语句的定义(续)语言语句的定义(续)(15):=ifthen(16):=ifthenelse(17):=whiledo(18):=for:=todo(19):=repeatuntil Sample语言程序定义语言程序定义(1):=program;(2):=2.5.7 sample语言源程序举例语言源程序举例程序文件名:Example.srcprogramexample1;vara,b,c:integer;x:char;beginif(a+c*3b)and(b3)thenc:=3;x:=2+(3*a)-b*c*8;forx:=1+2to3dob:=100;whileabdoc:=5;repeata:=10;untilab;end.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁