91
第3第 第第第第第

第 3 章文法和语言

  • Upload
    brenna

  • View
    86

  • Download
    2

Embed Size (px)

DESCRIPTION

第 3 章文法和语言. 本章知识点 ( 内容 ). 引言和预备知识 文法和语言的形式定义 文法的类型 上下文无关文法及其语法树 上下文无关文法 的句型分析 有关文法实用中的一些说明. 文法的直观概念和语言概述. - PowerPoint PPT Presentation

Citation preview

Page 1: 第 3 章文法和语言

第 3章 文法和语言

Page 2: 第 3 章文法和语言

本章知识点 (内容 )

引言和预备知识文法和语言的形式定义文法的类型上下文无关文法及其语法树上下文无关文法的句型分析有关文法实用中的一些说明

Page 3: 第 3 章文法和语言

文法的直观概念和语言概述

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

Page 4: 第 3 章文法和语言

“我是大学生”。是否是汉语的一个句子 ?

〈句子〉∷ =〈主语〉〈谓语〉〈主语〉∷ =〈代词〉|〈名词〉〈代词〉∷ =我|你|他〈名词〉∷ =王明|大学生|工人|英语〈谓语〉∷ =〈动词〉〈直接宾语〉〈动词〉∷ =是|学习〈直接宾语〉∷ =〈代词〉|〈名词〉

Page 5: 第 3 章文法和语言

有了一组规则以后,按照如下方式用它们导出句子: 那么得到:〈主语〉〈谓语〉 〈代词〉〈谓语〉,

重复做下去, 如句子:“我是大学生”的全部动作过程是:〈句子〉 〈主语〉〈谓语〉 〈代词〉〈谓语〉 我〈谓语〉 我〈动词〉〈直接宾语〉 我是〈直接宾语〉 我是〈名词〉 我是大学生

Page 6: 第 3 章文法和语言

由此可见:“我是大学生”的构成符合上述规则,

而“我大学生是”不符合上述规则,我们说它不是句子。

这些规则成为我们判别句子结构合法与否的依据,换句话说,这些规则看成是一种元语言,用它描述汉语。这里仅仅涉及汉语句子的结构描述。其中这种描述元语言称为文法。

Page 7: 第 3 章文法和语言

语言概述

语言是由句子组成的集合,是由一组符号所构成的集合。

汉语 --所有符合汉语语法的句子的全体英语 --所有符合英语语法的句子的全体程序设计语言 --所有该语言的程序的全体 每个句子构成的规律研究语言 每个句子的含义 每个句子和使用者的关系

Page 8: 第 3 章文法和语言

研究程序设计语言 每个程序构成的规律 每个程序的含义 每个程序和使用者的关系语言研究的三个方面 语法 Syntax 语义 Semantics 语用 Pragmatics

Page 9: 第 3 章文法和语言

语法 -- 表示构成语言句子的各个记号之间的组合规律

语义 -- 表示各个记号的特定含义。(各个记号和记号所表示的对象之间的关系)

语用 -- 表示在各个记号所出现的行为中,它们的来源、使用和影响。

Page 10: 第 3 章文法和语言

如果不考虑语义和语用,即只从语法这一侧面来看语言,这种意义下的语言称作形式语言。形式语言抽象地定义为一个数学系统。“形式”是指这样的事实:语言的所有规则只以什麽符号串能出现的方式来陈述。形式语言是程序设计语言语法分析研究的基础。

Page 11: 第 3 章文法和语言

字母表:符号的非空有限集 例:={0,1}

2.1  字母表和符号串

符号:字母表中的元素 例: 0, 1符号串:由字母表中的符号组成的任何有穷序列 例: 0,1, 01, 10, 011 , ..空符号串:无任何符号的符号串,用 ε 表示 例:符号“ a”组成的字母表记作 {a}; a,aa,a…a; 都是字

母表 {a} 上的字符串。 符号“ a”和“ b”组成的字母表记作 {a, b}; a,b,a

a,ab,abb,baa,…都是 {a, b} 上的符号串。

C 语言的字母表 A = {a,b,…,0,1,…,9, +, - ,×,_/, ( , ), =… if, else,for...}

不对如 ={if,else,for,while}符号就是字符,对吗?

Page 12: 第 3 章文法和语言
Page 13: 第 3 章文法和语言
Page 14: 第 3 章文法和语言
Page 15: 第 3 章文法和语言

一些基本概念语言是由句子组成的集合,是由一组符号所构成的集合。换言

之 ,字母表上的一个语言是上的一些符号串的集合 ( 字母表上的每个语言是 * 的一个子集 )。

例如:字母表Σ={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} 为字母表上的一个

语言。

ε 是一个语言。

即 是一个语言。

Page 16: 第 3 章文法和语言

给出语言上的有关运算 设 L是(上的)一个语言 ,M是(上的)一个语言 , 语言 L和 M的并,交,差,补是一个语言。 语言 L和 M的并记为 LM.

如: L1 ={a,b,…y,z} M1 ={1,2…8,9 } L1M1={a,b,… y,z , 1,2…8,9 }

语言 L和 M的连接是一个语言,记为 LM LM={st |s∈L 且 t∈M} 如: L1M1 ={a1,b1,…y1,z1,a2,b2…a9…z9} 有 L ε= εL=L 。 L的 n次连接 Ln= LL...L

Page 17: 第 3 章文法和语言

语言上的运算 语言 L 的 闭包记为 L* 。 L*= L0 L1 L2 ... L0= ε , Ln= L Ln-1= Ln-1 L,n1 语言 L 的正 闭包记为 L+ ,

L+= L1 L2 L3 ... L+= LL*= L*L L*= L+ ε 如: L1 ={a,b,…y,z} M1 ={1,2…8,9 }

( L1M1 ) ={a,b,… y,z , 1,2…8,9 }( L1M1 ) *={ε,a,b,… y,z , 1,2…8,9 aa,1a,…xyz,6789st..} L1 ( L1M1 ) *={ 所有字母打头的字母和数字符号串 }

Page 18: 第 3 章文法和语言

PL/0 语言文法 EBNF 表示(见 P11 ):VAR A;BEGIN READ (A) END.

Page 19: 第 3 章文法和语言

文法和语言的形式定义

如何来描述一种语言?如果语言是有穷的(只含有有穷多个句子),可以将

句子逐一列出来表示如果语言是无穷的,找出语言的有穷表示。语言的有穷表示有两个途经:

生成方式 (文法):语言中的每个句子可以用严格定义的规则来构造。 识别方式(自动机):使用自动机的行为来描述语言,(以后再详细讲)

Page 20: 第 3 章文法和语言

文法的形式定义

Page 21: 第 3 章文法和语言

文法的形式定义

文法 G定义为四元组 (VN, VT, P, S )其中VN: 为非终结符号集;

VT: 为终结符号集;P: 为产生式 (也称规则 )的集合; S: 称作识别符号或开始符号 ;它是一个非终结符,

至少要在一条产生式中作为左部出现。其中 :VN和 VT不含公共的元素,即 VN ∩ VT = φ 用 V表示 VN ∪ VT ,称为文法 G的字母表或字汇表

Page 22: 第 3 章文法和语言

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

Page 23: 第 3 章文法和语言

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

< 标识符 >→< 标识符 ><字母 > < 标识符 >→< 标识符 ><数字 > <字母 >→a,…, <字母 >→z <数字 >→0,…, <数字 >→9 }S=< 标识符 >

Page 24: 第 3 章文法和语言

文法的写法 : 一般不用将 G 的四元组显式地表示出来 ,而只将产生式写出。

例 1 G : S→aAb A→ab A→aAb A→ε 例 2 G[S] : S→aAb A→ab A→aAb A→ε 例 3 G[S] : S→aAb A→ab |aAb |ε

Page 25: 第 3 章文法和语言

习惯表示 用尖括号括起来的为非终结符 , 否则为终

结符 或 : 大写字母:非终结符 小写字母:终结符S –> AB

A –> Ax | y

B –> z

Page 26: 第 3 章文法和语言

为了定义文法所产生的语言,需引入推导的概念:推导的定义直接推导“”α→β是文法 G的产生式,若有 v,w满足: v=γαδ,w= γβδ, 其中 γ∈V*,δ∈V*

则称 v直接推导到 w, 记作 v w 也称 w直接归约到 v例: G: S→0S1 , S→01 0S1 00S11 00S11 000S111 000S111 00001111 S 0S1

Page 27: 第 3 章文法和语言

< 程序 >< 分程序 >. < 分程序 >. < 变量说明部分 > < 语句 >.

Page 28: 第 3 章文法和语言
Page 29: 第 3 章文法和语言
Page 30: 第 3 章文法和语言

文法,语言的定义

由文法 G 生成的语言记为 L(G), 它是文法 G的一切句子的集合 : ,其中 S 为文法的开始符号,且

x ∈VT*}

例: G : S→0S1 , S→01L(G)={0n1n|n≥1}

xSxGL

|{)(

Page 31: 第 3 章文法和语言

例: G[E] : E→E+T|T T→T*F|F F→(E)|a

EE+T T+T F+T a+T a+T*F a+F*F a+a*F a+a*a

句子:用符号 a , + , * , ( 和 ) 构成的算术表达式

Page 32: 第 3 章文法和语言

例 文法 G[S] :( 1 ) S→aSBE( 2 ) S→aBE( 3 ) EB→BE( 4 ) aB→ab( 5 ) bB→bb( 6 ) bE→be( 7 ) eE→ee

判断 aabbee 是否是该文法的句子?并写出该文法所表示的语言。

Page 33: 第 3 章文法和语言

S a S BE (S→aSBE) a aBEBE (S→aBE) aabEBE ( aB→ab ) aabBEE ( EB→BE ) aabbEE ( bB→bb) aabbeE ( bE→be) aabbee ( eE→ee) L ( G ) ={ anbnen | n≥1 }

Page 34: 第 3 章文法和语言
Page 35: 第 3 章文法和语言

举例:已知语言写文法 例 1 : L = {anbn am bm |m,n ≥0} G : S AB A aAb|ε B aBb|ε

Page 36: 第 3 章文法和语言
Page 37: 第 3 章文法和语言

递归规则和递归文法 :递归的概念 递归的定义 :是定义某事务时 ,又用到该事务本身 .

递归规则 :是指在规则的左部和右部具有相同的非终结符的规则 .

如 : 形如 A Ay, 且 y<>ε则为左递归规则 形如 A xA, 且 x<>ε则为右递归规则 形如 A xAy 且 x,y<>ε,则为内递归规则

Page 38: 第 3 章文法和语言

若文法中至少包含有一条递归规则 ,则称此文法是直接递归的 .

若文法中有以下推导成立 :A Ay 或 A xA 或 A xAy (x,y<>ε) 则称文法为间接左递归或间接右递归或间接内递归 .

递归的作用 :可用有穷的文法描述无穷的语言 .

Page 39: 第 3 章文法和语言

文法的等价

若 L ( G1 ) =L ( G2 ),则称文法 G1 和 G2

是等价的。

如文法 G1[A] : A→0R 与 G2[S] : S→0S1等价

A→01 S→01 R→A1

Page 40: 第 3 章文法和语言

文法的类型通过对产生式施加不同的限制, Chomsky将文法分为四种类型:0型文法 (短语结构文法 ):对任一产生式 α→β,都有 α∈(VN∪VT)+,且 α至少包含一个非终结符, β∈(VN∪VT)*

1型文法 (上下文有关文法 ):对任一产生式 α→β,都有 |β|≥|α| , 仅仅 S→ε除外。

在有些文献给的定义中,将上下文有关文法的产生式的形 式描述为 α1Aα2→α1βα2,其中 α1、 α2和 β都在 ( VN∪VT )*中 (即在 V*中 ), β≠ε, A在 VN中。 这种定义与前边的定义等价。但它更能体现 "上下文有关 "这一术语,因为只有 A出现在 α1和 α2的上下文中,才允许用 β取代 A。  

Page 41: 第 3 章文法和语言

2型文法 (上下文无关文法 ):对任一产生式α→β,都有 α∈VN , β∈(VN∪VT)*

3型文法 (正规文法 ):( 1)右线性文法:任一产生式 α→β的形式都为 A→aB 或 A→a ,其中 A∈VN , B∈VN ,a∈VT

( 2)左线性文法:任一产生式 α→β的形式都为 A→Ba 或 A→a ,其中 A∈VN , B∈VN ,a∈VT

Page 42: 第 3 章文法和语言

文法的类型举例

例: 1型(上下文有关)文法文法 G[S]:

( 1) S→aSBE( 2) S→aBE( 3) EB→BE( 4) aB→ab( 5) bB→bb( 6) bE→be( 7) eE→ee

Page 43: 第 3 章文法和语言

文法的类型举例

例: 2 型(上下文无关)文法 文法 G[S] : S→AB

A→BS|0B→SA|1

Page 44: 第 3 章文法和语言

3 型文法

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

A→0A|1B|0S

B→1B|1|0

Page 45: 第 3 章文法和语言

右线性标识符文法G1[I] : I → lT

I → lT → lTT → dTT → lT → d

其中 l 表示字母, d 表示数字

左线性标识符文法:

G2[I]: I →Il

I →Id

I →l

Page 46: 第 3 章文法和语言

3 型文法(正规文法)的变换: 若 A→αB 或 A→α ,其中 A 、 B∈VN , α∈ VT

* , 如果 α = ab, 则有 A→αB 即 A→ abB 可以写成: A →aD D →bB A→α 即 A →ab 可以写成: A →aD D →b( D 为新增加的非终结符 )

Page 47: 第 3 章文法和语言

文法的类型

2 型文法

1 型文法0 型文法

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

3 型文法

Page 48: 第 3 章文法和语言

上下文无关文法及其语法树

Page 49: 第 3 章文法和语言

给定文法 G=(VN, VT, P, S),对于 G的任何句型都能构造与之关联的语法树 (推导树 ) 。这棵树满足下列 4个条件:① 每个结点都有一个标记,此标记是 V的 一个符号。② 根的标记是 S。③ 若一结点标记 A,至少有一个从它出发的分枝,则 A 肯定在 VN中④ 如果标记为 A,有 n个从它出发的分枝,并且这些分枝的结点的标记(从左到右)为B1, B2,…, Bn,那么 A→B1B2,…, Bn一定是 P中的一个产生式。

Page 50: 第 3 章文法和语言

例 : G[S]:

S→aAS

A→SbA

A→SS

S→a

A→ba

构造句型 aabbaa 的语法树(推导树)

S

a A S

S b A a

a b a

Page 51: 第 3 章文法和语言

写出 aabbaa 句型的推导过程 :

(1) SaASaAaaSbAaaSbbaaaabbaa( 最右推导 )

(2) SaASaSbASaabASaabbaSaabbaa( 最左推导 )

例 : G[S]:

S→aAS

A→SbA

A→SS

S→a

A→ba

Page 52: 第 3 章文法和语言

句型、推导G[E]: E→E+T|T T→T*F|F F→(E)|a判断 a+a*a 是否是合法的句子 ,采用最左推导和最右推导

EE+T T+T F+T a+T a+T*F a+F*F a+a*F a+a*a(最左推导)

EE+T E+T*F E+T*a E+F*a E+a*a T+a*a F+a*a a+a*a (最右推导)

Page 53: 第 3 章文法和语言

规范推导 规范句型

最左(最右)推导:在推导的任何一步αβ,其中 α、 β是句型,都是对 α中的最左(右)非终结符进行替换最右推导被称为规范推导。由规范推导所得的句型称为规范句型任何句子都有规范推导,但句型不一定有规范推导。

Page 54: 第 3 章文法和语言

例:设语言 L1= {n|n 是无符号整数 }且文法 G: N =>ND

N =>D D =>0|1|2|3|……|9对于该文法, 3D是句型,但不存在规范句型。而 33是存在规范句型。N= >ND=>DD=>3D ( 不是最右推导)N= >ND=>N3=>D3=>33 ( 是最右推导)

Page 55: 第 3 章文法和语言

G[E] : E→E+T|T T→T*F|F F→(E)|a

画出 a+a*a 句型的语法树

构造语法树

Page 56: 第 3 章文法和语言

EE+T T+T F+T a+T a+T*F a+F*F a+a*F a+a*a( 最左推导 )

EE+T E+T*F E+T*a E+F*a E+a*a T+a*a F+a*a a+a*a( 最右推导 )

E

E + T

T T * F

F F a

a a

构造语法树E→E+T|TT→T*F|FF→(E)|a

Page 57: 第 3 章文法和语言

一棵语法树表示了一个句型的可能的不同推导过程,包括最左 (最右 )推导。但是,一个句型是否只对应唯一的一棵语法树呢 ?一个句型是否只有唯一的一个最左 (最右 )推导呢 ?

Page 58: 第 3 章文法和语言

例: G[E]:E → iE → E+EE → E*EE → (E)

E

E + E

E * E i

i i

E

E * E

i E + E

i i

句型 i*i+i 的两个不同的最左推导:

推导 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

Page 59: 第 3 章文法和语言

二义文法

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

Page 60: 第 3 章文法和语言

对于一个程序设计语言来说,常常希望它的文法是无二义的,因为希望对它的每个语句的分析是唯一的。

二义文法改造为无二义文法G[E]: E → i G[E] : E → T|E+T

E → E+E T → F|T*F E → E*E F → ( E ) |i E → (E) 规定优先顺序和结合律

Page 61: 第 3 章文法和语言

句型的分析

句型分析就是识别一个符号串是否为某文法的句型,是某个推导的构造过程。

Page 62: 第 3 章文法和语言

分析算法可分为:自上而下分析法:从文法的开始符号出发,反复使用文法的产生式,寻找与输入符号串匹配的推导。

自下而上分析法:从输入符号串开始,逐步进行归约,直至归约到文法的开始符号。

Page 63: 第 3 章文法和语言

自上而下的语法分析

例:文法 G : S → cAd A → ab A → a识别输入串 w=cabd 是否为该文法的句子

S S S

c A d c A d

a b

推导过程: S cAd cAd cabd

Page 64: 第 3 章文法和语言

自下而上的语法分析

例:文法 G : S → cAd A → ab A → a识别输入串 w=cabd 是否该文法的句子

S

A A

c a b d c a b d c a b d

规约过程构造的推导: cAd cabd S cAd

Page 65: 第 3 章文法和语言

语法分析方法的分类 语法分析的关键是如何选择和使用文法的规则.(1) 关于选择方法的分类 ①非确定方法(试探法,探索法,穷举法,回溯法)

如  A→x1|x2| … |xn  有 n 个候选式,可以随机选择一个进行分析.若成功,则继续分析,否则(包括若干步后发现失败)放弃,另选一个再作分析,这称为回溯.②确定方法(直接法,不回溯法) : 根据文法的特点和当前输入串的情况,选择"最合适"的候选式.

Page 66: 第 3 章文法和语言

例文法 G: (1) S → cAd (2) A → ab (3) A → a识别输入串 w=cabd是否为该文法的句子自上而下的语法分析

若 S cAd 后选择 (3)扩展A, S cAd cad那将会如何?

w 的第二个符号可以与叶子结点 a得以匹配,但第三个符号却不能与下一叶子结点 d匹配 ,宣告分析失败。说明选择产生式不当,需重新选择。

S c A d a

非确定的分析举例

Page 67: 第 3 章文法和语言

采用自下而上的语法分析:(1)S → cAd (2) A → ab (3)A → a识别输入串 w=cabd 是否为该文法的句子

对串 cabd的分析中,如果不是选择 ab 用产生式 (2), 而是选择 a 用产生式 (3)将 a归约到了 A,那么最终就达不到归约到 S的结果 .

c a b d

Ac a b d

Page 68: 第 3 章文法和语言

句型分析的有关问题1 )在自上而下的分析方法中如何选择使用哪个产

生式进行推导?假定要被代换的最左非终结符号是 B ,且有 n条规则: B→A1|A2|…|An ,那么如何确定用哪个右部去替代 B ?

2 )在自下而上的分析方法中如何识别可归约的串?在分析程序工作的每一步,都是从当前串中选择一个子串,将它归约到某个非终结符号,该子串称为“可归约串”

Page 69: 第 3 章文法和语言

为什么在 cabd 中, ab 是“可归约串”,而 a 不是“可归约串”?如何知道这点,这是自下而上分析的关键问题。因此需要精确定义“可归约串”。

Page 70: 第 3 章文法和语言

刻画“可归约串”文法 G[S]句型的短语

S αAδ且 A β,则称 β是句型 αβδ相对于非终结符 A 的短语句型的直接短语若有 A β,则称 β是句型 αβδ相对于非终结

符 A 的直接短语句型的句柄一个句型的最左直接短语称为该句型的句柄

*

Page 71: 第 3 章文法和语言

例 : i*i+i 的短语、直接短语和句柄

E E + T T FT * F i3 短语: i1* i2+ i3 , i1* i2 ,F i2 i1 , i2 , i3 。

i1 直接短语: i1 , i2 , i3 。句柄: i1

G[E] : E→E+T|T T→T*F|F F→(E)|i句型: i*i+i

Page 72: 第 3 章文法和语言

化简文法文法实用中的一些说明

文法中不含有有害规则和多余规则有害规则:形如 U→U的产生式。会引起文法的二义

性多余规则:指文法中任何句子的推导都不会用到的规

则 1 )文法中某些非终结符不在任何规则的右部

出现,该非终结符称为不可到达。2 )文法中某些非终结符,由它不能推出终结符号

串,该非终结符称为不可终止。

Page 73: 第 3 章文法和语言

对于文法 G[S] ,为了保证任一非终结符 A在句子推导中出现,必须满足如下两个条件:

1. A必须在某句型中出现 即有 S αAβ,其中 α, β属于 V*

2. 必须能够从 A 推出终结符号串 t来 即 A t,其中 t∈VT*

*

*

Page 74: 第 3 章文法和语言

化简文法例: G[S] : 1) S→Be

2) B→Ce D 为不可到达 3) B→Af C为不可终止 4) A→Ae 5) A→e 6) C→Cf 7) D→f

产生式 2 ), 6 ), 7 )为多余规则应去掉。

Page 75: 第 3 章文法和语言

上下文无关文法中的 ε规则

上下文无关文法中某些规则可具有形式 A→ε ,称这种规则为 ε规则因为 ε规则会使得有关文法的一些讨论和证明变得复杂 , 有时会限制这种规则的出现两种定义的唯一差别是ε句子在不在语言中本书是允许有 ε规则,如果语言 L有一个有穷的描述,则 L1=L∪{ ε}也同样有一个有穷的描述,并且可以证明,若 L 是上下文有关语言、上下文无关语言或正规语言,则 L∪{ ε}和 L-{ ε}分别是上下文有关语言、上下文无关语言和正规语言。

Page 76: 第 3 章文法和语言

思考

本章目的为语言的语法描述寻求工具 , 以便:对源程序给出精确无二义的语法描述。(严谨、简洁、易读)根据语言文法的特点来进行语法分析

1. 什麽是文法 ,什麽是它的语言 ?2.语法分析方法的分类 ?

Page 77: 第 3 章文法和语言

[本章小结 ]

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

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

3. 本章内容是形式语言理论的一部分 .形式语言理论是对符号串集合的表示法、结构及其特性的研究。是程序设计语言语法分析研究的基础。

Page 78: 第 3 章文法和语言

1.已知文法 G[A] ,写出它定义的语言描述 如: G[A]: A → 0B|1C

B → 1|1A|0BB C → 0|0A|1CC

2. 给出语言描述,构造文法 .如:构造一文法 , 其定义的语言是由算符 +, *, (,) 和运算对象 a 构成的算术表达式的集合 .

答案 :G[A] 定义的语言由 0 、 1 符号串组成,串中 0 和 1 的个数相同 .

答案 1: G[E] E→E+T|T T→T*F|F F→(E)|a

答案 2: G[E] E→E+E|E*E|(E)|a

Page 79: 第 3 章文法和语言

PL/0 语言和类 pcode 的描述 在上一章中已介绍过,编译程序的功能是把一种高级程序设计语言的程序翻译成某种等价功能的低级语言的程序。 PL/0 语言的编译程序就是要把 PL/0 语言程序翻译成为一种称为类 pcode 的汇编语言程序。

Page 80: 第 3 章文法和语言

PL/0 编译程序的功能 PL/0 类 Pcode PL/0 编译程序

PL/0 类 Pcode

Pascal

源语言: PL/0

目标语言:类 Pcode

实现语言: Pascal

Page 81: 第 3 章文法和语言

若需要在某一机器上实现 PL/0 语言程序。那么需知道 PL/0 语言是什么样的语言?类pcode 语言又是什么样的结构?它们之间是如何映射的?只有在明确了这些问题之后,才能确定如何构造这个翻译程序。

Page 82: 第 3 章文法和语言

PL/0 语言示例 :例 1 :计算园的面积Const P=3; (* 常量说明 * )Var S , R; (* 变量说明 * )BEGIN READ( R ) ; WHILE R#0 DO BEGIN S:=R*R; Write (S) ; READ(R) ; END; END.

Page 83: 第 3 章文法和语言

类 pcode 代码指令的结构 目标指令有 8条:  ① LIT:将常量值取到运行栈顶。 a域为常数值。  ② LOD:将变量放到栈顶。 a域为变量在所说明层中的相对位置 ,l为调用层  与说明层的层差值。  ③ STO:将栈顶的内容送入某变量单元中。a,l 域的含意同 LOD指令。  ④ CAL :调用过程的指令。 a为被调用过程的目标程序入口地址, l为层差。  

Page 84: 第 3 章文法和语言

⑤ INT:为被调用的过程 (或主程序 )在运行 栈中开辟数据区。 a域为开辟的单元个数。⑥ JMP :无条件转移指令, a为转向地址。

⑦ JPC:条件转移指令,当栈顶的布尔值为非真时,转向 a域的地址,否则顺序执行。⑧ OPR:关系运算和算术运算指令。将栈顶和次栈顶的内容进行运算,结果存放在次栈顶,此外还可以是读写等特殊功能的 指令,具体操作由 a域值给出。(详见 解释执行程序)。

Page 85: 第 3 章文法和语言

2.1.1 PL/0 语言的语法描述图 用语法图描述语法规则的优点是直观、易读。在图 2.1 的语法图中用椭圆和圆圈中的英文字表示终结符,用长方形内的中文字表示非终结符。所谓终结符,是构成语言文法的单词,是语法成分的最小单位,而每个非终结符也是一个语法成分。

Page 86: 第 3 章文法和语言

程序语法描述图

Page 87: 第 3 章文法和语言

分程序语法描述图

                                                            

Page 88: 第 3 章文法和语言

语句语法描述图

                                                                

Page 89: 第 3 章文法和语言

表达式语法描述图

                                                                

Page 90: 第 3 章文法和语言

项语法描述图

                                                                

Page 91: 第 3 章文法和语言

因子语法描述图