1 / 79

指导教师 : 杨建国

编 译 原 理. 指导教师 : 杨建国. 二零一零年三月. 第三章 文法和语言. 第一节 文法的直观概念. 第二节 符号和符号串. 第三节 文法和语言的形式定义. 第四节 文法的类型. 第五节 上下文无关文法及其语法树. 第六节 句型分析. 第七节 有关文法实用中的一些说明. 第八节 典型例题及解答. 知识结构. 第三章 文法和语言. 3.1 文法的直观概念. 所谓一个语言的 语法 是指一组 规则 ,用它可以形成和产生  一个合适的程序 目前广泛使用的手段是 上下文无关文法 ,即用上下文无关

jafari
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. 知识结构

  4. 第三章 文法和语言 • 3.1 文法的直观概念 • 所谓一个语言的语法是指一组规则,用它可以形成和产生  一个合适的程序 • 目前广泛使用的手段是上下文无关文法,即用上下文无关  文法作为程序设计语言语法的描述工具

  5. 程序设计语言的描述: • 语法:程序的结构或形式 • 语义:语言所代表的含义 • 语用:语言的实际应用

  6. 例如,对于赋值语句 x : = a + b * c的非形式描述是: • 语法:赋值语句=变量+:=+表达式 • 语义:先求右部,然后把结果给左部变量 • 语用:赋值语句可用来计算和保存表达式的值 • 形式化方法:用一整套带有严格规定的符号体系来描述问  题的理论和方法 • 形式语言:一种不考虑含义的符号语言

  7. 程序设计语言的语义分成: • 静态语义:是一系列限定规则,并确定哪些合乎语法的程  序是合适的 • 动态语义(运行语义、执行语义):表明程序要做什么,  要计算什么

  8. 以自然语言为例,人们无法列出全部句子,但是人们可以以自然语言为例,人们无法列出全部句子,但是人们可以  给出一些规则,用这些规则来说明(或者定义)句子的组  成结构:

  9. 例如, 有一组规则: • < 句子 > :: = < 主语 > < 谓语 > • < 主语 > :: = < 冠词 > < 形容词 > < 名词 > • < 冠词 > :: = the • < 冠词 > :: = a • < 形容词 > :: = big • < 谓语 > :: = < 动词 > < 直接宾语 > • < 动词 > :: = ate • < 直接宾语 > :: = < 冠词 > < 名词 > • < 名词 > :: = cat • < 名词 > :: = mouse •   显然, 由这一组规则可以产生句子: • The big cat / mouse ate a mouse / cat

  10. 这样的语言描述称为文法 • 使用文法作为工具,不仅为了严格地定义句子的结构,   也是为了适当条数的规则把语言的全部句子描述出来, 可以说文法是以有穷的集合刻画无穷的集合的一个工具

  11. 3.2 符号和符号串 一.字母表和符号串 1.语言可以看成在一个基本符号集上定义的,按一定规则  构成的一切基本符号串组成的集合 2.字母表(符号集):是一个非空有穷集合 3.符号(字符):字母表中的元素 4.符号串:符号的有穷序列。注意:表示空符号串! 5.符号串集合:字母表上若干个符号串组成的集合

  12. 重要约定: • 小写字母 a, b, c, ••• , r 表示符号 • 小写字母 s, t, u, ••• , z 表示符号串 • 大写字母 A, B, C, ••• , Z 表示符号串集合

  13. 二.符号串的运算 1.符号串相等:设 x 、y 是字母表  上的两个符号串,若 x  与 y 的诸符号依次相等,则该两符号串相等,记为 x = y  例:x=ab, y=ba, x=y?

  14. 2.符号串长度:设 x 是字母表上的符号串,符号串中包含 •  符号的个数称为符号串 x 的长度,用 x 表示 • 例: (1). | abc | = ? (2). |  | = ? • (3). | a x | = | x a | = | x | + 1 ( a ∈∑ )

  15. 3. 符号串的连结:设 x 与 y 是字母表  上的两个符号串, •  把 y 的所有符号相继写在 x 的符号之后所得到的符号串 •  称为x 与 y 的连结,用 x y 表示 • 注意: • | x y | = | x | + | y | •  x = x  = x • x y ≠ y x ( 一般说来 )

  16. 4 .符号串的逆:设 x 是字母表  上的符号串,其逆为符号串 x  的倒置,记为 。 • . 若 x = abcd , 则 = ? (2). = 

  17. 5.符号串的前缀、后缀和子串:设 x、y、z 是字母表  上的  符号串,则称 x 为符号串 x y 的前缀,y 是符号 串 x y 的 后缀, x、y 、 z 、xy 、yz 是符号串 x y z 的子串  例: abcd前缀、后缀、子串是什么?

  18. 6.符号串集合的乘积:设A、B为两个符号串集合,其乘积为6.符号串集合的乘积:设A、B为两个符号串集合,其乘积为 AB={xy|xA,y B} 例: (1). 若 A = { ab, cd }, B = { ef, gh } ,AB=? (2). ∵  x = x  = x ∴ {  } A = A {  } = A

  19. 7.空集:不含任何元素的集合,记为 Ø 注意: (1). Ø A = A Ø = Ø (2).   Ø

  20. 8.符号串的幂:设 x 是字母表  上的符号串,则 x 的幂运算  为x 0 =  x 1=x x 2=xx •••••• x n=x n-1x (xx n-1)  例: 若 x = ab 则: x 0 = ?, x 1 = ?, x 2 = ?, ••••••, x n = ?

  21. 9.符号串集合的幂:设 A 是符号串集合,则符号串 A 的幂运  算为: A0={} A1=A A2=AA •••••• An=A n-1A (AA n-1) 例: 若 A = { ab, cd } ,则: A 0 = ?, A 1 = ?, A 2 = ?, ••••••

  22. 10.集合A的闭包与正闭包: 集合A 的闭包表示为 A* , 正闭包表示为 A+ , • 注意: • A*=A0∪A+ • A+=AA*=A*A • 若 A = { a, b } • 则: A*= {, a, b, aa, ab, ba, bb, aaa, ••• } • A+= {a, b, aa, ab, ba, bb, aaa, ••• }

  23. 3.3 文法和语言的形式定义 • 规则(重写规则、产生式、生成式):  一个规则是一个二元组,通常写作α::= β或 αβ • α称为规则的左部,β称为规则的右部, (::=)读作  “定义为”,这是一条关于α的规则(产生式)

  24. 定义3.1:文法G定义为四元组(VN,VT,P,S) • VN:非终结符(语法实体、变量)集 • VT:终结符集 • P:规则(αβ)集合,α∈(VN∪VT)*且至少包含  一个非终结符,β ∈(VN∪VT)* • VN、VT、P是非空有穷集 • S:开始符(识别符),它是一个非终结符,至少要在一  条规则中作为左部出现 • VN∩VT= Ø • V=VN∪VT,称为文法G的字母表(字汇表)

  25. 例3.1文法G=(VN,VT,P,S),其中 VN = { S }, VT ={ 0, 1 }, P={ S0S1, S01 } 思考:S=?

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

  27. 很多时候,不用将文法G的四元组显式地表示出来,而很多时候,不用将文法G的四元组显式地表示出来,而  只将产生式写出

  28. 一般约定: • 第一条产生式的左部是识别符 • 用尖括号括起来的是非终结符(或者用大写字母表示) • 不用尖括号括起来的是终结符(或者用小写字母表示) • 将G也写成G[S],其中S是识别符

  29. * + • 推导:  定义V*中的符号之间的关系: • 直接推导: • 长度为n(n≥1)的推导: • 长度为n(n ≥0)的推导:

  30. 定义3.2:文法G=(VN,VT,P,S),αβ是一条  规则,γ和δ是V*中的任意符号,若有符号串v,w满  足:v=γαδ,w= γβδ,则称v直接推导到w, v  w,或w直接归约到v • 例:G: S0S1, S01 • S 0S1 00S11 000S111 00001111

  31. + • 定义3.3:如果存在直接推导的序列: v=w0w1w2…wn=w (n>0)  则称v推导出w(推导长度为n),或称w归约到V,  记作

  32. + * • 定义3.4:若有vw,或v=w,则记作:

  33. * • 定义3.5:若有Sx,则称x是文法G[S]的句型,若x仅  由终结符组成,则称x为G[S]的句子

  34. * • 定义3.6:文法G所产生的语言定义为集合 L(G)={x|Sx,其中S为文法识别符号,且x∈VT*} • 文法描述的语言是该文法一切句子的集合 • 例:G: S0S1, S01 L(G)={0n1n|n≥1}

  35. 例3.3 文法文法G[S]: (1)SaSBE (2)SaBE (3)EBBE (4)aBab (5)bBbb (6)bEbe (7)eEee L(G)={ anbnen | n≥1 } 思考:a4b4e4怎么推导?

  36. 定义3.7:若L(G1)=L(G2),则称文法G1和G2是等价的定义3.7:若L(G1)=L(G2),则称文法G1和G2是等价的 • 例如文法G[A]: • A0R • A01 • RA1  和文法G[S]: • S0S1 • S01 • 等价 L(G)={0n1n|n≥1}

  37. 3型 2型 1型 0型 • 3.4 文法的类型 • 乔姆斯基(Chomsky)于1956年建立形式语言的描述 • 他把文法分成:0型、1型、2型、3型 • 四个文法类的定义是逐渐增加限制的

  38. 设G=(VN,VT,P,S),如果它的每个产生式 αβ是这样一种结构:α∈(VN∪VT)*且α至少包  含一个非终结符, β∈(VN∪VT)*,则G是一个0型文法  (短语文法、无限制文法)

  39. 思考:这样定义可以吗? 设G=(VN,VT,P,S),如果它的每个产生式 αβ是这样一种结构:α∈(VN∪VT)+, β∈(VN∪VT)*,则G是一个0型文法

  40. 重要的理论结果: • 0型文法的能力相当于图灵机(Turing) • 或者说,任何0型语言都是递归可枚举的 • 反之,递归可枚举集必定是一个0型语言

  41. 设G=(VN,VT,P,S),如果它的每个产生式 αβ均满足:|β| ≥ |α|,仅仅Sε除外,  则文法G是1型文法(上下文有关文法) • 例3.1、3.2、3.3

  42. 例:文法G[S]: SCD AbbA • CaCA BaaB • CbCB BbbB • ADaD Cε • BDbD Dε • AabD L(G)={w|w∈{a,b}*}

  43. 有些定义中,将上下文有关文法的产生式的形式描述为有些定义中,将上下文有关文法的产生式的形式描述为 α1Aα2α1βα2,其中α1、α2和β都在V*中, β≠ε,A在VN中

  44. 设G=(VN,VT,P,S),如果它的每个产生式 αβ均满足:α是一个非终结符,β∈V*,则文法 G是2型文法(上下文无关文法)

  45. 有时将2型文法的产生式表示为Aβ的形式,其中有时将2型文法的产生式表示为Aβ的形式,其中 A∈VN,也就是用β取代非终结符A时,与A所在的上下  文无关,因此取名为上下文无关 • 例3.1、3.2

  46. 例3.4:文法G[S]: SaB|bA • Aa|aS|bAA • Bb|bS|aBB

  47. 设G=(VN,VT,P,S),如果它的每个产生式 AαB或A α,其中A和B都是非终结符, α∈VT*,则文法G是3型文法(正规文法) • 例3.5:文法G[S]: S0A|1B|0 • A0A|1B|0S • B1B|1|0 你会忘记我吗?

  48. 例:判断下面文法G[S]是哪一类方法,并说明你的理由?例:判断下面文法G[S]是哪一类方法,并说明你的理由? SB|aB • BD|a • Db|ε

  49. 4个文法类的定义是逐渐增加限制的,因此,每一种正规4个文法类的定义是逐渐增加限制的,因此,每一种正规  文法都是上下文无关的,每一种上下文无关文法都是上  下文有关的,而每一种上下文有关文法都是0型文法 • 称0型文法产生的语言为0型语言,上下文有关文法、上  下文无关文法和正规文法产生的语言分别称为上下文有  关语言、上下文无关语言和正规语言

  50. 3.5 上下文无关文法及其语法树 • 上下文无关文法有足够的能力描述现今程序设计语言的  语法结构,比如描述算术表达式、描述各种语句等 • 例3.6:文法G=({E},{+,*,i,(,)},P,E)其中P为: Ei • EE+E • EE*E • E (E) • <条件语句>if<条件>then<语句>| • if<条件>then<语句>else <语句>

More Related