SlideShare uma empresa Scribd logo
1 de 63
第 2章

文法和语言


        1
本章目的
  构造编译程序,需针
对特定的程序语言,故需
                 对
对被编译的程序语言本身   于程序设
做精确地描述。       计者而言
  为语言的语法(文法   ,文法给
)描述寻求工具。工具要   出了语言
对程序设计语言给出精确   的精确的
              语法规范
无二义的语法描述。(严
              说明。
谨、简洁、易读)。            2
程序设计语言描述

语法 Syntax :对语言结构的定义。
语义 Semantics :描述语言的含义。
语用 Pragmatics :从使用者角度描述语言
。
    如果不考虑语义和语用,即只从语
法这一侧面来看语言,这种意义下的语言
称作形式语言。


                            3
形式语言抽象地定义为一个数学
系统。 “ 形式 ” 是指这样的事实:语言的
所有规则只以符号串能出现的方式来陈
述。
      形式语言理论是对符号串集合的
表示法、结构及其特性的研究。是程序
设计语言语法分析研究的基础。




                         4
§2.1   字母表和符号串
§2.2   文法和语言的形式定义
§2.3   语法树和文法的二义性
§2.4   文法的类型




                    5
§2.1

字母表和符号
   串


         6
每个程序设计语言都是一个“ 基本
符号” 串,设有一基本符号集,那么程
序设计语言可看成是在这个基本符号集
上定义的,按一定规则构成的一切基本
符号串组成的集合。
  为了给出语言的形式定义,首先学
习一些基本概念和术语。


                     7
1. 字母表表: 符号(元素)的非空有穷集合。
   字符(符号): 可以相互区别的记号(元
   素)。
2. 符号串: 由字母表表中的符号组成的任何有
穷序列称为该字母表上的符号串。

( 1 )空符号串 ε : 没有 符号的符号串 。
     例如: Σ ={ a , b }
 ε , a , b , a a , a b , a a b b a … 都是是上的符号串
                                            8
( 2 )符号串 s 的头(前缀): 移走符号串
s 尾部的零个或多于零个符号得到的符号串。
              如: b 是符号串
b a na na 的一个前缀。
  符号串 s 的尾(后缀): 删去符号串 s 头
部的零个或多于零个符号得到的符号串。
      如 : na na 是符号串 b a na na 的一
个后缀。
( 3 )符号串 s 的子串: 从 s 中删去一个
前缀和一个后缀得到的符号串。
               如 : a na 是符号串
b a na na 的一个子串。                    9
对于每个符号串 s , s 和 ε 两者都是
符号串 s 的前缀,后缀和子串。
( 4 )符号串 s 的真前缀,真后缀,真子
串
 3. 符号串的运算
  ( 1) 符号串的长度: 符号串中符号的个数 .
 符号串 s 的长度记为 | s | 。 ε 的长度为 0 。
 ( 2) 连接: 符号串 x 、 y 的连接 , 是把 y 的符
 号写在 x 的符号之后得到的符号串 xy 。
                  如 x=a b , y=c d 则
 xy=a b c d 有 ε a = a ε = a
 ( 3) 方幂: 符号串自身连接 n 次得到的符号串
                                      10


         n                        1
( 4) 符号串集合: 若集合 A 中所有元素都是某
 字母表表上的符号串,则称 A 为字母表表上的
 符号串集合。
  两个符号串集合 A 和 B 的乘积定义为:
   A B ={xy| x∈A 且 y∈B }
  若 集合 A ={a b , c d e } B = {0, 1} ,则

    A B ={a b 1, a b 0, c d e 0, c d e 1}


4. 闭包: 使用 用 * 表示示上的一切符号串(包
 括 ε )组成的集合。 Σ * 称为 Σ 的闭包。
     上的除 ε 外的所有符号串组成的集合记                    11


 为为 + 。 Σ + 称为 Σ 的正闭包。
Σ = {ε } ∪ Σ ∪ Σ ∪ ......
     *                 2

   Σ + = Σ* − {ε } = ΣΣ* = Σ ∪ Σ 2 ∪ Σ3 ∪ ......


例: Σ={a,b}
  Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…}
  Σ+={a,b,aa,ab,ba,bb,aaa,aab,…}




                                                   12
文法的直观概
   念


         13
当我们表述一种语言时,无非是说明这种
语言的句子,如果语言只含有有穷多个句子,
则只需列出句子的有穷集就行了,但对于含有
无穷句子的语言来讲,存在着如何给出它的有
穷表示的问题。
  以自然语言为例,人们无法列出全部句子
,但是人们可以给出一些规则,用这些规则来
说明 ( 或者定义 ) 句子的组成结构。

  比如汉语句子可以是由主语后随谓语而成
,构成谓语的是动词和直接宾语,以下是该句
的构成规则:
                       14
“ 我是大学生。”是一个汉语句子

① 〈句子〉∷ = 〈主语〉〈谓语〉
② 〈主语〉∷ = 〈代词〉|〈名词〉
③ 〈代词〉∷ = 我|你|他
④ 〈名词〉∷ = 王明|大学生|工人|英
 语
⑤ 〈谓语〉∷ = 〈动词〉〈直接宾语〉
⑥ 〈动词〉∷ = 是|学习
⑦ 〈直接宾语〉∷ = 〈代词〉|〈名词〉
                        15
有了一组规则以后,按照如下方式用它们导出句
 子:开始去找∷ = 左端的带有〈句子〉的规则并把它由∷
 = 右端的符号串代替,这个动作表示成:
〈句子〉 〉 〈主语〉〈谓语〉,
    然后在得到的串〈主语〉〈谓语〉中,选取〈主
 语〉或〈谓语〉,再用相应规则的∷ = 右端代替之。
 重复做下去,句子:“ 我是大学生” 的全部动作过程是:
 〈句子〉 〉 〈主语〉〈谓语〉
       〈代词〉〈谓语〉     符号号 的含义:
 〉   〉 我〈谓语〉        使用一条规则,
                    代替替左边的某
       我〈动词〉〈直接宾语   个符号,产生生
 〉                  右端的符号串。
 〉   〉 我是〈直接宾语〉
       我是〈名词〉                  16
       我是大学生
“ 我是大学生” 的构成符合上述规则
,而“ 我大学生是” 不符合上述规则,
那么它就不是句子。这些规则成为我
们判别句子结构合法与否的依据。

  换句话说,这些规则看成是一种元
语言,用它描述汉语结构。这种描述
语言的语法结构的形式规则称为文法
。
                       17
 王明是大学生。
 他学习英语。

 你是工人。

       使用文法作为工具,不
    仅能严格定义句子结构,也能
    用有限的规则把语言的全部句
    子描述出来。
       所以,文法是以有穷集
    合刻划无穷集合的工具。
                    18
上例中的局限性
   对“ 我是大学生” 作扩充— — “ 我是计算机
    专业的大学生。”
   该句子中多了定语,相应的对前面的 7 条
    规则做相应修改。

   因此,用
                  同理,程序设
文法描述的一组
               计语言也不能只用一
规则只能描述一
               组规则就把程序都描
类句子,不同类
               述完整。
的句子应使用不                        19
同的规则。
§2.2

文法和语言的
 形式定义

         20
一、文法
二、推导
 1. 直接推导(一步推导)
 2. 推导序列(多步推导)
三、句型,句子
四、语言
 1. 语言等价
 2. 文法与语言的关系     21
如何来描述一种语言?
  如果语言是有穷的(只含有有穷多个句
子),可以将句子逐一列出来表示。
  如果语言是无穷的,找出语言的有穷表示。
语言的有穷表示有两个途经:
            识别方式(自动机):
            是一个过程,当输入的
生成方式 (文法)
            一任意串属于语言时,
:语言中的每个句子
            该过程经有限次计算后
可以用严格定义的规
            就会停止并回答 “ 是 ” ,
则来构造。
            若不属于,要么能停止
            并回答 “ 不是 ” ,(要么
                              22
            永远继续下去。)
文法是生成方式描述语言的:语
言中的每个句子可以用严格定义的规
则来构造。
  下面给出文法的四个组成部分,
初步对文法的形式定义有一个初步了
解。




                   23
1. 终结符: 语言中不可再分的基本符号,通
 常是一个语言的字母表。如程序设计语言中
 的基本字、常数、运算符、分界符等。

2. 非终结符: 它不像终结符代表了语法的最
小元素,是一种个体记号,它是一个类、一个集
合。一个非终结符代表了一定的语法概念。程序
设计语言中常见的语法单位有“ 过程” 、“ 赋值语
句” 、“ 表达式” 等。
3. 开始符号: 是一个特殊的非终结符。

4. 产生式: 构造某个语法时应满足的规则。
                            24
文法 G 定义为四元组 (VN , VT , P , S ) 其
 中:

 VN 为非终结符号 ( 或语法实体,或变量 ) 集
 ;
 VT 为终结符号集;
 S 为开始符号,它是一个非终结符,至少要
 在一条产生式中作为左部出现。
  VN , VT 和 P 是非空有穷集。
 P 为产生式 ( 也称规则 ) 的集合;
 VN 和 VT 不含公共的元素,即 VN ∩ VT = φ
 用 V 表示 VN ∪ VT ,称为文法 G 的字母表       25
 。
文法的举例

例 : 文法 G= ( VN , VT , P , S )
   VN = { S }, VT ={ 0, 1 }
   P={ S→0S1, S→01 }
   S 为开始符号



                                26
定义中的注意事项
1. 产生式形如 α→β , “ → ” 读作 “ 是 ” 或 “ 定义为 ”
  。
    其中 α 是字母表 V 的正闭包 V+ 中的一个符号,
  β 是 V* 中的一个符号。
  α 称为规则的左部, β 称作规则的右部。
2. 若 α → β 1 , α → β 2 …… α → β n ,可简写为: α
  → β 1 | β 2 | ……| β n
          习惯表示         小写字母:终结
           符
                          大写字母:        27

            非终结符
例: 文法 G= ( VN , VT , P , S )
 VN ={ 标识符,字母,数字 }
 VT ={a,b,c,…x,y,z,0,1,…,9}
 P={< 标识符 >→< 字母 >
    < 标识符 >→< 标识符 >< 字母 >
    < 标识符 >→< 标识符 >< 数字 >
    < 字母 >→a,…, < 字母 >→z
    < 数字 >→0,…, < 数字 >→9 }
 S=< 标识符 >                     28
文法的几种等价写法

G : S→aAb      G[S] : A→ab
   A→ab              A→aAb
   A→aAb             A→ε
   A→ε               S→aAb

    G[S] : A→ab | aAb |ε
          S→aAb
                             29
直接推导““”
α→β 是文法 G 的产生式,若有 v,w 满足:
v=γαδ,w= γβδ, 其中 γ∈ V*,δ∈ V*
则称 v 直接推导到 w, 记作 v ⇒ w 。
也称 w 直接归约到 v 。

例: G : ① S→0S1 , ② S→01
 0S1 ⇒00S11            使用产生式
①
 00S11 ⇒000S111       使用产生式
①
 000S111 ⇒00001111    使用产生式    30


②
推导序列


1. 若存在 v ⇒w0 ⇒w1 ⇒... ⇒wn=w,
 (n>0)
       +
则记为 v => w ,称 v 推导出 w ,
或 w 归约到 v 。
      +                  *
2. 若有 v => w ,或 v=w ,则记为 v     31
 => w
推导举例
例:文法 G : S→0S1 , S→01
  0S1 ⇒00S11
  00S11 ⇒000S111
  000S111 ⇒00001111
  S ⇒0S1 ⇒00S11
    ⇒000S111⇒00001111
     +
  S => 00001111
                        32
句型、句子的定义
1. 句型 : 有文法 G ,若 S =>* x ,则称 x 是
 文法 G 的
            句型。
2. 句子 : 有文法 G ,若 S =>* x ,且
  x∈ VT* ,则称
                  G 的句型 :
         x 是文法 G 的句子。
                   S , 0S1 , 00S11 ,
例: G : S→0S1 | 01
                   000S111 , 00001111
   S ⇒0S1
     ⇒00S11       G 的句子: 00001111,
     ⇒000S111     01                    33


     ⇒00001111
推导句子 a+a*a
例: 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 , + , * , ( 和 ) 构成的算术
 表达式
                                 34
语言的定义
      由文法 G 生成的语言记为
L(G) ,它是文法 G 的一切句子的集合 :

L(G)={ x | S =>* x ,
           其中 S 为文法的开始符号,且
x ∈ VT*}

  例: G : S→0S1 , S→01
   L(G)={0n1n|n≥1}           35
 语言是由句子组成的集合,是由一组
  符号所构成的集合。
 换言之,字母表表上的一个语言是是
  上的一些符号串的集合 。
 字母表表上的每个语言是是 * 的一
  个子集。

                      36
例如:字母表 Σ={a,b} ,
 Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…}

集合 {ab,aabb,aaabbb,…,anbn,…} ,
或表示为 {w|w∈ Σ* 且 w=anbn,n≥1} ,
为字母表表上的一个语言。

集合 {a,aa,aaa,…} ,
或表示为 {w|w∈ Σ* 且 w=an,n≥1} ,
 为字母表表上的一个语言。

{ε} 是一个语言。          。 即即      是一个
                    语言。             37
语言的等价
      若 L ( G1 ) =L ( G2 ),则称文法
G1 和 G2 是等价的。



G1[A] :       等   G2[S] :
A→0R          价   S→0S1
       A→01              S→01
       R→A1
                                  38
文法与语言的关系

 给定一个文法,就能从结构上确定其语
  言,且是唯一的。 G→L(G)
 给定一种语言,能确定其文法,但这种
  文法不是唯一的。 L→G1 或 G2 或 ……



                        39
§2.3

 语法树和
文法的二义性

         40
上下文无关文法有足够的能力描述
 程序设计语言的语法结构。

语法树 - - - 句型推导的直观表示。




                       41
句型、推导
 G[E] : E→E+T|T
       T→T*F|F
       F→(E)|a
最左推导                  最右推导
 E⇒E+T ⇒T+T ⇒F+T      E⇒E+T ⇒E+T*F ⇒E+T*a
  ⇒a+T ⇒a+T*F          ⇒E+F*a ⇒E+a*a
  ⇒a+F*F ⇒a+a*F        ⇒T+a*a ⇒F+a*a
  ⇒a+a*a               ⇒a+a*a

      无规律
      E⇒E+T ⇒T+T ⇒T+T*F ⇒F+T*F
       ⇒F+F*F ⇒ a+F*F ⇒ a+F*a ⇒a+a*a        42
规范推导 规范句型

最左(最右)推导:
   在推导的任何一步 α ⇒β ,其中
α 、 β 是句型,都是对 α 中的最左
(右)非终结符进行替换。

   最右推导被称为规范推导。
 由规范推导所得的句型称为规范句
        型。
                       43
语法树的构造过程


      以文法开始符号 S 为根结点,
随着推导的逐步展开,对句型中某个非
终结符 A 用相应产生式 A→α 的右部替
换时,为 A 的结点生成其子结点依次为
α 的子树,直至推导结束。



                        44
构造语法树

G[E] : E→E+T|T      E       E
      T→T*F|F       E+T   E + T
      F→(E)|a
                          T
 E⇒ E+T ⇒T+T ⇒          E
 F+T                  E + T
  ⇒ a+T ⇒ a+T*F      T
  ⇒ a+F*F ⇒ a+a*F
                     F
  ⇒a+a*a
                                  45
E⇒E+T ⇒T+T ⇒F+T
 ⇒a+T ⇒ a+T*F          E
 ⇒a+F*F ⇒ a+a*F
 ⇒a+a*a               E + T
                  T        T *   F
E⇒E+T ⇒E+T*F      F        F     a
 ⇒E+T*a ⇒E+F*a
 ⇒E+a*a⇒T+a*a     a        a
 ⇒F+a*a ⇒a+a*a
                  看不出句型中的符号
                   被替代的顺序
E⇒E+T ⇒T+T
 ⇒T+T*F ⇒F+T*F
 ⇒F+F*F ⇒a+F*F
 ⇒a+F*a ⇒a+a*a                       46
语法树中的几个概念

1. 一棵语法树中没有后代的结点,称为端末
  结。
 2. 一棵语法树生长的任何时刻,所有没有后代
 的端末结自左至右排列起来就是一个句型。

3. 在一棵语法树中,一个内部结点 A 连同它的
所有后裔组成了一棵子树。
只有单层分支的子树称为简单子树。(只有父
子两代,没有第三代。)
                          47
语法树 --- 句型推导的直观表示

      给定文法 G=(VN,VT,P,S) ,对于
G 的任何句型都能构造与之关联的语法
树 ( 推导树 ) 。
 定理:
  G 为上下文无关文法,
      对于 α≠ε ,有 S =>* α ,当且仅当
 文法 G 有以 α 为结果的一棵语法树 ( 推
 导树 )
                                48
语法树要满足的条件

 1. 每个结点都有一个标记,此标记是 V 的一
   个符号。
2. 根的标记是 S (开始符号)。
3. 若一结点 n 至少有一个它自己除外的子孙
   ,并且有标记 A ,则肯定 A∈ VN 。
4. 如果结点 n 有标记 A, 其直接子结点从左到
  右的次序是 n1 , n2 , … , nk ,其标记分别
  为 A1 , A2 , … , Ak ,那么 A→A1A2 , …
  , Ak 一定是 P 中的一个产生式。
                                      49
语法树的用处
用于描述上下文无关文法句型推导的直观方法。

例 : G[S]:       句型 aabbaa 的语法树(推导
  S→aAS | a     树)         S
  A→SbA             a       A           S
  A→SS                  S   b       A       a
  A→ba                  a       b       a
 叶子结点:树中没有子孙的结点。
    从左到右读出推导树的叶子结点连接成的文
 法符号串,为 G[S] 的句型。                               50
推导过程中施用产生式的顺序

例 : G[S]:
                         S
  S→aAS | a
                    a    A               S
  A→SbA
                     S   b       A       a
  A→SS
                     a       b       a
  A→ba

   S⇒aAS⇒aAa⇒aSbAa⇒aSbbaa⇒aabbaa
   S⇒aAS⇒aSbAS⇒aabAS⇒aabbaS⇒aabbaa
   S⇒aAS⇒aSbAS⇒aSbAa⇒aabAa⇒aabbaa            51
一棵语法树表示了一个句型的种种可
能的 ( 但未必是所有的 ) 不同推导过程
,包括最左 ( 最右 ) 推导。

 但是,一个句型是否只对应唯一的一
棵语法树呢?一个句型是否只有唯一的
一个最左 ( 最右 ) 推导呢 ?


                        52
例: G[E]:                E           E
   E→i                E + E       E * E
   E → E+E
                  E * E i         i E +
   E → E*E
                              E
   E → (E)        i     i
                                    i
句型 i*i+i 的两个不同的最左推导:
                   i
 推导 1 : E ⇒ E+E       推导 2 : E ⇒ E*E
       ⇒ E*E+E              ⇒ i*E
       ⇒ i*E+E              ⇒ i*E+E
       ⇒ i*i+E              ⇒ i*i+E
       ⇒ i*i+i              ⇒i*i+i        53
文法的二义性

  若一个文法存在某个句子对应两棵不
同的语法树,则称这个文法是二义的。
  或者,若一个文法存在某个句子有两
个不同的最左(右)推导,则称这个文
法是二义的。



                     54
文法的二义性与语言的二义性
      文法的二义性和语言的二义性是两个不
同的概念。因为可能有两个不同的文法 G 和 G
′ ,其中 G 是二义的,但是却有 L(G)=L(G′) 。这
两个文法所产生的语言是相同的。

   如果产生上下文无关语言的每一个文法都
是二义的,则说此语言是先天二义的。对于一个
程序设计语言来说,常常希望它的文法是无二义
的,因为希望对它的每个语句的分析是唯一的。

                                  55
§2.4

文法的类型

        56
通过对产生式施加不同的限制,将文法分为四
种类型:
 0 型文法:对任一产生        1 型文法:对任一
 式 α→β ,都有          产生式 α→β ,都有
 α∈ (VN∪ VT)* 且至少含有 |β|≥|α| , 仅仅 S→ε
 一个非终结符,            除外。
 β∈ (VN∪ VT)*
                    3 型文法 ( 右线性文
  2 型文法:对任一         法 ) :任一产生式
  产生式 α→β ,都有       α→β 的形式都为
  α∈ VN ,           A→aB 或 A→a ,其
  β∈ (VN∪ VT)*      中 A∈ VN , B∈ VN , 57
                    a∈ VT
1 型文法举例

例: 1 型(上下文有关)文法
  文法 G[S] :    S→CD
 Ab→bA
           C→aCA    Ba→aB
           C→bCB    Bb→bB
           AD→aD    C→ε
           BD→bD    D→ε
                            58
           Aa→bD
2 型文法举例

例: 2 型(上下文无关)文法

 文法 G[S] :   S→AB
          A→BS|0
          B→SA|1


                    59
3 型文法举例

G[S] :
    S→0A|1B|0
    A→0A|1B|0S
    B→1B|1|0



                 60
文法的类型
四种文法之间的逐级 “ 包含 ” 关系

         0 型文法
         1 型文法


         2 型文法

         3 型文
         法
                      61
本章小结


       62
1. 本章出现的概念较多,应该重点理
  解文法、推导、句型、句子及语言的
  定义等概念。语法分析有关内容在后
  面章节详细讨论。

2. 文法作为程序语言的语法的描述工具
  , 它用规则只能陈述的是 : 语言的所
  有句子以什么样的符号串出现。请记
  住文法和语言的形式定义中的 “ 形式 ”
  的含义 — 只涉及语言的语法不涉及语
  言的语义。                63

Mais conteúdo relacionado

Destaque

Tarifas canal capital 2012
Tarifas canal capital 2012Tarifas canal capital 2012
Tarifas canal capital 2012prensaycultura
 
сказы
сказысказы
сказыSokol194
 
UNIVERSIDAD TÉCNICA DE AMBATO
UNIVERSIDAD TÉCNICA DE AMBATOUNIVERSIDAD TÉCNICA DE AMBATO
UNIVERSIDAD TÉCNICA DE AMBATODiana Silva Ajila
 
Donors profiling softlab
Donors profiling softlabDonors profiling softlab
Donors profiling softlabSoftlab SpA
 
Fotografia per l'Architettura. By the media-network team
Fotografia per l'Architettura. By the media-network teamFotografia per l'Architettura. By the media-network team
Fotografia per l'Architettura. By the media-network teamDenis Mior
 
Blog pp cultural diversity
Blog pp cultural diversityBlog pp cultural diversity
Blog pp cultural diversityPaulineHeadley
 
Motivation and inspiration
Motivation and inspirationMotivation and inspiration
Motivation and inspirationCieraDiaz
 
105759187 13470-bryman
105759187 13470-bryman105759187 13470-bryman
105759187 13470-brymantmsukata
 
C&B Review Article 9.22.14
C&B Review Article 9.22.14C&B Review Article 9.22.14
C&B Review Article 9.22.14Lisa Thurston
 
Seguimiento del power 2.1
Seguimiento del power 2.1Seguimiento del power 2.1
Seguimiento del power 2.1giseladanderfer
 
Interactive questions
Interactive questionsInteractive questions
Interactive questionspancho03
 

Destaque (20)

Schoo01 130906042632-
Schoo01 130906042632-Schoo01 130906042632-
Schoo01 130906042632-
 
Evaluation Media
Evaluation MediaEvaluation Media
Evaluation Media
 
Tarifas canal capital 2012
Tarifas canal capital 2012Tarifas canal capital 2012
Tarifas canal capital 2012
 
сказы
сказысказы
сказы
 
TYPO3 47 release
TYPO3 47 releaseTYPO3 47 release
TYPO3 47 release
 
UNIVERSIDAD TÉCNICA DE AMBATO
UNIVERSIDAD TÉCNICA DE AMBATOUNIVERSIDAD TÉCNICA DE AMBATO
UNIVERSIDAD TÉCNICA DE AMBATO
 
Donors profiling softlab
Donors profiling softlabDonors profiling softlab
Donors profiling softlab
 
PREP Game Plan Workshop
PREP Game Plan WorkshopPREP Game Plan Workshop
PREP Game Plan Workshop
 
Pragmatics
PragmaticsPragmatics
Pragmatics
 
Fotografia per l'Architettura. By the media-network team
Fotografia per l'Architettura. By the media-network teamFotografia per l'Architettura. By the media-network team
Fotografia per l'Architettura. By the media-network team
 
Blog pp cultural diversity
Blog pp cultural diversityBlog pp cultural diversity
Blog pp cultural diversity
 
THNK
THNKTHNK
THNK
 
Informatica david
Informatica davidInformatica david
Informatica david
 
Motivation and inspiration
Motivation and inspirationMotivation and inspiration
Motivation and inspiration
 
PREP Game Plan Workshop
PREP Game Plan WorkshopPREP Game Plan Workshop
PREP Game Plan Workshop
 
105759187 13470-bryman
105759187 13470-bryman105759187 13470-bryman
105759187 13470-bryman
 
Tallinna loomaaed
Tallinna loomaaedTallinna loomaaed
Tallinna loomaaed
 
C&B Review Article 9.22.14
C&B Review Article 9.22.14C&B Review Article 9.22.14
C&B Review Article 9.22.14
 
Seguimiento del power 2.1
Seguimiento del power 2.1Seguimiento del power 2.1
Seguimiento del power 2.1
 
Interactive questions
Interactive questionsInteractive questions
Interactive questions
 

Mais de tjpucompiler

第6章 自底向上的lr分析法
第6章 自底向上的lr分析法第6章 自底向上的lr分析法
第6章 自底向上的lr分析法tjpucompiler
 
第11章 目标代码生成
第11章 目标代码生成第11章 目标代码生成
第11章 目标代码生成tjpucompiler
 
第10章 代码优化
第10章 代码优化第10章 代码优化
第10章 代码优化tjpucompiler
 
第8章 运行时的存储管理
第8章 运行时的存储管理第8章 运行时的存储管理
第8章 运行时的存储管理tjpucompiler
 
第6章 自底向上的lr分析法
第6章 自底向上的lr分析法第6章 自底向上的lr分析法
第6章 自底向上的lr分析法tjpucompiler
 
第4章 自顶向下的语法分析
第4章 自顶向下的语法分析第4章 自顶向下的语法分析
第4章 自顶向下的语法分析tjpucompiler
 

Mais de tjpucompiler (8)

第6章 自底向上的lr分析法
第6章 自底向上的lr分析法第6章 自底向上的lr分析法
第6章 自底向上的lr分析法
 
第11章 目标代码生成
第11章 目标代码生成第11章 目标代码生成
第11章 目标代码生成
 
第10章 代码优化
第10章 代码优化第10章 代码优化
第10章 代码优化
 
第9章 符号表
第9章 符号表第9章 符号表
第9章 符号表
 
第8章 运行时的存储管理
第8章 运行时的存储管理第8章 运行时的存储管理
第8章 运行时的存储管理
 
第6章 自底向上的lr分析法
第6章 自底向上的lr分析法第6章 自底向上的lr分析法
第6章 自底向上的lr分析法
 
第4章 自顶向下的语法分析
第4章 自顶向下的语法分析第4章 自顶向下的语法分析
第4章 自顶向下的语法分析
 
第1章 概论
第1章 概论第1章 概论
第1章 概论
 

Último

哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制jakepaige317
 
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptxEDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptxmekosin001123
 
EDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptxEDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptxmekosin001123
 
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书jakepaige317
 
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...黑客 接单【TG/微信qoqoqdqd】
 
educ6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxeduc6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxmekosin001123
 

Último (6)

哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
 
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptxEDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
 
EDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptxEDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptx
 
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
 
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
 
educ6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxeduc6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptx
 

第2章 文法和语言

  • 2. 本章目的 构造编译程序,需针 对特定的程序语言,故需 对 对被编译的程序语言本身 于程序设 做精确地描述。 计者而言 为语言的语法(文法 ,文法给 )描述寻求工具。工具要 出了语言 对程序设计语言给出精确 的精确的 语法规范 无二义的语法描述。(严 说明。 谨、简洁、易读)。 2
  • 3. 程序设计语言描述 语法 Syntax :对语言结构的定义。 语义 Semantics :描述语言的含义。 语用 Pragmatics :从使用者角度描述语言 。 如果不考虑语义和语用,即只从语 法这一侧面来看语言,这种意义下的语言 称作形式语言。 3
  • 4. 形式语言抽象地定义为一个数学 系统。 “ 形式 ” 是指这样的事实:语言的 所有规则只以符号串能出现的方式来陈 述。 形式语言理论是对符号串集合的 表示法、结构及其特性的研究。是程序 设计语言语法分析研究的基础。 4
  • 5. §2.1 字母表和符号串 §2.2 文法和语言的形式定义 §2.3 语法树和文法的二义性 §2.4 文法的类型 5
  • 8. 1. 字母表表: 符号(元素)的非空有穷集合。 字符(符号): 可以相互区别的记号(元 素)。 2. 符号串: 由字母表表中的符号组成的任何有 穷序列称为该字母表上的符号串。 ( 1 )空符号串 ε : 没有 符号的符号串 。 例如: Σ ={ a , b } ε , a , b , a a , a b , a a b b a … 都是是上的符号串 8
  • 9. ( 2 )符号串 s 的头(前缀): 移走符号串 s 尾部的零个或多于零个符号得到的符号串。 如: b 是符号串 b a na na 的一个前缀。 符号串 s 的尾(后缀): 删去符号串 s 头 部的零个或多于零个符号得到的符号串。 如 : na na 是符号串 b a na na 的一 个后缀。 ( 3 )符号串 s 的子串: 从 s 中删去一个 前缀和一个后缀得到的符号串。 如 : a na 是符号串 b a na na 的一个子串。 9
  • 10. 对于每个符号串 s , s 和 ε 两者都是 符号串 s 的前缀,后缀和子串。 ( 4 )符号串 s 的真前缀,真后缀,真子 串 3. 符号串的运算 ( 1) 符号串的长度: 符号串中符号的个数 . 符号串 s 的长度记为 | s | 。 ε 的长度为 0 。 ( 2) 连接: 符号串 x 、 y 的连接 , 是把 y 的符 号写在 x 的符号之后得到的符号串 xy 。 如 x=a b , y=c d 则 xy=a b c d 有 ε a = a ε = a ( 3) 方幂: 符号串自身连接 n 次得到的符号串 10 n 1
  • 11. ( 4) 符号串集合: 若集合 A 中所有元素都是某 字母表表上的符号串,则称 A 为字母表表上的 符号串集合。 两个符号串集合 A 和 B 的乘积定义为: A B ={xy| x∈A 且 y∈B } 若 集合 A ={a b , c d e } B = {0, 1} ,则 A B ={a b 1, a b 0, c d e 0, c d e 1} 4. 闭包: 使用 用 * 表示示上的一切符号串(包 括 ε )组成的集合。 Σ * 称为 Σ 的闭包。 上的除 ε 外的所有符号串组成的集合记 11 为为 + 。 Σ + 称为 Σ 的正闭包。
  • 12. Σ = {ε } ∪ Σ ∪ Σ ∪ ...... * 2 Σ + = Σ* − {ε } = ΣΣ* = Σ ∪ Σ 2 ∪ Σ3 ∪ ...... 例: Σ={a,b} Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…} Σ+={a,b,aa,ab,ba,bb,aaa,aab,…} 12
  • 15. “ 我是大学生。”是一个汉语句子 ① 〈句子〉∷ = 〈主语〉〈谓语〉 ② 〈主语〉∷ = 〈代词〉|〈名词〉 ③ 〈代词〉∷ = 我|你|他 ④ 〈名词〉∷ = 王明|大学生|工人|英 语 ⑤ 〈谓语〉∷ = 〈动词〉〈直接宾语〉 ⑥ 〈动词〉∷ = 是|学习 ⑦ 〈直接宾语〉∷ = 〈代词〉|〈名词〉 15
  • 16. 有了一组规则以后,按照如下方式用它们导出句 子:开始去找∷ = 左端的带有〈句子〉的规则并把它由∷ = 右端的符号串代替,这个动作表示成: 〈句子〉 〉 〈主语〉〈谓语〉, 然后在得到的串〈主语〉〈谓语〉中,选取〈主 语〉或〈谓语〉,再用相应规则的∷ = 右端代替之。 重复做下去,句子:“ 我是大学生” 的全部动作过程是: 〈句子〉 〉 〈主语〉〈谓语〉 〈代词〉〈谓语〉 符号号 的含义: 〉 〉 我〈谓语〉 使用一条规则, 代替替左边的某 我〈动词〉〈直接宾语 个符号,产生生 〉 右端的符号串。 〉 〉 我是〈直接宾语〉 我是〈名词〉 16 我是大学生
  • 17. “ 我是大学生” 的构成符合上述规则 ,而“ 我大学生是” 不符合上述规则, 那么它就不是句子。这些规则成为我 们判别句子结构合法与否的依据。 换句话说,这些规则看成是一种元 语言,用它描述汉语结构。这种描述 语言的语法结构的形式规则称为文法 。 17
  • 18.  王明是大学生。  他学习英语。  你是工人。 使用文法作为工具,不 仅能严格定义句子结构,也能 用有限的规则把语言的全部句 子描述出来。 所以,文法是以有穷集 合刻划无穷集合的工具。 18
  • 19. 上例中的局限性  对“ 我是大学生” 作扩充— — “ 我是计算机 专业的大学生。”  该句子中多了定语,相应的对前面的 7 条 规则做相应修改。 因此,用 同理,程序设 文法描述的一组 计语言也不能只用一 规则只能描述一 组规则就把程序都描 类句子,不同类 述完整。 的句子应使用不 19 同的规则。
  • 21. 一、文法 二、推导 1. 直接推导(一步推导) 2. 推导序列(多步推导) 三、句型,句子 四、语言 1. 语言等价 2. 文法与语言的关系 21
  • 22. 如何来描述一种语言? 如果语言是有穷的(只含有有穷多个句 子),可以将句子逐一列出来表示。 如果语言是无穷的,找出语言的有穷表示。 语言的有穷表示有两个途经: 识别方式(自动机): 是一个过程,当输入的 生成方式 (文法) 一任意串属于语言时, :语言中的每个句子 该过程经有限次计算后 可以用严格定义的规 就会停止并回答 “ 是 ” , 则来构造。 若不属于,要么能停止 并回答 “ 不是 ” ,(要么 22 永远继续下去。)
  • 24. 1. 终结符: 语言中不可再分的基本符号,通 常是一个语言的字母表。如程序设计语言中 的基本字、常数、运算符、分界符等。 2. 非终结符: 它不像终结符代表了语法的最 小元素,是一种个体记号,它是一个类、一个集 合。一个非终结符代表了一定的语法概念。程序 设计语言中常见的语法单位有“ 过程” 、“ 赋值语 句” 、“ 表达式” 等。 3. 开始符号: 是一个特殊的非终结符。 4. 产生式: 构造某个语法时应满足的规则。 24
  • 25. 文法 G 定义为四元组 (VN , VT , P , S ) 其 中: VN 为非终结符号 ( 或语法实体,或变量 ) 集 ; VT 为终结符号集; S 为开始符号,它是一个非终结符,至少要 在一条产生式中作为左部出现。 VN , VT 和 P 是非空有穷集。 P 为产生式 ( 也称规则 ) 的集合; VN 和 VT 不含公共的元素,即 VN ∩ VT = φ 用 V 表示 VN ∪ VT ,称为文法 G 的字母表 25 。
  • 26. 文法的举例 例 : 文法 G= ( VN , VT , P , S ) VN = { S }, VT ={ 0, 1 } P={ S→0S1, S→01 } S 为开始符号 26
  • 27. 定义中的注意事项 1. 产生式形如 α→β , “ → ” 读作 “ 是 ” 或 “ 定义为 ” 。 其中 α 是字母表 V 的正闭包 V+ 中的一个符号, β 是 V* 中的一个符号。 α 称为规则的左部, β 称作规则的右部。 2. 若 α → β 1 , α → β 2 …… α → β n ,可简写为: α → β 1 | β 2 | ……| β n 习惯表示 小写字母:终结 符 大写字母: 27 非终结符
  • 28. 例: 文法 G= ( VN , VT , P , S ) VN ={ 标识符,字母,数字 } VT ={a,b,c,…x,y,z,0,1,…,9} P={< 标识符 >→< 字母 > < 标识符 >→< 标识符 >< 字母 > < 标识符 >→< 标识符 >< 数字 > < 字母 >→a,…, < 字母 >→z < 数字 >→0,…, < 数字 >→9 } S=< 标识符 > 28
  • 29. 文法的几种等价写法 G : S→aAb G[S] : A→ab A→ab A→aAb A→aAb A→ε A→ε S→aAb G[S] : A→ab | aAb |ε S→aAb 29
  • 30. 直接推导““” α→β 是文法 G 的产生式,若有 v,w 满足: v=γαδ,w= γβδ, 其中 γ∈ V*,δ∈ V* 则称 v 直接推导到 w, 记作 v ⇒ w 。 也称 w 直接归约到 v 。 例: G : ① S→0S1 , ② S→01 0S1 ⇒00S11 使用产生式 ① 00S11 ⇒000S111 使用产生式 ① 000S111 ⇒00001111 使用产生式 30 ②
  • 31. 推导序列 1. 若存在 v ⇒w0 ⇒w1 ⇒... ⇒wn=w, (n>0) + 则记为 v => w ,称 v 推导出 w , 或 w 归约到 v 。 + * 2. 若有 v => w ,或 v=w ,则记为 v 31 => w
  • 32. 推导举例 例:文法 G : S→0S1 , S→01 0S1 ⇒00S11 00S11 ⇒000S111 000S111 ⇒00001111 S ⇒0S1 ⇒00S11 ⇒000S111⇒00001111 + S => 00001111 32
  • 33. 句型、句子的定义 1. 句型 : 有文法 G ,若 S =>* x ,则称 x 是 文法 G 的 句型。 2. 句子 : 有文法 G ,若 S =>* x ,且 x∈ VT* ,则称 G 的句型 : x 是文法 G 的句子。 S , 0S1 , 00S11 , 例: G : S→0S1 | 01 000S111 , 00001111 S ⇒0S1 ⇒00S11 G 的句子: 00001111, ⇒000S111 01 33 ⇒00001111
  • 34. 推导句子 a+a*a 例: 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 , + , * , ( 和 ) 构成的算术 表达式 34
  • 35. 语言的定义 由文法 G 生成的语言记为 L(G) ,它是文法 G 的一切句子的集合 : L(G)={ x | S =>* x , 其中 S 为文法的开始符号,且 x ∈ VT*} 例: G : S→0S1 , S→01 L(G)={0n1n|n≥1} 35
  • 36.  语言是由句子组成的集合,是由一组 符号所构成的集合。  换言之,字母表表上的一个语言是是 上的一些符号串的集合 。  字母表表上的每个语言是是 * 的一 个子集。 36
  • 37. 例如:字母表 Σ={a,b} , Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…} 集合 {ab,aabb,aaabbb,…,anbn,…} , 或表示为 {w|w∈ Σ* 且 w=anbn,n≥1} , 为字母表表上的一个语言。 集合 {a,aa,aaa,…} , 或表示为 {w|w∈ Σ* 且 w=an,n≥1} , 为字母表表上的一个语言。 {ε} 是一个语言。 。 即即 是一个 语言。 37
  • 38. 语言的等价 若 L ( G1 ) =L ( G2 ),则称文法 G1 和 G2 是等价的。 G1[A] : 等 G2[S] : A→0R 价 S→0S1 A→01 S→01 R→A1 38
  • 39. 文法与语言的关系  给定一个文法,就能从结构上确定其语 言,且是唯一的。 G→L(G)  给定一种语言,能确定其文法,但这种 文法不是唯一的。 L→G1 或 G2 或 …… 39
  • 42. 句型、推导 G[E] : E→E+T|T T→T*F|F F→(E)|a 最左推导 最右推导 E⇒E+T ⇒T+T ⇒F+T E⇒E+T ⇒E+T*F ⇒E+T*a ⇒a+T ⇒a+T*F ⇒E+F*a ⇒E+a*a ⇒a+F*F ⇒a+a*F ⇒T+a*a ⇒F+a*a ⇒a+a*a ⇒a+a*a 无规律 E⇒E+T ⇒T+T ⇒T+T*F ⇒F+T*F ⇒F+F*F ⇒ a+F*F ⇒ a+F*a ⇒a+a*a 42
  • 43. 规范推导 规范句型 最左(最右)推导: 在推导的任何一步 α ⇒β ,其中 α 、 β 是句型,都是对 α 中的最左 (右)非终结符进行替换。 最右推导被称为规范推导。 由规范推导所得的句型称为规范句 型。 43
  • 44. 语法树的构造过程 以文法开始符号 S 为根结点, 随着推导的逐步展开,对句型中某个非 终结符 A 用相应产生式 A→α 的右部替 换时,为 A 的结点生成其子结点依次为 α 的子树,直至推导结束。 44
  • 45. 构造语法树 G[E] : E→E+T|T E E T→T*F|F E+T E + T F→(E)|a T E⇒ E+T ⇒T+T ⇒ E F+T E + T ⇒ a+T ⇒ a+T*F T ⇒ a+F*F ⇒ a+a*F F ⇒a+a*a 45
  • 46. E⇒E+T ⇒T+T ⇒F+T ⇒a+T ⇒ a+T*F E ⇒a+F*F ⇒ a+a*F ⇒a+a*a E + T T T * F E⇒E+T ⇒E+T*F F F a ⇒E+T*a ⇒E+F*a ⇒E+a*a⇒T+a*a a a ⇒F+a*a ⇒a+a*a 看不出句型中的符号 被替代的顺序 E⇒E+T ⇒T+T ⇒T+T*F ⇒F+T*F ⇒F+F*F ⇒a+F*F ⇒a+F*a ⇒a+a*a 46
  • 47. 语法树中的几个概念 1. 一棵语法树中没有后代的结点,称为端末 结。 2. 一棵语法树生长的任何时刻,所有没有后代 的端末结自左至右排列起来就是一个句型。 3. 在一棵语法树中,一个内部结点 A 连同它的 所有后裔组成了一棵子树。 只有单层分支的子树称为简单子树。(只有父 子两代,没有第三代。) 47
  • 48. 语法树 --- 句型推导的直观表示 给定文法 G=(VN,VT,P,S) ,对于 G 的任何句型都能构造与之关联的语法 树 ( 推导树 ) 。 定理: G 为上下文无关文法, 对于 α≠ε ,有 S =>* α ,当且仅当 文法 G 有以 α 为结果的一棵语法树 ( 推 导树 ) 48
  • 49. 语法树要满足的条件 1. 每个结点都有一个标记,此标记是 V 的一 个符号。 2. 根的标记是 S (开始符号)。 3. 若一结点 n 至少有一个它自己除外的子孙 ,并且有标记 A ,则肯定 A∈ VN 。 4. 如果结点 n 有标记 A, 其直接子结点从左到 右的次序是 n1 , n2 , … , nk ,其标记分别 为 A1 , A2 , … , Ak ,那么 A→A1A2 , … , Ak 一定是 P 中的一个产生式。 49
  • 50. 语法树的用处 用于描述上下文无关文法句型推导的直观方法。 例 : G[S]: 句型 aabbaa 的语法树(推导 S→aAS | a 树) S A→SbA a A S A→SS S b A a A→ba a b a 叶子结点:树中没有子孙的结点。 从左到右读出推导树的叶子结点连接成的文 法符号串,为 G[S] 的句型。 50
  • 51. 推导过程中施用产生式的顺序 例 : G[S]: S S→aAS | a a A S A→SbA S b A a A→SS a b a A→ba S⇒aAS⇒aAa⇒aSbAa⇒aSbbaa⇒aabbaa S⇒aAS⇒aSbAS⇒aabAS⇒aabbaS⇒aabbaa S⇒aAS⇒aSbAS⇒aSbAa⇒aabAa⇒aabbaa 51
  • 52. 一棵语法树表示了一个句型的种种可 能的 ( 但未必是所有的 ) 不同推导过程 ,包括最左 ( 最右 ) 推导。 但是,一个句型是否只对应唯一的一 棵语法树呢?一个句型是否只有唯一的 一个最左 ( 最右 ) 推导呢 ? 52
  • 53. 例: G[E]: E E E→i E + E E * E E → E+E E * E i i E + E → E*E E E → (E) i i i 句型 i*i+i 的两个不同的最左推导: i 推导 1 : E ⇒ E+E 推导 2 : E ⇒ E*E ⇒ E*E+E ⇒ i*E ⇒ i*E+E ⇒ i*E+E ⇒ i*i+E ⇒ i*i+E ⇒ i*i+i ⇒i*i+i 53
  • 54. 文法的二义性 若一个文法存在某个句子对应两棵不 同的语法树,则称这个文法是二义的。 或者,若一个文法存在某个句子有两 个不同的最左(右)推导,则称这个文 法是二义的。 54
  • 55. 文法的二义性与语言的二义性 文法的二义性和语言的二义性是两个不 同的概念。因为可能有两个不同的文法 G 和 G ′ ,其中 G 是二义的,但是却有 L(G)=L(G′) 。这 两个文法所产生的语言是相同的。 如果产生上下文无关语言的每一个文法都 是二义的,则说此语言是先天二义的。对于一个 程序设计语言来说,常常希望它的文法是无二义 的,因为希望对它的每个语句的分析是唯一的。 55
  • 57. 通过对产生式施加不同的限制,将文法分为四 种类型: 0 型文法:对任一产生 1 型文法:对任一 式 α→β ,都有 产生式 α→β ,都有 α∈ (VN∪ VT)* 且至少含有 |β|≥|α| , 仅仅 S→ε 一个非终结符, 除外。 β∈ (VN∪ VT)* 3 型文法 ( 右线性文 2 型文法:对任一 法 ) :任一产生式 产生式 α→β ,都有 α→β 的形式都为 α∈ VN , A→aB 或 A→a ,其 β∈ (VN∪ VT)* 中 A∈ VN , B∈ VN , 57 a∈ VT
  • 58. 1 型文法举例 例: 1 型(上下文有关)文法 文法 G[S] : S→CD Ab→bA C→aCA Ba→aB C→bCB Bb→bB AD→aD C→ε BD→bD D→ε 58 Aa→bD
  • 59. 2 型文法举例 例: 2 型(上下文无关)文法 文法 G[S] : S→AB A→BS|0 B→SA|1 59
  • 60. 3 型文法举例 G[S] : S→0A|1B|0 A→0A|1B|0S B→1B|1|0 60
  • 61. 文法的类型 四种文法之间的逐级 “ 包含 ” 关系 0 型文法 1 型文法 2 型文法 3 型文 法 61
  • 63. 1. 本章出现的概念较多,应该重点理 解文法、推导、句型、句子及语言的 定义等概念。语法分析有关内容在后 面章节详细讨论。 2. 文法作为程序语言的语法的描述工具 , 它用规则只能陈述的是 : 语言的所 有句子以什么样的符号串出现。请记 住文法和语言的形式定义中的 “ 形式 ” 的含义 — 只涉及语言的语法不涉及语 言的语义。 63