1 / 84

第二章 文法和语言

第二章 文法和语言. 2.1 文法的基本概念 符号和符号串 文法和语言的形式定义 推导与递归 文法的分类 2.2 句型的分析 语法树 文法的约定 句型的分析方法. 主要内容. 本章讨论与编译实现相关的形式语言理论基本概念,主要内容有: 文法与语言的形式定义 Chomsky 文法及其分类 上下文无关文法的主要特性 文法的等价变换 句型分析的概念. 文法与语言. 一个程序设计语言的确切定义是构造编译程序的重要前提。

isolde
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.1 文法的基本概念 符号和符号串 文法和语言的形式定义 推导与递归 文法的分类 2.2 句型的分析 语法树 文法的约定 句型的分析方法

  2. 主要内容 • 本章讨论与编译实现相关的形式语言理论基本概念,主要内容有: • 文法与语言的形式定义 • Chomsky文法及其分类 • 上下文无关文法的主要特性 • 文法的等价变换 • 句型分析的概念

  3. 文法与语言 • 一个程序设计语言的确切定义是构造编译程序的重要前提。 • 文法被用来精确而无歧义地描述语言的构成方式. • 文法描述语言的时候不考虑语言的含义。

  4. 2.1 语言和文法的直观概念 • 程序设计语言的定义 语言是一个记号系统。 • 汉语--符合汉语语法的句子的全体 • 英语--符合英语语法的句子的全体 • 程序设计语言--该语言的程序的全体 程序设计语言的完整定义由语法、语义和语用三个方面。

  5. 语法(syntax) • 定义: 是一组规则,用它可以形成和产生一个合适的程序 • 描述工具:文法 • 作用: 定义什么样的符号序列是合法的,与符号的含义无关。

  6. 语义(semantics):可以定义一个程序的意义 • 分类: 静态语义:一系列限定规则,确定哪些合乎语法的程序是合适的 动态语义:表明程序要做什么 • 作用: 检查类型匹配,变量作用域等 • 语用 • 表示语言符号及其使用者之间的关系,涉及符号的来源、使用和影响。 如果不考虑语义和语用,只从语法来看语言,这种意义下的语言称为形式语言。

  7. 形式语言 • Chomsky于1956年提出了一种用来描述语言的数学系统。人们把用一组数学符号和规则来描述语言的方式称为形式描述,而把所用的数学符号和规则称为形式语言。 • 形式语言,只是从语法上研究语言。它是抽象的数学系统,用于模拟程序设计语言的语法,或者是并不很成功地模拟自然语言如英语的语法。 • 形式语言理论是编译理论的重要基础,它主要研究组成符号语言的符号串的集合及它们的表示法、结构与特性。

  8. 形式语言和编译理论中的 最基本概念 ——符号串和符号串集合 • 基本定义 • 它们的运算

  9. 2.2 符号和符号串 • 字母表 • 定义:元素的非空有穷集合 • 例:∑={0‚1} Α={a‚b,c} • 元素也称为符号,字母表也称符号集。 • 程序语言的字母表由字母数字和若干专用符号组成。

  10. 符号串 • 定义:由字母表中的符号组成的任何有穷序列 • 例: 0,00,10是字母表∑={0‚1}上的符号串 a,ab,aaca是Α={a‚b,c}上的符号串 • 在符号串中,符号是有顺序的,顺序不同,代表不同的符号串,如:ab和ba不同 • 不含任何符号的符号串称为空串,用ε表示 注意:{ε}并不等于空集合{ } • 符号串长度: 符号串中含有符号的个数 如: |abc|=3 | ε|=0

  11. 子符号串 • 例如 符号串x=a+b*(c+d),则 a, a+b*, 与(c+d)等都是x的子符号串,且 其长度分别为|a|=1, |a+b*|=4, |(c+d)|=5 • 设有非空符号串u=xvy,其中符号串 ,则称v为符号串u的子符号串。 V≠ε

  12. 符号串的头与尾 • 例如:字母表A={a,b,c}上的符号串x=abc, 则x的 头:ε, a, ab, abc, 尾:ε, c, bc, abc 固有头: ε, a, ab, 固有尾:ε, c, bc • 如果z=xy是一个符号串,则x是z的头,而y是z的尾。如果y非空,则x是z的固有头;如果x非空,则y是z的固有尾。

  13. 符号串的运算 • 符号串的连接:设x、y是符号串,它们的连接是把y的符号写在 x的符号之后得到的符号串xy 例如 x="ST",y="abu" ,则 xy="STabu" 显然εx = xε=x • 符号串的方幂:把符号串a自身连接n次得到的符号串an =aa…aa 例如 a1=a a2=aa a0=ε

  14. 符号串集合: • 定义: 若集合A中所有元素都是某字母表上的符号串,则称A为字母表上的符号串集合。 • 符号串集合的乘积:符号串集合A和B的乘积定义为: AB ={xy|x∈A且y∈B},即AB是由A中的串x 和B中的串y连接而成的串xy组成的集合。 若集合A = ab,cde B = 0,1 则 AB = ab0,ab1,cde0,cde1 显然 {ε}A = A{ε} = A

  15. 符号串集合的方幂: 设A是符号串的集合,则称Ai为符号串集A的方幂,其中i是非负整数。具体定义如下: • A0 ={ε } • A1 = A , A2 = A A • AK = AA......A(k个)

  16. 集合的闭包 • 闭包 集合Σ的闭包Σ *定义如下: Σ * = Σ 0∪ Σ1∪ Σ 2∪ Σ 3∪… 例:设有字母表Σ={0,1} 则Σ*=Σ0∪Σ1∪Σ2∪… ={ε,0,1,00,01,10,11,000,…} 即Σ*表示Σ上所有有穷长的串的集合。

  17. 正闭包 Σ+ = Σ1∪Σ2∪Σ3∪…称为Σ的正闭包。 +表示上的除ε外的所有用穷长串的集合 • Σ* = Σ0∪Σ+ Σ+ = ΣΣ* = Σ* Σ

  18. 字母表上的一个语言是上符合某种规则的一些符号 串的集合 ,是*的一个子集。 • 例如:Σ={a,b} Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…} • 1. 集合{ab,aabb,aaabbb,…,anbn,…}或 • {w|w∈Σ*且w=anbn,n≥1}为字母表上的一个语言。 • 集合{a,aa,aaa,…}或{w|w∈Σ*且w=an,n≥1}为字母表上的一个语言。 • ε是一个语言。 • 即 是一个语言。

  19. 小结 1 符号与字母表 2 符号串 3 符号串的运算 4 符号串集合 5 集合的闭包 6 字母表的闭包

  20. 2.3 文法和语言的形式定义 1.文法的定义 2.文法形式上的约定 3.推导与归约 4.句型、句子、语言的定义 5.文法的等价

  21. “我是大学生”是汉语的一个句子 • 用::=表示的汉语句子的构成规则: 〈句子〉∷=〈主语〉〈谓语〉 〈主语〉∷=〈代词〉|〈名词〉 〈代词〉∷= 我|你|他 〈名词〉∷= 王明|大学生|工人|英语 〈谓语〉∷=〈动词〉〈直接宾语〉 〈动词〉∷= 是|学习 〈直接宾语〉∷=〈代词〉|〈名词〉

  22. 句子“我是大学生”的推导过程如下: • 从句子出发,反复把规则中的”::=”左边的成分替换成右边的成分。 • 〈句子〉〈主语〉〈谓语〉 • 〈代词〉〈谓语〉 •  我〈谓语〉 •   我〈动词〉〈直接宾语〉 •  我是〈直接宾语〉 •  我是〈名词〉 •  我是大学生

  23. 文法——介绍 • 包括四个组成部分: • 一组终结符号(不能被替换的符号,单词符号) • 一组非终结符号(能够被替换为终结符号或非终结符号,语法单位) • 一个开始符号(从这个符号开始替换,最大语法单位-程序) • 一组产生式(替换规则,把左边的字符串替换为右边的字符串)

  24. 关键思路 • 从文法的开始符号出发, • 反复使用产生式,对非终结符进行替换(展开), • 直到整个字符串中不在包含非终结符。 • 这时,得到了这个文法的一个句子(一个程序) • 这个过程称为推导

  25. 1.文法的形式定义 • 产生式(规则) 产生式是一个有序对(α,β),通常写作 α→β(或α::=β ) • 文法定义: 文法G(Grammar)定义为四元组(VN,VT,P,S) VN(Nonternimal):非终结符集 VT(Terminal):终结符集 P (Production):产生式(规则)集合 S:开始符号或识别符号

  26. 说明: • V=VN∪VT,V称为文法G的字母表 • P中产生式形如:α→β,其中α∈V+且至少含一个非终结符,β∈V* • VN,VT和P是非空有穷集 • VN∩VT=φ • S是一个非终结符,且至少要在一条产生式的左部出现 • 非终结符代表一个语言中的语法成分,如<赋值语句>,它是构成程序的一个语法成分,这个符号本身不会在程序中出现,而终结符是组成程序的具体的符号。

  27. 2 文法形式定义上的约定 • 文法习惯上只将产生式写出。并有如下约定: • 第一条产生式的左部是开始符号,或用G[S]表示S是开始符号 • 用尖括号括起的是非终结符,否则为终结符。或者大写字母表示非终结符,小写字母表示终结符 • G可写成G[S],S是开始符号 • 希腊字母代表由终结符号和非终结符号组成的符号串 • α、β、γ • 左部相同的产生式A→α,A→β可以记为A→α|β, 其中“|”是“或”的意思,α,β分别称为侯选式

  28. 如:对于文法 G:S→0S1 可写成 G[S]:S→0S1 S→01 S→01 例:文法G=(VN,VT,P,S) 其中:VN={S},VT={0,1},P={S→0S1,S→01} 开始符为S

  29. 例:文法G=(VN,VT,P,S) VN ={标识符,字母,数字}, VT ={a,b,c,…x,y,z,0,1,…,9}, P={<标识符>→<字母>, <标识符>→<标识符><字母> <标识符>→<标识符><数字>, <字母>→a, …, <字母>→z, <数字>→0,…,<数字>→9 }, S=<标识符> • 例如: 文法G[S]: S→A|SA|SD A→a|b|…|z D→0|1|…|9

  30. 3. 推导(Derivation)与归约(Reduction) • 直接推导和直接归约: α→β是文法G的产生式,若有v,w满足: v=γαδ,w=γβδ, 其中γ,δ∈V* 则称v直接推导出w,也称w直接归约到v, 记作v  w • 直接推导就是用产生式的右部替换产生式的左部的过程 • 直接归约就是用产生式的左部替换产生式的右部的过程

  31. 例 文法G: S→0S1,S→01 有直接推导: S0S1 ( S→0S1 ) 0S1 00S11 ( S→0S1 ) 00S11 000S111 ( S→0S1 ) 000S111 00001111( S→01 )

  32. 推导例题1 • 文法G1:S->bA, A->aA|a定义了一个什么样的语言? • S=>bA=>ba • S=>bA=>baA=>baa • S=>bA=>baA=>baaA=>baaa • …… • S=>bA=>baA=>…=>ba…a • L(G1)={ban|n>=1} • L(G1) = { 以b开头后跟一个或多个a的串}

  33. 推导例题2

  34. e.g. 文法产生的语言 • A=> aB => ab • A=> Ab => ab 文法G4对句子aaabb的推导: S => A B S A B => a A B A a A => a a A B A a A => a a a B A a => a a a b B B b B => a a a b b B b

  35. e.g. 文法产生的语言 文法G5对句子aaaabbbb的推导: S => a S b S a S b => a a S b b S a S b => a a a S b b b S a S b => a a a a b b b b S a b

  36. 直接推导序列和广义推导 +  • 直接推导序列: 或  + 若存在v =u0 u1 ... un=w, (n>0) 则称v  + w,v推导出w,或w归约到v(至少有1步推导),这个直接推导序列的长度为n。 • 广义推导: 或  * 若有v  + w 或 v=w, 则记为v  * w,v广义推导出w,w广义规约到v(可以包含0步推导) * 

  37. 三种推导的比较 • 直接推导()的长度为1 • 直接推导序列( +)的长度n≥1 • 广义推导( *)的长度≥0

  38. 规范推导与规范规约 • 考虑两种特殊推导:最右推导和最左推导,即 对于一个推导序列中的每一步直接推导,都是对最左(最右)非终结符进行替换。 • 最右推导也称规范推导,它的逆过程称为最左规约,也称规范规约。 . • 若用表示规约,设A→a是文法G中的一个规则,则对于 xAy  xay 有 . xay  xAy

  39. 举例 • 例1: 文法G[S]: S→AB A→A0|1B B→0|S1 请给出句子101001的最左和最右推导。 最左推导: S AB 1B B10B10S110AB1101BB11010B1101001 最右推导: S ABAS1AAB1AA01A1B01A10011B1001101001

  40. 例2 文法G: E→E+T|T T→T×F|F F→(E)|i 句子i+i×i的推导过程如下: 最左推导: E=>E+T=>T+T=>F+T=>i+T=>i+T×F=>i+F×F =>i+i×F=>i+i×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

  41. 递归规则 • 借助于自身来定义的规则,称为递归规则。如 <数字序列>::=<数字序列><数字> 递归规则的存在,使得能用有穷个规则来定义无穷的语言。 • 如果一个规则形如U::=…U…(或U→xUy),则该规则是递归的; 如果规则形如U::=U…(或U→Uy),则称左递归的; 如果规则形如U::=…U (或U→xU),则称右递归的。 • 例:<标识符表>::=<标识符表>,<标识符> (左递归规则) <因式>::=!<因式> (右递归规则)

  42. 文法的递归性 • 定义:对于某文法,存在U∈VN, 如果U  + …U..., 则称该文法递归于U; 如果U  + U…,则称该文法左递归于U; 如果U  + …U,则称该文法右递归于U。 • 例1:C语言中: <语句>  + …<语句> (文法右递归于<语句>) • 例2: U→Vx V→Uy|z(都不递归) 有 U  + Uxy,所以该文法是左递归的。 • 注:描述程序设计语言的文法必定都是递归的。

  43. 4.句型、句子、语言的定义 • 句型和句子 设有文法G[S],若符号串α是从开始符推导出来的,即 S =>* α ,则称α是文法G的句型。若α仅由终结符组成,即 S =>* α ,且α∈VT*,则称α是文法G的句子。 例 文法G[S]: S→0S1, S→01 因为S  0S1  00S11  000S111  00001111 所以S,0S1 ,00S11 ,000S111,00001111都是G的句型00001111是G的句子 由规范推导所得的句型称为规范句型

  44. 语言的定义 由文法G生成的语言记为L(G),它是文法G的一切句子的集合,即 L(G)={x|S =>* x,且 x∈VT* } 例 文法G: S→0S1, S→01 S0S1 00S11  03S13 …0n-1S1n-10n1n L(G)={0n1n|n≥1} • 文法和语言的关系: 文法G生成的每个串都在L(G)中 L(G)中的每个串确实能被G生成

  45. 根据文法,可以通过推导得到该文法相应的语言;根据文法,可以通过推导得到该文法相应的语言; 例:G[E]:E→E+T|T T→T×F|F F→(E)|a EE+T T+T F+T a+T a+T×F a+F×F a+a×F a+a×a 表示一切能用符号a,+,×,(,)构成的算术表达式 • 有了语言的要求,也可以为该语言设计文法 例:若语言由0、1符号串组成,串中0和1的个数相同,构造其文法为:A → 0B|1C B → 1|1A|0BB C → 0|0A|1CC

  46. 5.文法的等价 若L(G1)=L(G2),则称文法G1和G2是等价的。 例如 文法 G1[A]:A→0R A→01 R→A1 G2[S]:S→0S1 S→01 所定义的语言都是0n1n 两文法等价

  47. 2.4 文法的类型 Chomsky对文法中的规则施加不同限制,将文法和语言分为四大类: • 0型文法(PSG)  0型语言或短语结构语言 • 1型文法(CSG)  1型语言或上下文有关语言 • 2型文法(CFG) 2型语言或上下文无关语言 • 3型文法(RG)3型语言或正则(正规)语言

  48. 0型文法 • 如果对于某文法G,P中每个规则具有下列形式: α→β 其中α∈V+ , β∈ V*,则该文法G为(Chomsky)0型文法或短语结构文法,缩写为PSG。相应的语言称为0型语言或短语结构语言。 • 如文法G,其中VN={A,B,S} VT={0,1} P={ S→0AB 1B→0 B→SA|01 A1→SB1 A0→S0B } L0(G[S])={ }

  49. 1型文法(上下文有关):它是0型文法的特例, 对P中的任一产生式α→β,都|β|≥|α|, 仅仅 S→ε除外,但S不得出现在任何产生式的右部。 例 文法G[S]: S→aSBE S→aBE EB→BE aB→ab bB→bb bE→be eE→ee 1型文法产生式的一般形式是 A→, , ∈ V* ,A∈VN ,β∈V+ ,它表示当A的上文为且下文为时可把A替换成,因此称1型文法为上下文有关文法。

  50. 2型文法(上下文无关文法) :它是1型文 法的特例,对任一产生式α→β,都有 α∈VN , β∈(VN∪VT)* • 例 文法G[S]: S→AB A→BS|0 B→SA|1 • 2型文法产生式的一般形式是: A→,它表示不管A 的上下文如何都可把A替换成,因此被称为上 下文无关文法。 • 通常程序设计语言的文法,可用2型文法来描述, 因此我们重点研究2型文法。如C,Pascal

More Related