1 / 54

编译原理 第三章

编译原理 第三章. 文法和语言. 一个程序设计语言,它的完整定义应包括 语法和语义 两 个部分。. 语法是指一组规则,用它可以形成和产生一个合适的程序。. 语义分 静态语义和动态语义. 静态语义是一系列的限定规则,并确定哪些合乎语法 的程序是合法的。. 动态语义也称运行语义或执行语义,表明程序要做什 么,执行什么?. 文法 是阐明语法的工具。. 3.1 文法的直观概念. 自然语言的例子: 对于“我是大学生”类似的句子有以下语法规则. < 句子 >::=< 主语 >< 谓语 > < 主语 >::=< 代词 >|< 名词 >

ronald
Download Presentation

编译原理 第三章

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 编译原理 第三章 文法和语言

  2. 一个程序设计语言,它的完整定义应包括语法和语义两一个程序设计语言,它的完整定义应包括语法和语义两 个部分。 语法是指一组规则,用它可以形成和产生一个合适的程序。 语义分静态语义和动态语义 静态语义是一系列的限定规则,并确定哪些合乎语法 的程序是合法的。 动态语义也称运行语义或执行语义,表明程序要做什 么,执行什么? 文法是阐明语法的工具。

  3. 3.1 文法的直观概念 自然语言的例子: 对于“我是大学生”类似的句子有以下语法规则 <句子>::=<主语><谓语> <主语>::=<代词>|<名词> <代词>::=我 | 你 | 他 <名词>::=王明 | 大学生 | 英语 <谓语>::=<动词><直接宾语> <动词>::=是 | 学习 <直接宾语>::=<代词>|<名词>

  4. “我是大学生”的推导过程 <句子> => <主语><谓语> => <代词><谓语> => 我 <谓语> =>我 <动词><直接宾语> =>我 是 <直接宾语> =>我 是 <名词> =>我 是 大学生 <句子>::=<主语><谓语> <主语>::=<代词>|<名词> <代词>::=我 | 你 | 他 <名词>::=王明 | 大学生 | 英语 <谓语>::=<动词><直接宾语> <动词>::=是 | 学习 <直接宾语>::=<代词>|<名词>

  5. 符号 => 是指使用一条规则,代替=>左边的某个符号, 产生右端的符号串 显然,按上述方法,还可以推导出其它很多句子 如: 王明是大学生 王明学习英语 我学习英语 他学习英语 你学习王明 你是工人 只要将语法进行一定的改造,它能识别一些自然语言。

  6. 3.2 符号和符号串 • 字母表:是元素的非空有穷集合。 我们把字母表中的元素称为符号,因此字 母表也称为符号集。

  7. 符号串:由字母表中的符号组成的任何有穷序列称为符符号串:由字母表中的符号组成的任何有穷序列称为符 号串。 在符号串中,符号是有序的,如ab和ba不相等。abca和aabc 不相等。

  8. 符号串的表示 (1)如果符号串x中有m个符号,则称其长度为m。 表示为|x|=m。 (2)允许空符号串,即不包含任何符号的符号串。 用ε表示,其长度为0,即|ε |=0。

  9. 符号串的头、尾、固有头和固有尾 如果z=xy是一符号串,则x是z的头,y是z的尾。 如果x是非空的,那么y是固有尾;如果y是非空的,那么 x是固有头。

  10. 书写方式说明 当我们对符号z=xy的头感兴趣而对其余部分不感兴趣 时,我们可以采用省略写法:z=x…; 如果只是为了强调x在符号串z中的某处出现,则可表 示为:z=…x…; 符号t是符号串z的最后一个符号,则可表示为:z=…t。

  11. 符号串的连接:设x和y是符号串,它们的连接xy是把y的符符号串的连接:设x和y是符号串,它们的连接xy是把y的符 号写在x的符号之后,得到的符号串。 如:x=ST,y=abu,则xy=STabu.。 显然:εx=xε =x 符号串的方幂:设x是符号串,把x自身连接n次得到的符号 串z,即:z=xx…xx,称为符号串x的方幂,写作:z=xn, 对x的方幂表示为:x0= ε, x1=x, x2=xx, x3=xxx 对AB的方幂表示为: (AB)0= є, (AB)1=AB, (AB)2=ABAB

  12. 符号串集合:若集合A中的一切元素是某字母表中的符号符号串集合:若集合A中的一切元素是某字母表中的符号 串,则称A为该字母表上的符号串集合。 符号串集合的乘积:两个符号串集合A和B的乘积定义为: AB={xy|x∈A且y ∈B},即AB是满足x属于A,y属于B的所 有符号串xy所组成的集合。 如A={a,b},B={c,d},则AB={ac,ad,bc,bd}. 因为对任意符号串x有εx=x ε=x,所以有{ε}A=A {ε} =A

  13. 指定字母表∑之后,可用∑*表示∑上的所有有穷长的串指定字母表∑之后,可用∑*表示∑上的所有有穷长的串 的集合。 如:∑={0,1},则∑ *={ε,0,1,11,01,10,000,001…} 也可表示为字母表的方幂方式: ∑ *= ∑0∪ ∑1 ∪ ∑2 ∪ ∑n … ∑+ =∑1 ∪ ∑2 ∪ ∑n … ∑*称为集合的闭包,∑ +称为集合的正闭包。 ∑*= ∑0∪ ∑+ ∑ + =∑ ∑*= ∑* ∑ 若x是∑*的元素,则表示为x∈∑*,否则 x∈∑*

  14. 3.3 文法和语言的形式定义 规则,也称重写规则、产生式或生成式是形如: α→β或α::=β的(α,β)有序对,其中α是某字母表V的正闭 包V+中的一个符号,β是某字母表V的闭包V*中的一 个符号。 α称为规则的左部,β称为规则的右部。

  15. 定义3.1 文法G定义为四元组(VN,VT,P,S) 其中: VN为非终结符号(或语法实体,或变量)集; VT为终结符号集; P为产生式(也称规则)的集合。 S称作识别符号或开始符号,它是一个非终结符, 至少要在一条规则中作为左部出现。 VN和VT不含公共的元素,即VN∩VT=Φ 例3.1:文法G= (VN,VT,P,S),其中VN ={S}, VT ={0,1}, P={S→0S1,S →01}。

  16. 例3.2 文法G= (VN,VT,P,S) 其中:VN={标识符,字母,数字} VT={a,b,c,…,x,y,z,0,1,…9} p={<标识符>→<字母> <标识符> →<标识符><字母> <标识符> →<标识符><数字> <字母> →a <字母> →b … <字母> →z <数字> →0 … <数字> →9} S=<标识符>

  17. 很多时候,不用将文法G的四无组显式地表示出来,很多时候,不用将文法G的四无组显式地表示出来, 而只将产生式写出。一般约定,第一条产生式的左 部是识别符号;用<>括起来的是非终结符,不用<> 括起来的是终结符,或者用大写字母表示非终结符, 用小写字母表示终结符。 另一种表示方法: 将G写成G[S],其中S是识别符号。 如例3.1写成: G:S→0S1 S →01

  18. 推导的概念 (1) 直接推导 A =>b (2) 长度为n(n≥1)的推导 A=+>b (3)长度为n(n≥0)的推导 A=*>b

  19. 定义3.2 如果α→β是文法G=(VN,VT,P,S)的规则(或者说是P 中的一个产生式),γ和δ是V*中的任意符号,若有符号 串v,w满足: v= γ α δ, w= γ β δ 则说v(应用规则α→β)直接产生w,或者说w是v的直接推导 或说w直接归约到v,记作 v=>w 例3.1的文法G: v=0S1,w=0011,直接推导:0S1=>0011,使用规则: S01,这里γ =0,δ=1。 v=S,w=0S1,直接推导:S=>0S1,使用规则: S0S1,这里γ =ε,δ=ε。 v=0S1,w=00S11,直接推导:S=>0S1,使用规则: S0S1,这里γ =0,δ=1。

  20. 对于3.2的文法G 例3.2 文法G= (VN,VT,P,S) 其中:VN={标识符,字母,数字} VT={a,b,c,…,x,y,z,0,1,…9} p={<标识符>→<字母> <标识符> →<标识符><字母> <标识符> →<标识符><数字> <字母> →a <字母> →b … <字母> →z <数字> →0 … <数字> →9} S=<标识符> V=<标识符>,w=<标识符><字母> 直接推导出<标识符>=><标识符><字母> 使用的规则是<标识符> →<标识符><字母> 其中γ =ε,δ=ε

  21. 定义3.3 如果存在直接推导的序列: v=>w0=>w1…=>wn=>w 则称v推导出(产生)w,其中推导长度为n,或称w归约到v。 记为v=+>w 定义3.4 若v=+>w,或v=>w,则记为v=*>w 如对于例3.1,有直接推导序列v=0S1=>00S11=>000S111 =>00001111=w,即有0S1=+>00001111,也有0S1=*>00001111 对于例3.2的文法,有直接推导序列:v=<标识符>=> <标识符><数字>=><字母><数字>=>x<数字>=>x1=w 即有<标识符>=+>x1,也有<标识符>=*>x1

  22. 定义3.5 设G[S]是一文法,如果符号串x是从识别符号推导出来 的,即有S=*>x,则称x是文法G[S]的句型。 若x仅由终结符号组成,即S=*>x,x ∈VT*,则称x为 G[S]的句子。 如:S,0S1,0011都是例3.1文法G的句型。其中0011 还是G的句子。 对于例3.2的文法G,<标识符><字母>、<字母><数字>、 a1,xx9都是文法G的句型,a1,xx9 还是G的句子。

  23. 定义3.6 文法G所产生的语言定义为集合{x|S=*>x,其中S为文法 识别符号,且x∈VT*}。 可用L(G)表示该集合。 求例3.1的语言: 对于例3.1 ,它有两条产生式样 (1)S0S1,(2)S01 通过对第一个产生式用n-1次,再用第二个产生式一次, 最后能得出:S=>0S1=>00S11…=>0n-1 S1n-1 =>0n1n 由此可知,其语言集为0n1n 同样,对于例 3.2可以推出其语言集为字母打头字母数字串

  24. 例3.3 设文法G=(VN,VT,P,S), VN ={S,B,E}, VT ={a,b,c},P中包括 以下产生式: (1) SaSBE (2) SaBE (3) EBBE (4) aBab (5) bBbb (6) bEbe (7) eEee 推导过程: (1)使用n-1次2式后,会有n个a,n 个(BE) an(BE)n (2)使用n次3式后,可以将n个(BE)化为n个B和n个E 即anBnEn (3)使用一次4式得到 anbBn-1En (4)使用n-1次5式得到anbnEn (5)使用一次6式得到anbn-1eEn-1 (6)使用n-1次7式得到anbnen

  25. 定义3.7 若L(G1)=L(G2),则称文法G1和G2是等价的。 如文法:G[A]: 其中:A0R A01 RA1 与例3.1文法等价。

  26. 3.4 文法的类型 • 0型文法(短语文法) • 1型文法(上下文有关文法) • 2型文法(上下文无关文法) • 3型文法(正规文法)

  27. 0型文法(短语文法) G= (VN,VT,P,S),如果它的每一个产生式αβ是这样一种结 构, α∈(VN∪VT)*,且至少含有一个非终结符,而 β ∈(VN∪VT)*,则G是一个0型文法(短语文法)。 一个非常重要的理论结果是,0型文法的能力相当于图灵 机。或者说,任何0型语语言都是递归可枚举的;反之, 递归可枚举集必定是一个0型语言。

  28. 1型文法(上下文有关文法) 设G= (VN,VT,P,S),若P中的每一个产生式αβ,均满足 |β|≥|α|,仅仅Sε除外,则G是一个1型文法(上下文有关 文法)。 例3.3 设文法G=(VN,VT,P,S), VN ={S,B,E}, VT ={a,b,c},P中包括 以下产生式: (1) SaSBE (2) SaBE (3) EBBE (4) aBab (5) bBbb (6) bEbe (7) eEee 例3.1:文法G= (VN,VT,P,S),其中VN ={S}, VT ={0,1}, P={S→0S1,S →01}。

  29. 2型文法(上下文无关文法) 设G= (VN,VT,P,S),若P中的每一个产生式αβ满足: α是一个非终结符,β ∈(VN∪VT)*,则此文法称为 2型文法(上下文无关文法) 例3.1:文法G= (VN,VT,P,S),其中VN ={S}, VT ={0,1}, P={S→0S1,S →01}。

  30. 例3.2 文法G= (VN,VT,P,S) 其中:VN={标识符,字母,数字} VT={a,b,c,…,x,y,z,0,1,…9} p={<标识符>→<字母> <标识符> →<标识符><字母> <标识符> →<标识符><数字> <字母> →a <字母> →b … <字母> →z <数字> →0 … <数字> →9} S=<标识符>

  31. 例3.4 G=({S,A,B},{a,b},P,S) 其中P由下列产生式组成: SaB AbAA SbA Bb Aa BbS AaS BaSS 有时,为书写方便,常把同一左部的产生式写在一起 如: Aα1Aα2 …… Aαn 写成Aα1|α2 …|αn 上面的产生式可写成: SaB|bA Aa|aS|bAA B->b|bS|aBB

  32. 3型文法(正规文法) 设G= (VN,VT,P,S),若P中的每个产生式的形式都是 AaB或Aa,其中A和B都是非终结符,a是终结符, 则G是3型文法或正规文法。 例3.5 文法G=({S,A,B},{0,1},P,S),其中P 是由下列产生式组成: S0A A1B S1B B1B S0 B1 A0A B0 A0S

  33. 每一种正规文法都是上下文无关的。 每一种上下文无关文法都是上下文有关的。 每一种上下文有关文法都是短语文法。

  34. 3.6 上下文无关文法及其语法树 例3.6 文法G=({E},{+,*,i,(,)},P,E) 其中P为: Ei EE+E EE*E E(E) 描述一种简单赋值语句的产生式为: <赋值语句>i:=E 条件语句语法: <条件语句>if<条件>then<语句>| if<条件>then<语句>else<语句>

  35. 语法树 • 给定文法G= (VN,VT,P,S),对于G的任何句型都能构造 • 与之关联的语法树(推导树)。这棵树满足下列四个条件: • 每个结点都有一个标记,此标记是V的一个符号。 • 根的标记是S。 • 若一结点n至少有一个它自己除外的子孙,并且标有A, • 则A一定在VN中。 • 如果n的直接子孙,从左到右的次序是n1,n2…nk,其标 • 记分别是A1,A2,…Ak,则AA1A2…Ak一定是P中的一个 • 产生式。

  36. 例3.7 G=({S,A},{a , b}, P, S} 其中P为: (1) SaAS (2) ASbA (3) ASS (4) SA (5) Aba 对于aabbaa的推导,构造语法树如下: S a S A a A S b a b a

  37. 常把aabbaa叫做语法推导树的结果,把推导树叫做常把aabbaa叫做语法推导树的结果,把推导树叫做 aabbaa句型的语法树。 语法树表示了在推导过程中施用了哪个产生式和施用在 哪个非终结符上,并没有表明施用产生式的顺序。

  38. S a A S A a A S b a b a 也就是说其推导过程并不是唯一的。 如例3.7有: 推导过程1:S=>aAS=>aAa=>aSbAa=>aSbbaa=>aabbaa 推导过程2:S=>aAS=>aSbAS=>aabAS=>aabbaS=>aabbaa 推导过程3:S=>aAS=>aSbAS=>asbAa=>aabAa=>aabbaa

  39. 如果在推导的任何一步α=>β,其中α、β是句型,都是对如果在推导的任何一步α=>β,其中α、β是句型,都是对 Α的最左推导,则称这种推导为最左推导。 如果在推导的任何一步α=>β,其中α、β是句型,都是对 Α的最右推导,则称这种推导为最右推导。 在形式语言中,最右推导常被称为规范推导。由规范推 导所得的句型称为规范句型。

  40. 例3.6 文法G=({E},{+,*,i,(,)},P,E) 其中P为: Ei EE+E EE*E E(E) 对于句型:i*i+i 其语法树可有两种: E E E + E E * E E E E E * + i i i i

  41. 对应的推导过程为: 推导1: E=>E+E=>E*E+E =>i*E+E=>i*i+E=>i*i+i 推导2:E=>E*E=>i*E =>i*E+E=>i*i+E=>i*i+i

  42. 如果一个文法存在某个句子对应两个不同的语法树,则如果一个文法存在某个句子对应两个不同的语法树,则 说这个文法是二义的。 例3.6文法G是二义的。 文法的二义性和语言的二义性是两个不同的概念。 可能有两个不同的文法G、G’,其中G是二义的,但 却有L(G)=L(G‘) 要判断任给的一个上下文无关文法是否为二义的,或 它是否产生一个先天二义的上下文无关语言,这两个 问题是递归不可解的。

  43. 例3.8 定义表达式的无二义文法G[E] ET|E+T TF|T*F F(E)|i

  44. 3.6 句型分析 • 自上而下的分析方法 • 自下而上的分析方法 • 句型分析的有关问题

  45. 1、自上而下的分析方法 例3.9 文法G[S] (1) SaAd (2) Aab (3) Aa 它识别w=cabd S S S A d c c A d a b

  46. 2、自下而上的分析方法 S A A c a b d c a b d c a b d

  47. 3、句型分析的有关问题 在上例对串cabd的分析中,如果不选择产生式(2) Aab,而选择产生式(3)Aa,则达不到归约S 的结果,也无从知道cabd是不是一个句子。 S d c A a

  48. 定义3.8 令G是一个文法,S是文法的开始符,αβδ是文 法G的一个句型。如果有:S=*> αAδ,且A β,则β是句型 Αβδ相对于非终结符A的短语。 如果有A=> β,则称β是句型αβδ相对于规则A=> β的 直接短语。 一个句型的最左直接短语称为该句型的句柄。

  49. 3.7 有关文法实用中的一些说明 1、有关文法的实用限制: 在实用中,我们将限制文法中不得含有有害规则和 多余规则。 有害规则是指形为UU的产生式,它对描述语言没有必要。 只会引起文法的二义性。 多余规则是指文法中连一个句子的推导都用不到的规则。 它的两种出现方式: (1)文法中某些非终结符不在任何规则的右部出现。 (2)在文法中有那样的非终结符,不能够从它推出终 结符号串来。

  50. 例 3.10 文法G{S}: (1) SBe (2) BCe (3) BAf (4) AAf (5) Ae (6) CCf (7) Df 其中非终结符D不在右部出现,它是不可达的,故 (7)式是多余规则。 规则(2)(6)不能推出以终结符为结束的串,它是 不可终此的。故也是多余规则。

More Related