资源描述:
《编译原理(第二版)第3章 文法和语法.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第3章文法和语言教学要求:本章是编译原理课程的理论基础,要求理解文法、语言、规范推导、规范归约和短语、简单短语、句柄的基本概念;掌握语言的求解方法、文法的二义性的判断方法及句型的分析方法。教学重点:上下文无关文法,语言定义一、语言语言是由句子组成的集合,是由一组记号所构成的集合。汉语--所有符合汉语语法的句子的全体英语--所有符合英语语法的句子的全体程序设计语言--所有该语言的程序的全体“我是大学生”是否是该语言的句子?〈句子〉::=〈主语〉〈谓语〉〈主语〉::=〈代词〉
2、〈名词〉〈代词〉::=你
3、我
4、他〈名词〉::=王
5、明
6、大学生
7、工人
8、英语〈谓语〉::=〈动词〉〈直接宾语〉〈动词〉::=是
9、学习〈直接宾语〉::=〈代词〉
10、〈名词〉二、文法一种语言描述工具,用来定义句子的结构,用有限的规则把语言的全部句子描述出来,是以有穷的集合刻划无穷的集合的工具。〈句子〉〈主语〉〈谓语〉〈代词〉〈谓语〉我〈谓语〉我〈动词〉〈直接宾语〉我是〈直接宾语〉我是〈名词〉我是大学生〈句子〉::=〈主语〉〈谓语〉〈主语〉::=〈代词〉
11、〈名词〉〈代词〉::=你
12、我
13、他〈名词〉::=王明
14、大学生
15、工人
16、英语〈谓语〉::=〈动词〉〈直接宾语〉〈动词〉:
17、:=是
18、学习〈直接宾语〉::=〈代词〉
19、〈名词〉三、符号和符号串字母表:元素的非空有穷集合。(符号集)符号:字母表中的元素。例如:汉语的字母表中包括汉字、数字及标点符号等。C语言的字母表是由字母、数字、若干专用符号及IF、FOR之类的保留字组成。任何一种语言可看成是某个符号集上定义的,按一定规则构成的一切基本符号串组成的集合。符号串:由字母表中的符号组成的任何有穷序列称为该字母表上的符号串。形式定义:1.空符号串ε(没有符号的符号串)是上的符号串2.若x是上的符号串,a是的元素,则xa是上的符号串3.y是上
20、的符号串,当且仅当它可以由1和2导出。例如:Σ={a,b}ε,a,b,aa,ab,aabba,…,都是上的符号串注意:符号串中的符号排列是有顺序的。常用大写字母表示符号串,如x=aaca如果z=xy是一符号串,那么:1、x是z的头,y是z的尾;2、如果x非空,那么y是固有尾;如果y非空,那么x是固有头。例:设z=abc,那么z的头是:ε,a,ab,abc(除abc外都是固有头)z的尾是:ε,c,bc,abc(除abc外都是固有尾)4、符号串的运算符号串的长度:符号串中符号的个数.符号串s的长度记为
21、s
22、。ε的长度为0符
23、号串的连接:符号串x、y的连接,是把y的符号写在x的符号之后得到的符号串xy例x=ST,y=abu则xy=STabu
24、x
25、=2,
26、y
27、=3,
28、xy
29、=5εx=xε=x方幂:符号串x自身连接n次得到的符号串xx…xx(n个x)定义为xnx0=ε,x1=x,x2=xx,x3=xxxx=AB,则x0=ε,x1=AB,x2=ABAB,x3=ABABAB对于n>0,xn=xxn-1=xn-1x5、符号串集合若集合A中一切元素都是某字母表上的符号串,则称A为字母表上的符号串集合。两个符号串集合A和B的乘积定义为AB=xy
30、x
31、A且yB若集合A=a,bB=c,d则AB=ac,ad,bc,bd{ε}A=A{ε}=A(∵εx=xε=x)使用*表示上的所有有穷长的串(包括ε)的集合。Σ*称为Σ的闭包。从*中除去ε得到的集合记为+。Σ+称为Σ的正闭包。Σ*=Σ0∪Σ1∪Σ2…∪Σn…Σ+=Σ1∪Σ2…∪Σn…Σ*=Σ0∪Σ+Σ+=ΣΣ*=Σ*ΣΣ+=Σ*-{ε}例:设Σ={0,1},则Σ*={ε,0,1,00,01,10,11,000,001,010,…}例:设Σ={a,b},则Σ*={ε,a,b,aa,ab,ba,bb,aaa
32、,aab,…}Σ+={a,b,aa,ab,ba,bb,aaa,aab,…}四、文法和语言的形式定义1、文法的形式定义1)规则(重写规则、产生式或生成式):是一个有序对(α,β)。记为α→β或α∷=β,其中α∈V+,β∈V*。α称为规则的左部(或生成式的左部)。β称为规则的右部(或生成式的右部)。2)文法G[S]:文法为四元组(VN,VT,P,S)VN:非终结符集VT:终结符集P:产生式(规则)集合S:开始符号(识别符号)VN、VT和P是非空有穷集。S至少在一条规则中作为左部出现。VN∩VT=φ,S∈VNV=VN∪VT,称
33、为文法G的字母表(字汇表)例3.1文法G=(VN,VT,P,S)VN={S},VT={0,1}P={S→0S1,S→01}S为开始符号例3.2文法G=(VN,VT,P,S)VN={标识符,字母,数字}VT={a,b,c,…x,y,z,0,1,…,9}P={<标识符>→<字母><标识符>→<标识符><字母><标识符>→