第二章文法与语言ppt课件.ppt
《第二章文法与语言ppt课件.ppt》由会员分享,可在线阅读,更多相关《第二章文法与语言ppt课件.ppt(112页珍藏版)》请在三一办公上搜索。
1、编译原理,Compiler Principles,2013年9月,闫雷鸣,第二章 文法与语言,讨论问题:文法和语言的概念和定义 文法和语言的分类 文法等价变换 句型分析,简单回顾,对程序的理解 程序是计算机执行的一系列指令;程序是计算任务的 处理对象和处理规则的描述。对程序设计语言的理解 程序设计语言是程序的书写规范;程序设计语言的要素:一组记号(符号)和一组规则。程序设计语言程序是 程序设计语言之符号集合上的、按一定规则组成的符号串。,语言是一切句子的集合;程序设计语言是一切程序的集合;把程序看做程序设计语言的句子。程序是(程序设计)语言的句子 如何系统地构造程序?或者,一般地,如何为一个(
2、程序设计)语言生成句子?,2.1 符号串与符号串集合,语言实际上是一个符号串集合;文法规定语言中句子的构造规则。句子是一个语言之字母表上按一定规则构造的符号串。2.1.1 字母表 字母表:有穷非空的符号集合。例 A=a,b,c=0,1 C语言字母表=字母,数字,界限符 不同的语言有不同的字母表。字母表上的元素(即符号)组成符号串。,2.1.2 符号串:1.符号串及其长度 符号串:由字母表上的符号所组成的有穷序列。字母表A=a,b,c上的符号串:a,b,c,ab,ba,aaa,aab,baa,abcab,(空串)注意:顺序是重要的,abba C语言字母表上的符号串?长度:|aabcaca|=7|
3、=0,2.子符号串 若u=xvy,其中|v|0(|u|=|v|)则v是u中的子符号串。(非空符号串)例 a+(b-c)/d中的子符号串3.符号串的头与尾(前缀、后缀)abc的头:a,ab,abc,x=t abc的尾:c,bc,abc,x=t,4.对符号串的运算 联结(或并置):x=ab y=ba xy=abba yx=baab 对任何符号串x,有x=x=x。方幂:xn=xxx(x自身联结n次)xn=xn-1x=xxn-1 x0=x3=(ab)3=ababab|xy|=|x|+|y|xn|=n|x|x0|=0,2.1.3 符号串集合(语言)1.符号串集合的定义1)它是一切元素都是某字母表上的符号
4、串的集合。2)表示法 枚举法 1,11,111,1111 省略法 1,11,111,1111,描述法 1i|i1 或x|x全由1组成,|x|1 注意:一定不能涉及含义,如 x|x=10i。,字母表上的一个语言就是上的一些符号串组成的集合。空集 是一个语言,仅含一个空符号串集合 也是一个语言。特别需要指出的是,和 是不同的语言。,2.对符号串集合的运算 乘积:AB=xy|x A 且 y B 1,0 a,b,c=?对任何符号串x有x=x=x,A0=因此,A=A=A,但A=A=。方幂:An=AAA(n 个A乘积)An=An-1A=AAn-1 特例,字母表A的方幂,xAn,|x|=n 1,03=?1,
5、0n=?,3.字母表的闭包与正闭包 闭包 A*=A0A1An 0,1,2*正闭包 A+=A1An=A*-0,1,2+xA+,则|x|=1 xA*,则|x|=0 任何一个语言是其字母表之正闭包的真子集。如何找出此真子集?或说,如何找出其句子?,2.2 文法与语言的形式定义,2.2.1 文法的形式定义1.重写规则(产生式规则)定义:有序对(U,u)或 U:=u,A(或A:=)其中,A是一个符号,称为产生式规则的左部,而 是有穷非空符号串,称为产生式规则的右部,“”和“:=”表示“定义为”或“由组合成的”或“生成”,其含义是左部符号用右部的符号串定义或左部符号生成右部符号串。产生式规则可合写,如:A
6、 和 A 可写为A|,1.重写规则(产生式规则)规则表示法:通常的 E:=E+T E:=T 或 E:=E+T|T 扩充的 E:=T+T 术语:非终结符号,非终结符号集VN 终结符号,(不会出现在规则左部)终结符号集VT(VN VT=V=VN VT)单规则:右部是单个非终结符,用于指定重复次数:=05 内中符号至多出现一次:=+|-()提公因子E:=E+T|E-T 可改写为E:=E(+|-)T,16,规则构造的例子,C语言标识符的规则::=:=:=:=A|Z:=a|z:=_:=0|9,17,用规则产生句子的例子,如:用标识符产生式规则产生句子area.a a ea ea rea rea area
7、 其中,“=”为推导。,2.文法的定义 文法GZ是非空有穷的重写规则集合,其中Z是识别符号(或称开始符号),G是文法名。例G1E:E:=E+T E:=T T:=T*F T:=F F:=(E)F:=i G2E:E:=E+T|T T:=T*F|F F:=(E)F:=i GE:E:=T+T T:=F*F F:=(E)|i文法的四要素:VN,VT,P,ZP有穷非空的重写规则集,识别符号Z VN,3.应用文法产生语言的句子 G:1.:=2.:=3.:=4.:=5.:=Peter 6.:=Berry7.:=river8.:=swims9.:=in,例 试以文法G 为例考察如何应用文法 来生成句子。替换为句
8、子=主语 谓语 状语(规则1)=名词 谓语 状语(规则2)=Peter 谓语 状语(规则5)=Peter 动词 状语(规则3)=Peter swims 状语(规则8)=Peter swims 介词 名词(规则4)=Peter swims in 名词(规则9)=Peter swims in river(规则7),应用文法生成句子的步骤:步骤1 以识别符号为当前符号串;步骤2 对当前符号串中的一个非终结符号进行替换,把它替换为以此非终结符号为左部的规则之右部符号串,生成新的当前符号串;步骤3 重复步骤2,直到当前符号串中不包含非终结符号,最终不包含非终结符号的符号串就是所生成的句子。说明:每步的当
9、前符号串将称为句型,最终的终结符号串称为句子。,按上述步骤应用各个规则,可生成:Berry swims in river 甚至可生成:river swims in Peter 表明:语法上的正确性不能保证语义上的正确性。对当前句型中任一非终结符号进行替换,都将生成新的句型,最终生成句子。但宜用系统的方式进行推导,如,每步对最左的或最右的非终结符号进行替换。这时,分别称为最左推导与最右推导。引进句子生成中的两个重要概念:推导与归约。,直接推导:=xUy=xuy 句子=主语 谓语 状语 主语 谓语 状语=名词 谓语 状语 名词 谓语 状语=Peter 谓语 状语 Peter 谓语 状语=Peter
10、 动词 状语 Peter 动词 状语=Peter swims 状语 Peter swims 状语=Peter swims 介词 名词 Peter swims 介词 名词=Peter swims in 名词 Peter swims in 名词=Peter swims in river,直接推导时,给定 v=xUy,找到规则U:=u,把u代替U,得到 w=xuy称v直接推导到w,记为:v=w 或 xUy=xuy,推导(直接推导序列):=+=主语 谓语 状语=名词 谓语 状语=Peter 谓语 状语=Peter 动词 状语=Peter swims 状语=Peter swims 介词 名词=Peter
11、 swims in 名词=Peter swims in river 推导时,给定符号串v,找到 v=u1=u2=un-1=w,得到符号串w,称v推导到w,记为:v=+w。一般,从识别符号开始推导,例如,=+Peter 谓语 状语=+Peter swims in river 推导长度:直接推导的步数。,直接推导:=直接推导时,给定v=xUy,在其中找出U,应用规则U:=u,得到 w=xuy,称v直接推导到w,或w直接归约到v,记为 v=w 一般,总有:U:=u xUy=xuy推导:=+推导时,给定符号串v,找出直接推导序列:v=u1=u2=un-1=w得到符号串w,称v推导到w,或w归约到v,记
12、为:v=+w n称为推导的长度。广义推导:=*若 v=+w 或 v=w,则称v广义推导到w,或广义归约到v。,对照:直接推导v=w(U:=u v=xUy w=xuy)(推导长度=1)推导 v=+w(v=u1=un-1=w)(推导长度1)广义推导v=*w(v=+w 或 v=w)(推导长度0)通常考虑的都是从识别符号出发的推导:Z=*x x(VN VT)+直接归约:v=w w直接归约为v 归约:v=+w w归约为v 广义归约:v=*w w广义归约为v 请对照比较推导与归约这两个概念。,重要概念:句型、句子 句型:Z=*x,x(VNVT)+句子:Z=*x,x VT+例 Peter swims in
13、river注意:句子和在概念上的区别注意:应用文法生成句子仅是形式上的。例 river swims in Peter,注:句子也是句型,但句型不一定是句子。,文法产生句型和句子的例子,【例】设有文法GZ:Z:=aZb|有推导:Z=*Z=*aZb=aaZbb=*aaabbb可见,符号串,aZb,aaZbb和aaabbb都是文法GZ的句型,而 和aaabbb才是文法GZ的句子。,30,文法产生句型和句子的例子,【例】设有文法GE:E:=E+T|E-T|T T:=T*F|T/F|F F:=(E)|i 试证明i+i*i是它的一个句子。分析:只有证明i+i*i可由文法G从开始符号E推导出,即可证明i+i
14、*i是它的一个句子。证明:E E+T E+T*F E+T*i E+F*i E+i*i T+i*i F+i*i i+i*i 即有E*i+i*i 又因i+i*i中的每个符号均为终结符号,故i+i*i是它的一个句子。,思考,设计编程语言时,是先设计语言形式,还是先设计BNF形式的文法?例如要表示形如 i+i,i+i*i的表达式建议:学习时注意积累,何种典型文法可以得到某种典型的语言形式考试考查:能够由文法写出语言,也能由语言设计出文法,为什么有穷规则集合的文法能定义无穷的语言?文法G:1):=2):=3):=4):=0 5):=1 6):=2 7):=3 8):=4 9):=5 10):=6 11)
15、:=7 11):=8 12):=9VN=,VT=0,1,2,3,4,5,6,7,8,9=1=12=123,=递归地定义规则,即,U:=U,使得有穷个规则可能定义潜在地无穷的语言。,重要概念:短语、简单短语 已知w=xuy是文法G的句型,短语 u:Z=*xUy UVN U=+u 简单短语 u:Z=*xUy UVN U=u 理解:句型w=xuy中 可(直接)归约且(直接)归约后所得新符号串仍为句型 的子符号串u。例 句子 123 中,1、2、3都是简单短语。1、12、123、2、3都是短语。句型 12 中:简单短语有:1、2 短语有:1、1、1、2 句柄:句型中最左的简单短语。,句柄是重要概念之一
16、。归约是自底向上的语法分析关键,何时进行归约则必须依赖句柄。分析句型时,要搞清楚哪些符号串能构成短语和直接短语。,36,求短语、直接短语和句柄的例子,【例】设有文法GE:,求出句型(F+i)T*(ET)的短语、简单短语和句柄。分析:从句型的推导过程中找出其全部短语、直接短语和句柄。,37,可以看出:句型(F+i)T*(ET)包含以下短语:F,i,F+i,(F+i),ET,(ET),T*(ET),(F+i)T*(ET);简单短语有:F,i,ET;句柄为F。注意:选择符号串判断是否短语时,必须同时满足两个条件:1)可归约;2)归约后仍是句型(即可由识别符号推导出),概括,文法G:有穷非空的重写规则
17、集合 四要素:VN,VT,P,Z句型:Z=*t,t(VNVT)+句子:Z=*t,t VT+概念:推导,归约 简单短语,短语,句柄,4.文法句子之生成的实现,实质是推导的构造。要点是推导在计算机内的存储表示。,显然每一“列”(垂直链)中各结点相应的符号组成一个句型。这易于用C语言结构类型实现。以最左推导的建立为例,程序控制流程示意图如下。,由于推导过程中,进行替换的非终结符号可能作为多个规则的左部,在尚未讨论分析技术的情况下,宜于采用交互方式由用户自己选择进行直接推导的规则。这涉及到文法规则在计算机内的存放。文法的存储表示:一种是数组表示 一种是链表表示 例 GE:E:=E+T E:=T T:=
18、T*F T:=F F:=(E)F:=i,为便于处理,以符号的序号代替符号本身:typedef struct int 左部符号序号;int 右部符号串MaxRightPartLength+1;int 右部长度;规则;规则 文法MaxRuleNum+1;,为区分非终结符与终结符,将非终结符的序号+100,文法1中的规则E:=E+T,在计算机内的存储表示:文法1:101,0,101,1,102,3 文法2中的规则E:=T,在计算机内的存储表示:文法2:101,0,102,1 TVT:T在VT中的序号 UVN:U在VN中的序号+100 注意:C语言数组元素的下标值从0开始,已把0号 元素弃之不用。,文
19、法的链式表示:,文法GE的数据结构,GE:E:=E+T E:=T T:=T*F T:=F F:=(E)F:=i,2.2.2 语言的定义,程序设计语言L是一切程序P的集合。PL L+(=VT)语言是相应文法一切句子的集合。L(GZ)=x|Z=*x,x VT+一个文法确定唯一的语言。反之?L(G)=P|=*P,PVT+语言可能是有穷的,也可能是无穷的。,重要概念:递归规则递归 规则左递归:U:=U 一般递归:U:=U 规则右递归:U:=U 文法递归 文法左递归:U=+U 一般递归:U=+U 文法右递归:U=+U递归,使有穷多个规则定义的语言可以是无穷的。,C语言中的规则递归和文法递归 规则左递归有
20、::=规则右递归有::=!文法右递归于::=:=:=if()else 因此,=+也可以说,C语言文法递归于=+,注:同一种语言可设计出不同的文法;注意扩展!,L3=ai bi ci|i 1 G3S:S:=abC|aSBC CB:=CD CD:=BD BD:=BC bB:=bb bC:=bc cC:=ccL4=a2i|i 1 G4S:S:=ACaB Ca:=aaC CB:=DB CB:=E aD:=Da AD:=AC aE:=Ea AE:=,56,文法产生语言的例子,【例1】设有文法GZ:Z:=aaZbb|ab 求该文法所描述的语言。,分析:,语言:,57,文法产生语言的例子,【例2】设有文法G
21、Z:求该文法所描述的语言。分析:由括号组成的终结符号,且左右括号匹配。,【例3】设有文法GZ:求该文法所描述的语言。分析:1后面紧跟的符号必为0或为空,即该文法产生的是不包括两个相邻1的所有0、1串。语言:,概括1.程序设计语言是一切程序的集合;程序是在程序设计语言字母表上按一定规则构造的符号串;程序设计语言是其字母表正闭包的真子集。2.文法是重写规则的集合 文法四要素:VN、VT、P、Z 文法的句型:由识别符号推导所得的符号串。文法的句子:全由终结符号组成的句型。3.语言是一切句子的集合;文法确定,则语言确定,语言给定,但可为该语言构造若干文法。递归,使有穷多个规则能定义无穷的语言。,4.重
22、要概念 句型、句子 推导、归约 短语、简单短语、句柄 递归(规则递归、文法递归),应用文法生成句子的步骤:步骤1 以识别符号为当前句型 步骤2 对当前句型进行直接推导(把其中一个非终结符号替换为以其为左部的规 则之右部符号串)步骤3 重复步骤2,直到无非终结符号可被替换。通常应以系统的有规则的方式进行替换 对最左的非终结符号进行替换(最左推导)对最右的非终结符号进行替换(最右推导),2.3.1 Chomsky文法类和语言类1.Chomsky分类法 对文法四要素概括与抽象。定义:Chomsky文法G=(VN,VT,P,Z)VN VT P Z文法及例:GS:S:=Sc|Bc B:=Bb|Ab A:
23、=Aa|a,2.3 语言的分类,2.3.1 Chomsky文法类和语言类1.Chomsky分类法 对文法四要素概括与抽象。定义:Chomsky文法G=(VN,VT,P,Z)VN VT P Z文法及例:GS:S:=Sc|Bc B:=Bb|Ab A:=Aa|a,G1=(VN,VT,P1,S1)VN=S1,A,B VT=a,b,c P1:S1:=S1c|Bc B:=Bb|Ab A:=Aa|a L(G1)=ai bj ck|i,j,k1G2=(S2,A,a,b,c,P2,S2)P2:S2:=S2c|Ac A:=aAb|ab L(G2)=ai bi ck|i,k1,G3=(S3,B,C,D,a,b,c,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二 文法 语言 ppt 课件
链接地址:https://www.31ppt.com/p-2106398.html