




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章文法和语言的基本知识本章是编译原理课程的理论基础,要求掌握形式语言的基本术语和概念,重点掌握短语、直接短语、句柄、素短语、规范推导、规范归约。掌握文法和语言的定义,文法的二义性与递归性的判断方法及句型的分析方法,文法分类。熟练使用文法定义程序设计语言的单词和语法成分。对形式语言的理论有一个初步认识。教学目标Monday,December19,2022第2章文法和语言的基本知识本章是编译原理课程的理论基础,要12.1字母表和符号串的基本概念2.2文法和语言的形式定义2.3句型的分析2.4文法和语言的分类教学内容Monday,December19,20222.1字母表和符号串的基本概念教学内容Sunday,De2程序设计语言是一种形式语言,与自然语言既有相似的性质又有本质的不同。最主要的区别是:形式语言的规则简单、严格、无例外、无二义性。编译程序的正确转换建立在对程序设计语言的精确定义和描述基础上。语法——文法是描述语言语法的形式规则语义——语言中各语句的含义语用——从使用者的角度对语言的描述Monday,December19,2022程序设计语言是一种形式语言,与自然语言既有相似的性质又有本质3字母表:符号的非空有限集例:={0,1}
2.1字母表和符号串符号:字母表中的元素例:0,1符号串:由字母表中的符号组成的任何有穷序列例:0,1,01,10,011,..空符号串:无任何符号的符号串,用ε表示
C语言的字母表
A={a,b,…,0,1,…,9,+,-,×,_/,(,),=…if,else,for...}不对如={if,else,for,while}符号就是字符,对吗?Monday,December19,2022字母表:符号的非空有限集例:={0,1}2.1字母4符号串的前缀和后缀:从符号串s的尾部删去若干个(包括0个)符号之后所余下的部分称为s的前缀ε,0,01及011都是符号串011的前缀ε,1,11及011都是符号串011的后缀符号串集合:若集合A中的一切元素都是某字母表上的符号串,则称A为该字母表上的符号串集合。例:={a,b,c}A={a,aa,ac}Monday,December19,2022符号串的前缀和后缀:ε,0,01及011都是5符号串的运算符号串x和y的连接:是把y的符号写在x的符号之后得到的符号串xy
例如x=00,y=11,则xy=0011对于任意一个符号串s,有εs=sε=s符号串的连接运算Monday,December19,2022符号串的运算符号串x和y的连接:是把y的符号写在x的符号之后6符号串自身连接n次得到的符号串sn定义为ss…ss,包括n个s,称为符号串的幂运算
s0=ε,s1=s,s2=ss,……设s=01,则s0=εs1=01s2=0101……符号串的幂运算Monday,December19,2022符号串自身连接n次得到的符号串sn定义为ss…ss,包7设A、B为符号串集合,则A和B的乘积定义为:AB={xy|x∈A,y∈B}例如,A={a,b},B={c,d}则AB=符号串集合的乘积{ac,ad,bc,bd}
Monday,December19,2022设A、B为符号串集合,则A和B的乘积定义为:AB={xy8有符号串集合A,定义A0={ε},A1=A,A2=AA,A3=AAA,……An=An-1A=AAn-1,n>0例如,A={0,1},则A0=A1=A2=A3=符号串集合的幂运算{ε}{0,1}{00,01,10,11}{000,001,010,011,100,101,110,111}Monday,December19,2022有符号串集合A,定义A0={ε},A1=A,9设A是符号串集合,定义
A+=A1∪A2∪A3∪……∪An∪…… 称为集合A的正闭包。
A*=A0∪A+
称为集合A的闭包。例:A={x,y}A+=?
A*=?{x,y,xx,xy,yx,yy,xxx,xxy,xyx,xyy,……}
A1
A2
A3{ε,x,y,xx,xy,yx,yy,xxx,xxy,xyx,xyy,……}
A0A1
A2
A3符号串集合的闭包运算Monday,December19,2022设A是符号串集合,定义例:A={x,y}{x,10Σ的闭包*表示上的一切符号串(包括ε)组成的集合Σ的正闭包+表示上的除ε外的所有符号串组成的集合例:Σ={a,b}Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…}Σ+={a,b,aa,ab,ba,bb,aaa,aab,…}
Monday,December19,2022Σ的闭包*例:Σ={a,b}Sunday,Decembe11若A为某语言的字母表
A={a,b,…,0,1,…,9,+,-,×,_/,(,),=…if,else,for...}B为单词集B={if,else,for,……,<标识符>,<常量>,……}则BA*。语言的句子是定义在B上的符号串。若令C为句子集合,则CB*,程序C为什么对符号、符号串、符号串集合以及它们的运算感兴趣?Monday,December19,2022若A为某语言的字母表为什么对符号、符号串、符号串集合以及它们12语言是由句子组成的集合,是由一组符号所构成的集合字母表上的一个语言是上的一些符号串的集合字母表上的每个语言是*的一个子集
集合{a,aa,aaa,…} 或表示为{w|w∈Σ*且w=an,n≥1}为字母表上的一个语言例如:字母表Σ={a,b},Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…}
集合{ab,aabb,aaabbb,…,anbn,…}或表示为{w|w∈Σ*且w=anbn,n≥1}为字母表上的一个语言Monday,December19,2022语言是由句子组成的集合,是由一组符号所构成的集合集合{a,a132.2文法和语言的形式定义文法是对语言结构的定义与描述。(或称为“语法”)。<赋值语句>::=<标识符>“=”<表达式><表达式>::=<表达式>“+”<表达式>
|
<表达式>“*”<表达式><表达式>::=“(”<表达式>“)”|
<标识符>
|
<整数>
|
<实数>
Monday,December19,20222.2文法和语言的形式定义文法是对语言结构的定义与描述。14文法的直观概念:以汉语中的“我是大学生”为例。采用BNF来表示汉语句子的构成规则为:〈句子〉::=〈主语〉〈谓语〉〈主语〉::=〈代词〉|〈名词〉〈代词〉::=我|你|他〈名词〉::=王明|大学生|工人|英语〈谓语〉::=〈动词〉〈直接宾语〉〈动词〉::=是|学习〈直接宾语〉::=〈代词〉|〈名词〉根据上述规则,“我是大学生”的构成符合上述规则,而“我大学生是”不符合,我们说它不是句子。这些规则成为我们判别句子结构合法与否的依据。换句话说,这些规则看成是一种元语言,用它描述汉语。这种的语言描述成为文法。
文法的四部分①一组终结符号(语言的基本符号)②一组非终结符号(语法单位)③一个开始符号(一个特殊的非终结符号,最感兴趣的语法单位)④一组规则(也称产生式或产生规则)Monday,December19,2022文法的直观概念:以汉语中的“我是大学生”为例。采用BNF来15文法的形式定义:P10的定义1.1例2-1,文法G=(,,P,S)是描述标识符的文法,则其中:={标识符,字母,数字}
={a,b,c….x,y,z,0,1,2,3…9}P={<标识符><字母>|<标识符><字母>|<标识符><数字><字母>a|b|c|….|z<数字>0|1|2|….|9}S=<标识符>Monday,December19,2022文法的形式定义:P10的定义1.1Sunday,Decem16赋值语句标识符表达式表达式表达式表达式标识符整数标识符表达式y=x+r*6y=x+r*6Monday,December19,2022赋值语句标识符表达式表达式表达式表达式标识符整数标识符表达式17例:有一句子:“我是大学生”。这是一个在语法、语义上都正确定句子,该句子的结构(称为语法结构)是由它的语法决定的。在本例中它为“主谓结构”。如何定义句子的合法性?有穷语言:只需逐一列举句子无穷语言:使用文法定义句子的结构,用适当条数的规则把语言的全部句子描述出来。文法是以有穷的集合刻划无穷的集合的工具。文法的非形式定义Monday,December19,2022例:有一句子:“我是大学生”。这是一个18
1.语法规则:我们通过建立一组规则,来描述句子的语法结构。规定用“::=”表示“由……组成”。<句子>::=<主语><谓语><主语>::=<代词>|<名词><代词>::=你|我|他<名词>::=王民|大学生|工人|英语<谓语>::=<动词><直接宾语><动词>::=是|学习<直接宾语>::=<代词>|<名词>文法的BNF表示Monday,December19,20221.语法规则:我们通过建立一组规则,来描述句子的语法结构192.由规则推导句子:有了一组规则之后,可以按照一定的方式用它们去推导或产生句子。推导方法:从一个要识别的符号开始推导,即用相应规则的右部来替代规则的左部,每次仅用一条规则去进行推导。<句子>=><主语><谓语><主语><谓语>=><代词><谓语> …………这种推导一直进行下去,直到所有带<>的符号都由终结符号替代为止。Monday,December19,20222.由规则推导句子:有了一组规则之后,可以按照一定的方式<句20<句子>=><主语><谓语>=><代词><谓语>=>我<谓语>=>我<动词><直接宾语>=>我是<直接宾语>=>我是<名词>=>我是大学生<句子>::=<主语><谓语><主语>::=<代词>|<名词><代词>::=你|我|他<名词>::=王民|大学生|工人|英语<谓语>::=<动词><直接宾语><动词>::=是|学习<直接宾语>::=<代词>|<名词>推导方法:从一个要识别的符号开始推导,即用相应规则的右部来替代规则的左部,每次仅用一条规则去进行推导。Monday,December19,2022<句子>=><主语><谓语>=><代词><谓语>21例:有一英语句子:Thebigelephantatethepeanut.<句子>::=<主语><谓语><主语>::=<冠词><形容词><名词><冠词>::=the<形容词>::=big<名词>::=elephant<谓语>::=<动词><宾语><动词>::=ate<宾语>::=<冠词><名词><名词>::=peanutMonday,December19,2022例:有一英语句子:Thebigelephantate22<句子>=><主语><谓语>=><冠词><形容词><名词><谓语>=>the<形容词><名词><谓语>=>thebig<名词><谓语>=>thebigelephant<谓语>=>thebigelephant<动词><宾语>=>thebigelephantate<宾语>=>thebigelephantate<冠词><名词>=>thebigelephantatethe<名词>=>thebigelephantatethepeanut<句子>::=<主语><谓语><主语>::=<冠词><形容词><名词><冠词>::=the<形容词>::=big<名词>::=elephant|peanut<谓语>::=<动词><宾语><动词>::=ate<宾语>::=<冠词><名词>Monday,December19,2022<句子>=><主语><谓语>=><冠词><形容词>23上述推导可写成<句子>=>thebigelephantatethepeanut+说明:(1)有若干语法成分同时存在时,我们总是从最左的语法成分进行推导,这称之为最左推导,类似的有最右推导(一般推导)。(2)从一组规则可推出不同的句子,如以上规则还可推出“大象吃象”、“大花生吃象”、“大花生吃花生”等句子,它们在语法上都正确,但在语义上都不正确。所谓文法是在形式上对句子结构的定义与描述,而未涉及语义问题。Monday,December19,2022上述推导可写成<句子>=>thebigelephan24例2-3,利用例2-2中的文法,推导出文法的句子012:最左推导:N
=>S=>SD=>SDD=>DDD=>0DD=>01D=>012最右推导:N=>S=>SD=>S2=>SD2=>S12=>D12=>012在这里,NS为长度为1的推导,NSD为长度为2的推导N012为长度为7的推导。其中,对于NS来说,S是N的直接推导,或N是S的直接归约。一些规定:=>推导=>规范推导长度大于零的推导长度可为零的推导长度为n的推导
NSSSD|DD0|1|2…|9Monday,December19,2022例2-3,利用例2-2中的文法,推导出文法的句子012:N25课堂作业:设有文法G[S]:S→a|ε|(T)T→T,S|S请给出句子(a,(a,a))的最左、最右推导。其最左推导为:S=>(T)=>(T,S)=>(S,S)=>(a,(T))=>(a,(T,S))=>(a,(S,S))=>(a,(a,S))=>(a,(a,a))其最右推导为:S=>(T)=>(T,S)=>(T,(T))=>(T,(T,S))=>(T,(T,a))=>(T,(S,a))=>(T,(a,a))=>(S,(a,a))=>(a,(a,a))=>(a,S)Monday,December19,2022课堂作业:其最左推导为:S=>(T)=>(T,S)=>(S26文法G[S]=(VN,VT,P,S) VN:非终结符号集 VT:终结符号集 P:产生式或规则的集合S:开始符号(识别符号)S∈VN,S至少要在一条规则中作为左部出现V=VN∪VT称为文法的字母表补:规则的定义α::β或αβα∈V+且至少有一个非终结符,而β∈(VN∪VT)*
文法的形式定义Monday,December19,2022文法G[S]=(VN,VT,P,S)V=VN∪VT补:规27G=(VT,VN,S,P),其中:VN={表达式}VT={+,*,(,),i}S=〈表达式〉P={〈表达式〉→〈表达式〉+〈表达式〉〈表达式〉→〈表达式〉*〈表达式〉〈表达式〉→(〈表达式〉)〈表达式〉→i}【例2.1】程序语言中只含+、*运算的算术表达式,用i表示变量或常数,其文法可以表示为:
描述了表达式的语法规则Monday,December19,2022G=(VT,VN,S,P),其中:【例2.1】程序语28几点说明:产生式左边符号构成集合VN,且S∈VN给定一个文法,实际只需给出产生式集合,并指定识别符号G[表达式]:〈表达式〉→〈表达式〉+〈表达式〉〈表达式〉→〈表达式〉*〈表达式〉〈表达式〉→(〈表达式〉)〈表达式〉→iVN:代表程序的语法成份,如“<表达式>”,它不会出现在程序中VT:会出现在程序中,如i+iMonday,December19,2022几点说明:产生式左边符号构成集合VN,且S∈VN给定29有些产生式具有相同的左部,可以和在一起G[E]:E→E+E|E*E|(E)|i
Monday,December19,2022有些产生式具有相同的左部,可以和在一起G[E]:Sunday30G[S]:S→L|SL|SDL→a|b|…|zD→0|1|…|9【例2.2】某种语言的标识符是以字母开头的字母数字串,如果用L表示<字母>,D表示<数字>,用S表示字母数字串描述了标识符的词法规则Monday,December19,2022G[S]:【例2.2】某种语言的标识符是以字母开头的字母数字31例:无符号整数的文法:G[<无符号整数>]<无符号整数>→<数字串><数字串>→<数字串><数字>|<数字><数字>→0|1|2|3|……|9描述了无符号整数的词法规则Monday,December19,2022例:无符号整数的文法:描述了无符号整数的词法规则Sunda32说明:终结符集是输入字符集,它是构成单词的最基本元素终结符集是经词法分析识别后的单词集,如变量i,运算符+、*和分界符(、),它们被视为语法分析中最基本元素描述语法规则的文法G[E]:E→E+E|E*E|(E)|i
描述词法规则的文法G[S]:S→L|SL|SDL→a|b|…|zD→0|1|…|9Monday,December19,2022说明:终结符集是输入字符集,它是构成单词的最基本元素终结符集33文法的表示方法3.语法图2.EBNF:扩充的BNF的元符号:<,>,::=,|,{,},[,](,)
字母
字母数字
数字
标识符无符号整数1.BNF的元符号:<,>,::=,|Monday,December19,2022文法的表示方法3.语法图2.EBNF:扩充的BNF的元符34推导的形式定义如果α→β是文法G=(VT,VN,S,P)的一个产生式,γ,δ∈V*,有符号串x,y满足x=γαδ,y=γβδ,xy则称y是x的直接推导,也可以说,y直接归约到x,记作xy。直接推导:用产生式的右部替换产生式的左部直接归约:用产生式的左部替换产生式的右部的过程例:xSSDLDaDa1=yG[S]:S→L|SL|SDL→a|b|…|zD→0|1|…|9Monday,December19,2022推导的形式定义如果α→β是文法G=(VT,VN,S,P)的一35S=>SD,使用规则S→SD,其中γ=δ=ε;SD=>LD,使用规则S→L,其中γ=ε,δ=D;LD=>aD,使用规则L→a,其中γ=ε,δ=D;aD=>a1,使用规则D→1,其中γ=a,δ=ε。G[S]:S→L|SL|SDL→a|b|…|zD→0|1|…|9根据文法和推导的定义,可推出终结符号串如果α→β是文法G=(VT,VN,S,P)的一个产生式,γ,δ∈V*,有符号串x,y满足x=γαδ,y=γβδ,xy则称y是x的直接推导,也可以说,y直接归约到x,记作xy。Monday,December19,2022S=>SD,使用规则S→SD,其中γ=δ=ε;G[S]36<无符号整数><数字串><数字串><数字><数字><数字>1<数字>10(6)==>==>(1)==>(3)(5)==>==>(2)当符号串已没有非终结符号时,推导就必须终止。因为终结符不可能出现在规则左部,所以将在规则左部出现的符号称为非终结符号。例如:G[<无符号整数>](1)<无符号整数>→<数字串>(2)<数字串>→<数字串><数字>(3)<数字串>→<数字>(4)<数字>→0|1|2|3|……|9Monday,December19,2022<无符号整数><数字串>37如果存在直接推导序列:xy0y1y2…yn=y则称这个序列是一个从x至y的长度为n(n>0)的推导,或称y归约到x,记作xy。若有xy,或x=y,则记作xy。+=>
+=>
*=>
例:xSSDLDaDa1=yG[S]:S→L|SL|SDL→a|b|…|zD→0|1|…|9+=>
记作xy或记作xy*=>
例:xSSDLDaDa1=yG[S]:S→L|SL|SDL→a|b|…|zD→0|1|…|9+=>
记作xy或记作xy*=>
Monday,December19,2022如果存在直接推导序列:++*例:xSSD38文法G[S] (1)句型:x是句型
Sα,且α∈V*; (2)句子:x是句子
Sα,且α,∈VT*; (3)语言:L(G[S])={α|α∈VT*,Sα};++文法G[S]所产生的所有句子的集合*句子是所有终结符号组成的句型语言的形式定义G[E]:E→E+E|E*E|(E)|i
句型:E+EE+E*EE+E*iE+i*i句子:i+ii*ii+i*i(i+i)*iMonday,December19,2022文法G[S]++文法G[S]所产生的*句子是所有终结符39形式语言理论可以证明以下两点:
(1)G→L(G);
(2)L(G)→G1,G2,……,Gn;已知文法,求语言,通过推导;已知语言,构造文法,无形式化方法,更多是凭经验Monday,December19,2022形式语言理论可以证明以下两点:Sunday,Dece40例:G[S]S::=aSb|ab求其所产生的语言。若S::=aSb|ε,如何?L(G[S])={anbn|n≥1}L(G[S])={anbn|n≥0}已知文法,求语言,通过推导课堂练习1:G[S]S::=bAA::=aA|aL(G[S])={ban|n≥1}课堂练习2:G[S]S::=ABA::=aA|aB::=bB|bL(G[S])={ambn|m,n≥1}Monday,December19,2022例:G[S]若S::=aSb|ε,如何?L(G[S41例:{abna|n≥1},构造其文法定义.G和G’是两个不同的文法,若L(G)=L(G’),则G和G’为等价文法。若n≥0,如何?课堂练习3:{anbnci|n≥1,i≥0},构造其文法
G[S]:S→ABA→aAb|abB→cB|εG1[S]:S→aBa, B→b|bBG2[S]:S→aBa, B→b|BbG1[S]:S→aBa, B→ε|bBG2[S]:S→aBa, B→ε|BbMonday,December19,2022例:{abna|n≥1},构造其文法42例:构造一个文法,使其描述的语言是无符号整数。G[S]:S→SD|DD→0|1|2|3|4|5|6|7|8|9G[<无符号整数>]<无符号整数>→<数字串><数字串>→<数字串><数字>|<数字><数字>→0|1|2|3|……|9Monday,December19,2022例:构造一个文法,使其描述的语言是无符号整数。G[S]:G43编译感兴趣的问题是:给定x,G,求xL(G)?x算法1算法2xL(G)?Gyn出错处理停机<赋值语句>∷=<标识符>=<表达式>Monday,December19,2022编译感兴趣的问题是:给定x,G,求xL(G)?x441.递归规则:规则右部有与左部相同的符号 左递归规则:A→A…右递归规则:A→…A自嵌入递归规则:A→…A…递归文法2.递归文法:含有递归规则的文法,为直接递归文法A→BaB→Ab
G[S]:S→L|SL|SDL→a|b|…|zD→0|1|…|9间接递归文法Monday,December19,20221.递归规则:规则右部有与左部相同的符号递归文法2.递归文法45递归文法的优点:可用有穷条规则,定义无穷语言例:对于前面给出的无符号整数的文法是有递归文法,用12条规则就可以定义出所有的无符号整数。若不用递归文法,那将要用多少条规则呢?!G[S]:S→SD|DD→0|1|2|3|4|5|6|7|8|9Monday,December19,2022递归文法的优点:可用有穷条规则,定义无穷语言例:对于前46左递归文法的缺点:不能用自顶向下的方法来进行语法分析会造成死循环(后面将详细论述)G[E]:E→i+i|i*i|(i+i)*i该文法所描述的语言为L(G)={i+i,i*i,(i+i)*i},无法表示无穷的表达式语言Monday,December19,2022左递归文法的缺点:不能用自顶向下的方法来进行语法分析会造成死472.3句型的分析句型的分析:是指识别输入的符号串是否为某一文法的句型(或句子)的过程对于同一个句型或句子,可以通过不同的推导序列推导出来,这是因为在推导过程中所选择的非终结符的次序不同
G[E]:E→E+E|E*E|(E)|ii+i*i的推导序列有哪些?
Monday,December19,20222.3句型的分析句型的分析:是指识别输入的符号串是否为某48最左(右)推导指对于一个推导序列中的每一直接推导,被替换的总是当前符号串中的最左(右)非终结符号。最右推导也称为规范推导。规范推导的逆过程,称为最左归约,也称为规范归约。用最左推导所推导出的句型称为最左句型用最右推导所推导出的句型称为最右句型,通常称为规范句型规范推导与规范归约Monday,December19,2022最左(右)推导指对于一个推导序列中的每一直接推导,被替换的总49赋值语句标识符表达式表达式表达式表达式标识符整数标识符表达式y=x+r*6语法分析的结果-----语法树语法树与文法的二义性Monday,December19,2022赋值语句标识符表达式表达式表达式表达式标识符整数标识符表达式501.语法树:描述一个句子的语法结构<句子><主语><谓语><冠词><形容词><名词><动词><宾语><冠词><名词>Thebigelephantatethepeanut语法成分(非终结符)单词符号(终结符号)Monday,December19,20221.语法树:描述一个句子的语法结构<句子><主语><谓语><51语法树:句子结构的图示表示法,它是一种有向图,由结点和有向边组成。
结点:符号 根结点:识别符号 中间结点:非终结符 叶结点:终结符或非终结符
有向边:表示结点间的派生关系
SUVabcdMonday,December19,2022语法树:句子结构的图示表示法,它是一种有向图,由 结点:符52句型推导过程<==>句型语法树的生长过程 由推导构造语法树1从识别符号开始,逐步建立推导序列。由根结点开始,自上而下建立语法树。Monday,December19,2022句型推导过程<==>句型语法树的生长过程 由推导构造语法53例:G[<无符号整数>] 句型10[<无符号整数>]<无符号整数><数字串><数字串>==><数字串><数字><数字串><数字>==>0<数字串>0==><数字><数字>0==>110==>规范推导Monday,December19,2022例:G[<无符号整数>] 句型10[<无符号整数>]<无符号54 由语法树构造推导2自下而上地修剪子树的末端结点,直至把整棵树剪掉(留根),每剪一次对应一次规约。从句型开始,自右向左地逐步进行规约,建立推导序列。Monday,December19,2022 由语法树构造推导2自下而上地修剪子树的末端结点,直至把55[<无符号整数>]<数字串><数字><数字串><数字>01<无符号整数>==><数字串><数字>==><数字串>0==>10<数字>0==><数字串>==>规范规约与规范推导互为逆过程Monday,December19,2022[<无符号整数>]<数字串><数字><数字串><数字>01<56课堂练习:对于句子i+i*i,给出两种不同的规范推导,并画出语法树定义:若一个文法的某句子存在两个不同的最右(最左)推导,则该文法是二义性的,否则是无二义性的。2.文法的二义性G[E]:E→E+E|E*E|(E)|i
Monday,December19,2022课堂练习:定义:若一个文法的某句子存在两个不同的最右(最左)57EEE+EE*iiiEEE*EE+iii这两种不同的推导对应了两种不同的语法树(1)E==>E+E==>E+E*E==>E+E*i==>E+i*i==>i+i*i(2)E==>E*E==>E*i==>E+E*i==>E+i*i==>i+i*iMonday,December19,2022EEE+EE*iiiEEE*EE+iii这两种不同的推导对应58若文法是二义性的,则在编译时就会产生不确定性文法的二义性是不可判定的,即不可能构造出一个算法,通过有限步骤来判定任一文法是否有二义性。可以采用两种途径来解决文法的二义性问题1不改变文法中原有的规则,仅加进一些语法的非形式规定。规定“*”运算优先级高于“+”运算,且服从左结合改写文法,把排除二义性的规则合并到原有文法中2Monday,December19,2022若文法是二义性的,则在编译时就会产生不确定性可以采用两种途径59EiET+TF*iFTFi例:算术表达式的文法E::=E+T|TT::=T*F|FF::=(E)|iG[E]:E→E+E|E*E|(E)|i
Monday,December19,2022EiET+TF*iFTFi例:算术表达式的文法E::=60短语与句柄P18定义:设G[<S>]是一个文法,并设w=xuy是该文法的一个句型。若<S>*x<U>y且<U>+u,则称u为句型w=xuy对非终结符<U>的一个短语。若<S>*x<U>y且<U>u,则称u为句型w=xuy相对于非终结符<U>的一个简单(直接)短语。任何一个句型的最左简单短语称为柄短语(句柄)。含有终结符的短语,并且不存在也具有这种性质真子串的短语称为素短语。P72Monday,December19,2022短语与句柄P18定义:设G[<S>]是一个文法,并设w=61例:表达式文法G[<E>]:<E>→<E>+<T>|<T> <T>→<T>*<F>|<F> <F>→(<E>)|i对句型i*(<E>)的推导为: <E><T><T>*<F><F>*<F>i*<F>i*(<E>)Monday,December19,2022例:表达式文法G[<E>]:Sunday,Decembe62对应的推导树为:表达式文法G[<E>]:<E>→<E>+<T>|<T><T>→<T>*<F>|<F><F>→(<E>)|iMonday,December19,2022对应的推导树为:表达式文法G[<E>]:Sunday,D63语法树与短语使用推导树计算句型(句子)的短语简单、明了推导<S>*x<U>y <U>+u等价于: 等价于: <S> <U> x<U>y uMonday,December19,2022语法树与短语使用推导树计算句型(句子)的短语简单、明了Sun64因此称u是句型xuy(对<U>)的一个短语等价于: <S> x<U>y u以为子树根的叶结点的全体<U>Monday,December19,2022因此称u是句型xuy(对<U>)的一个短语以为子树65若子树高度为1,则u还是直接短语,最左直接短语为句柄。若u是含有终结符的最小的短语,则为素短语,句型最左边的素短语称为最左素短语(P72)。例:上例的文法G[<E>]和句型i*(<E>)容易从推导树中看出:短语:i,i*(<E>),(<E>)直接短语:i,(<E>)句柄(左直接短语):i素短语:i,(<E>)最左素短语:iMonday,December19,2022若子树高度为1,则u还是直接短语,最左直接短语为句柄。若u66例,找出针对左边文法的句型T+T*F+a的所有短语、简单短语(直接短语)、素短语和句柄。此句型对应的分析树为:EE+TE+TTT*FFa短语:直接短语:句柄:E→E+TE→TT→T*FT→FF→(E)F→aTT*FT+T*FT+T*F+aaTT*FaT素短语:T*Fa最左素短语:T*FMonday,December19,2022例,找出针对左边文法的句型T+T*F+a的所有短语、简单短语67课堂练习设有文法G[E]如下:E→E+T|E-T|TT→T*F|T/F|FF→(E)|id请给出句型(F+id)-T*(E-T)的所有短语、简单短语和句柄。EE-TTF(E)E+TTFFidT*F(E)E-T短语有:FidF+id(F+id)E-T(E-T)T*(E-T)(F+id)-T*(E-T)直接短语有:F,id,E-T句柄有:F素短语:idE-T最左素短语:idMonday,December19,2022课堂练习设有文法G[E]如下:EE-TTF(E)E+TTFF682.4文法和语言的分类
形式语言(乔姆斯基):通过抽象,对语言进行形式化描述用一组数学符号和规则来描述的语言称为形式语言*的任何子集称作上的形式语言L(G[S])={α|α∈VT*,Sα}+由文法定义语言文法和语言分类:0型、1型、2型、3型这几类文法的差别在于对产生式施加不同的限制。Monday,December19,20222.4文法和语言的分类形式语言(乔姆斯基):通过抽69 0型语言:L00型文法称为无约束短语结构文法。规则的左部和右部都可以是符号串,一个短语可以产生另一个短语。 0型:P:α::=β 其中α∈V*且至少含有一个非终结符,β∈V*Monday,December19,2022 0型语言:L00型文法称为无约束短语结构文法。规则700型文法G[S]:S→ABS|ABAB→BAA→0B→1L(G[S])={x|x是由n个01或10组成的二进制数字串,n≥1}该文法产生的语言为Monday,December19,20220型文法L(G[S])={x|x是由n个01或10组成的二进71S→ACaBCa→aaCCB→DBaB→Ba CB→E
aD→DaAD→ACaE→EaAE→ε例:0型文法G[S]:Monday,December19,2022S→ACaB例:0型Sunday,December18,72 1型文法:P:αAβ::=αγβ 其中A∈VN,α,β∈V*,γ∈V+
注意:规则的左边的字符串长度≤右边字符串长度1型语言:L1称为上下文敏感或上下文有关。也即只有在α、β这样的上下文中才能把A改写为γMonday,December19,2022 1型文法:1型语言:L1称为上73S→aSBES→aBEBE→bEaB→ab bB→bb bE→beeE→ee例:1型(上下文有关)文法G[S]:S→ACaBCa→aaCCB→DBaB→Ba CB→E
aD→DaAD→ACaE→EaAE→ε例:0型文法G[S]:Monday,December19,2022S→aSBE例:1型(上下文有关)文法G[S]:S→ACaB74 2型:P:A::=β 其中A∈VN, β∈V*2型语言:L2称为上下文无关文法。也即把A改写为β时,不必考虑上下文。Monday,December19,2022 2型:P:A::=β2型语75例:2型(上下文无关)文法
文法G[S]: S→AB A→BS|0 B→SA|1S→εMonday,December19,2022例:2型(上下文无关)文法Sunday,December762型(上下文无关)文法
文法G[S]: S→0A|1BA→1S|1B→0S|0该文法产生的语言为:L(G[S])={anbn|n≥1}Monday,December19,20222型(上下文无关)文法该文法产生的语言为:L(G[S])={77(右线性)
P:A:=a 或A::=aB其中A、B∈VNa∈VT 3型语言:L3又称正则语言.3型文法称为正则文法。它是对2型文法进行进一步限制。左线性和右线性文法是相互等价的
注意:每个产生式右边至少有一个终结符出现(左线性)
P:A:=a 或A::=Ba其中A、B∈VNa∈VT 3型文法:Monday,December19,2022(右线性) 3型语言:L3又称正则语言78G[S]: S→0A|1B|0 A→0A|1B|0S B→1B|1|0G[I]: I→lT I→l T→lT
T→dT
T→l
T→d
例:3型文法Monday,December19,2022G[S]: G[I]: I→lT例:3型文法Sunday793型文法(正则文法)
G[S]:S→0A|1B|0 A→0A|1B|0S B→1B|1|02型(上下文无关)文法G[S]:S→BAA→1S|1B→0S|01型(上下文有关)文法G[S]:S→aSBES→aBEBE→bEaB→ab bB→bb bE→beeE→ee0型文法G[S]:S→ACaBCB→E
Ca→aaCaD→DaCB→DBAD→ACaB→Ba aE→EaMonday,December19,20223型文法(正则文法) 2型(上下文无关)文法1型(上下文有80有关文法的实用限制1、若文法中有如U::=U的规则,则这就是有害规则,它会引起二义性,而无任何用处。例如存在U::=U,U::=a|b,则有两棵语法树:UaUUa文法中不能含有有害规则和多余规则Monday,December19,2022有关文法的实用限制1、若文法中有如U::=U的规则,则这就812、多余规则:(1)某条规则U::=u的左部非终结符U(U不是识别符号),不在任何其他规则右部出现,即所有的推导始终不会用到此规则。(2)在推导句子的过程中,一旦使用了该规则,将推不出任何终结符号串。即该规则中含有推不出任何终结符号串的非终结符。例如给定G[S],若其中关于U的规则只有如下一条: U::=xUy该规则是多余规则。若还有U::=a,则此规则并非多余若某文法中无有害规则或多余规则,则称该文法是压缩过的。Monday,December19,20222、多余规则:例如给定G[S],若其中关于U的规则82根据上述讨论,L0L1L2L30型文法可以产生L0、L1、L2、L3,但2型文法只能产生L2,不能产生L1。∪∪∪2型文法1型文法0型文法3型文法四种文法之间的逐级“包含”关系Monday,December19,2022根据上述讨论,L0L1L2L3∪∪∪2型文832型文法(不确定的下推自动机)1型文法(不确定的界限自动机)0型文法(图灵机)3型文法(有限自动机)形式语言与自动机Monday,December19,20222型文法(不确定的下推自动机)1型文法(不确定的界限自动机)84图灵机Monday,December19,2022图灵机Sunday,December18,2022852.5PL/0编译程序概述PL/0编译程序pcode解释程序PL/0源程序pcode代码PASCAL语言的子集,功能简单,结构清晰,可读性强,具备了一般高级语言的必备部分Monday,December19,20222.5PL/0编译程序概述PL/0编译程序pcode解释程86PL/0语言的功能(1)赋值语句;(2)语句串,即begin…end语句;(3)条件语句,即if语句;(4)循环语句,即while语句;(5)过程调用语句,即call语句;(6)输入语句,即read语句;(7)输出语句,即write语句。语句类型Monday,December19,2022PL/0语言的功能(1)赋值语句;语句类型Sunday,D87(1)常量说明(全局)(2)变量说明;(3)过程说明。说明类型数据类型整型Monday,December19,2022(1)常量说明(全局)说明类型数据类型整型Sunday,D88标识符(字母开始的字母数字串)的有效长度是10数字最多为14位过程无参,可嵌套(最多三层)定义,可递归调用变量的作用域同PASCAL13个保留字:if,then,while,do,read,write,call,begin,end,const,var,procedure,oddMonday,December19,2022标识符(字母开始的字母数字串)的有效长度是10Sunday,89PL/0程序示例consta=10;varb,c;procedurep;beginc:=b+aend;beginread(b);whileb#0dobegincallp;write(2*c);read(b)endend.不区分大小写Monday,December19,2022PL/0程序示例consta=10;不区分大小写Sund90EBNF在此基础上又增加了三种元符号,约定如下:{}表示其内语法成分可以重复例如:A→Aα|β,可改写为:A→{α}β。[]表示方括号内的成分为任选项;例如:A→αβ|α,可改写为:A→α[β]。()例如:A→αβ1|αβ2|…|αβn,可改写为:A→α(β1|β2|…|βn)PL/0语言的文法Monday,December19,2022EBNF在此基础上又增加了三种元符号,约定如下:PL/0语言91<整数>∷=[+|-]<数字>{<数字>}
<数字>∷=0|1|2|3|4|5|6|7|8|9<整数>∷=[+|-]<非零数字>{<数字>}|0<非零数字>∷=1|2|3|4|5|6|7|8|9<数字>∷=0|1|2|3|4|5|6|7|8|9EBNF示例Monday,December19,2022<整数>∷=[+|-]<数字>{<数字>}
<数字>∷=0|92PL/0语言文法的EBNF表示
〈程序〉∷=〈分程序〉.
〈分程序〉∷=[〈常量说明部分〉][〈变量说明部分〉][〈过程说明部分〉]〈语句〉
〈常量说明部分〉∷=CONST〈常量定义部分〉{,〈常量定义〉};
〈无符号整数〉∷=〈数字〉{〈数字〉}
〈变量说明部分〉∷=VAR〈标识符〉{,〈标识符〉};
〈标识符〉∷=〈字母〉{〈字母〉|〈数字〉}
……Monday,December19,2022PL/0语言文法的EBNF表示
〈程序〉∷=〈分程序〉.
〈93语句constidentnumber=,;varident,procedureident分程序分程序;;;分程序.程序语法图Monday,December19,2022语句constidentnumber=,;varident,94PL/0程序示例--改错vara,b,c;beginread(a,b);c=100if(a>0)then{b=b+1;write(b);}elsewrite(c);write(a,b,c);end.Monday,December19,2022PL/0程序示例--改错vara,b,c;Sunday,95语法语义分析程序词法分析程序表格管理程序出错处理程序代码生成程序PL/0源程序目标程序PL/0编译程序的总体设计读单词生成目标代码核心一遍扫描方式Monday,December19,2022语法语义分析程序词法分析程序出错处理程序代码生成程序PL/096编译程序总体流程图Monday,December19,2022编译程序总体流程图Sunday,December18,97内容:符号串和符号串集合的运算、文法和语言的定义几个重要概念:规范推导、规范归约、递归文法、文法的二义性、短语、直接短语、句柄、素短语文法的BNF、EBNF、语法图表示文法和语言的分类重点:在理解基本概念的基础上根据给定的语言写出文法、根据给定的文法确定语言判断文法的二义性难点:关于文法和语言的概念是形式语言的理论基础,形式语言抽象地定义为一个数学系统“形式”是指:语言的所有规则以符号串的方式来描述。文法就是这样一个工具推导,文法与语言的相互转换小结Monday,December19,2022内容:小结Sunday,December18,202298自测2(做在书上),习题2、5、9作业题Monday,December19,2022自测2(做在书上),习题2、5、9作业题Sunday,De99第2章文法和语言的基本知识本章是编译原理课程的理论基础,要求掌握形式语言的基本术语和概念,重点掌握短语、直接短语、句柄、素短语、规范推导、规范归约。掌握文法和语言的定义,文法的二义性与递归性的判断方法及句型的分析方法,文法分类。熟练使用文法定义程序设计语言的单词和语法成分。对形式语言的理论有一个初步认识。教学目标Monday,December19,2022第2章文法和语言的基本知识本章是编译原理课程的理论基础,要1002.1字母表和符号串的基本概念2.2文法和语言的形式定义2.3句型的分析2.4文法和语言的分类教学内容Monday,December19,20222.1字母表和符号串的基本概念教学内容Sunday,De101程序设计语言是一种形式语言,与自然语言既有相似的性质又有本质的不同。最主要的区别是:形式语言的规则简单、严格、无例外、无二义性。编译程序的正确转换建立在对程序设计语言的精确定义和描述基础上。语法——文法是描述语言语法的形式规则语义——语言中各语句的含义语用——从使用者的角度对语言的描述Monday,December19,2022程序设计语言是一种形式语言,与自然语言既有相似的性质又有本质102字母表:符号的非空有限集例:={0,1}
2.1字母表和符号串符号:字母表中的元素例:0,1符号串:由字母表中的符号组成的任何有穷序列例:0,1,01,10,011,..空符号串:无任何符号的符号串,用ε表示
C语言的字母表
A={a,b,…,0,1,…,9,+,-,×,_/,(,),=…if,else,for...}不对如={if,else,for,while}符号就是字符,对吗?Monday,December19,2022字母表:符号的非空有限集例:={0,1}2.1字母103符号串的前缀和后缀:从符号串s的尾部删去若干个(包括0个)符号之后所余下的部分称为s的前缀ε,0,01及011都是符号串011的前缀ε,1,11及011都是符号串011的后缀符号串集合:若集合A中的一切元素都是某字母表上的符号串,则称A为该字母表上的符号串集合。例:={a,b,c}A={a,aa,ac}Monday,December19,2022符号串的前缀和后缀:ε,0,01及011都是104符号串的运算符号串x和y的连接:是把y的符号写在x的符号之后得到的符号串xy
例如x=00,y=11,则xy=0011对于任意一个符号串s,有εs=sε=s符号串的连接运算Monday,December19,2022符号串的运算符号串x和y的连接:是把y的符号写在x的符号之后105符号串自身连接n次得到的符号串sn定义为ss…ss,包括n个s,称为符号串的幂运算
s0=ε,s1=s,s2=ss,……设s=01,则s0=εs1=01s2=0101……符号串的幂运算Monday,December19,2022符号串自身连接n次得到的符号串sn定义为ss…ss,包106设A、B为符号串集合,则A和B的乘积定义为:AB={xy|x∈A,y∈B}例如,A={a,b},B={c,d}则AB=符号串集合的乘积{ac,ad,bc,bd}
Monday,December19,2022设A、B为符号串集合,则A和B的乘积定义为:AB={xy107有符号串集合A,定义A0={ε},A1=A,A2=AA,A3=AAA,……An=An-1A=AAn-1,n>0例如,A={0,1},则A0=A1=A2=A3=符号串集合的幂运算{ε}{0,1}{00,01,10,11}{000,001,010,011,100,101,110,111}Monday,December19,2022有符号串集合A,定义A0={ε},A1=A,108设A是符号串集合,定义
A+=A1∪A2∪A3∪……∪An∪…… 称为集合A的正闭包。
A*=A0∪A+
称为集合A的闭包。例:A={x,y}A+=?
A*=?{x,y,xx,xy,yx,yy,xxx,xxy,xyx,xyy,……}
A1
A2
A3{ε,x,y,xx,xy,yx,yy,xxx,xxy,xyx,xyy,……}
A0A1
A2
A3符号串集合的闭包运算Monday,December19,2022设A是符号串集合,定义例:A={x,y}{x,109Σ的闭包*表示上的一切符号串(包括ε)组成的集合Σ的正闭包+表示上的除ε外的所有符号串组成的集合例:Σ={a,b}Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…}Σ+={a,b,aa,ab,ba,bb,aaa,aab,…}
Monday,December19,2022Σ的闭包*例:Σ={a,b}Sunday,Decembe110若A为某语言的字母表
A={a,b,…,0,1,…,9,+,-,×,_/,(,),=…if,else,for...}B为单词集B={if,else,for,……,<标识符>,<常量>,……}则BA*。语言的句子是定义在B上的符号串。若令C为句子集合,则CB*,程序C为什么对符号、符号串、符号串集合以及它们的运算感兴趣?Monday,December19,2022若A为某语言的字母表为什么对符号、符号串、符号串集合以及它们111语言是由句子组成的集合,是由一组符号所构成的集合字母表上的一个语言是上的一些符号串的集合字母表上的每个语言是*的一个子集
集合{a,aa,aaa,…} 或表示为{w|w∈Σ*且w=an,n≥1}为字母表上的一个语言例如:字母表Σ={a,b},Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…}
集合{ab,aabb,aaabbb,…,anbn,…}或表示为{w|w∈Σ*且w=anbn,n≥1}为字母表上的一个语言Monday,December19,2022语言是由句子组成的集合,是由一组符号所构成的集合集合{a,a1122.2文法和语言的形式定义文法是对语言结构的定义与描述。(或称为“语法”)。<赋值语句>::=<标识符>“=”<表达式><表达式>::=<表达式>“+”<表达式>
|
<表达式>“*”<表达式><表达式>::=“(”<表达式>“)”|
<标识符>
|
<整数>
|
<实数>
Monday,December19,20222.2文法和语言的形式定义文法是对语言结构的定义与描述。113文法的直观概念:以汉语中的“我是大学生”为例。采用BNF来表示汉语句子的构成规则为:〈句子〉::=〈主语〉〈谓语〉〈主语〉::=〈代词〉|〈名词〉〈代词〉::=我|你|他〈名词〉::=王明|大学生|工人|英语〈谓语〉::=〈动词〉〈直接宾语〉〈动词〉::=是|学习〈直接宾语〉::=〈代词〉|〈名词〉根据上述规则,“我是大学生”的构成符合上述规则,而“我大学生是”不符合,我们说它不是句子。这些规则成为我们判别句子结构合法与否的依据。换句话
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 昆明工业职业技术学院《工程合同管理》2023-2024学年第二学期期末试卷
- 2025资产管理公司劳动合同书范本
- 2024年大型并网风力发电机组发电机投资申请报告代可行性研究报告
- 2025中外联合制作电影合同范本
- 2024年安防电子项目资金需求报告代可行性研究报告
- 2025租房合同协议书如何编写
- 2025年房屋租赁合同范本中介版
- 2025最早的房屋租赁合同范本
- 2025聘育儿嫂合同范本模板
- 2025退休职工劳务合同
- 装饰装修工程施工组织方案完整版
- 2型糖尿病患者认知功能障碍防治的中国专家共识
- 唐代诗人时间轴
- 《纪检监察机关派驻机构工作规则》主要内容解读课件PPT
- 幼儿园绘本:《你真好》 PPT课件
- 可再生能源概论左然第四章 太阳电池
- 六年级品社《春天的故事》(课堂PPT)
- 关于电机功率、转矩和惯量等
- 客户关系生命周期各阶段的营销策略
- “差点儿”和“差点儿没”PPT课件
- 2019最新十八项医疗核心制度考试题及答案
评论
0/150
提交评论