编译原理第三章

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

推导

如果存在一直接推导序列: vα0α1α2....αn=u (n>0)
则称符号串u为符号串v的一个推导(或者说v是u的一个 归约),记为 v u。

若有v
u,且有v=u,则记作v
u。
例:对于上例中文法G[E]: E→E+T | T T→T*F | F F→(E) | i 设v=E,u=i+i*i,则有: v u。

直接推导


设α→β是文法G=(VN, VT,P,S)的产生式,γ,δ∈ (VN∪VT)*,若有符号串v,w满足v=γαδ,w=γβδ,则 称w是v的直接推导,或称v是w的直接归约。记 作vw。 现有文法G[E]:
E→E+T|T T→T*F|F F→(E)|i
设v=E+F*i,w=E+i*i,则有v w 或 E+F*i E+i*i
例:文法G[S]:
例:文法G[S]:
S→aT,T→bT|cT|b|c
S→aB|c, B→Ad, A→cS
3.5
上下文无关文法和语法树
上下文无关文法有足够的能力来描述现今程序设计语言的


一个2型文法G,如果其产生式全都是形如 A →a或 A →aB,其中:A、B ∈VN,a ∈VT*,则G为3型文法。 3型文法也称正则文法或正规文法或右线性文法。 它对应有穷自动机。
文法之间的关系

一个四类文法的定义是通过逐步增加限制条件进行的。 即: 3型文法2型文法1型文法0型文法。
1型文法

如果如果0型文法G的产生式α →β 满足
|β |>=|α |,仅当β = ε 时例外。则称此文法G是1 型文法。 1型文法也称上下文有关文法。

2型文法


一个1型文法G,如果满足α∈VN,则称为2型文法。 或者说2型文法的产生式形如A →β。 2型文法也称上下文无关文法。
3型文法
一个规则是一个二元组,通常写作α::= β 或 α→β; α称为规则的左部,β称为规则的右部,→ 或::=读作“定义为”,α∈ V+,β ∈V*, 这是一条关于α的规则(产生式)。

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

例:设A={ab,cd},B={ef,jh},则: AB={abef,abjh,cdef,cdjh} A{ε}=A,φA=Aφ =φ

符号串集合的幂


设 A 是符号串集合,则符号串 A 的幂运算为: A0={} A1=A A2=AA •••••• An=A n-1A =AA n-1) 例: 若 A = { ab, cd } ,则:
但是人们可以给出一些规则,用这些规则来 说明(或者定义)句子的组成结构。
例如,
有一组规则: < 句子 > :: = < 主语 > < 谓语 > < 主语 > :: = < 冠词 > < 形容词 > < 名词 > < 谓语 > :: = < 动词 > < 直接宾语 > < 直接宾语 > :: = < 冠词 > < 名词 > < 冠词 > :: = the < 冠词 > :: = a < 形容词 > :: = small < 动词 > :: = ate < 名词 > :: = cat < 名词 > :: = mouse 显然, 由这一组规则可以产生句子: The small cat / mouse ate a mouse / cat
其 L(G)={0n1n|n≥1}
例:
文法文法G[S]:
S → aSBE|aBE,EB → BE,aB → ab,bB → bb,bE → be,eE → ee 其 L(G)={ anbnen| n≥1 } 思考:a4b4e4怎么推导?
定义:若L(G1)=L(G2),则称文法G1和G2是等价的。 例:有文法G[A]:
A→0R|01,R→A1 和文法G[S]: S→0S1|01 则G[A]和G[S]等价,因为二者都有:
L(G)={0n1n|n≥1}
3.4 文法的类型
(Chomsky)于1956年建立形式语言 的描述,将文法按其所表示的语言的 表达能力,由高往低分为四类: 0型,1型,2型,3型文法
3型
2型
1型
0型

文无关文法作为程序设计语言语法的描述工具。
语法:程序的结构或形式 语义:语言所代表的含义 语用:语言的实际应用
例如,对于赋值语句
x : = x + y * z 的非形式
描述为:

语法:赋值语句=变量+:=+表达式 语义:先求右部,然后把结果给左部变量 语用:赋值语句可用来计算和保存表达式的值
A 0 = { }, A 1 = { ab, cd }, A 2 = { abab, abcd, cdab,
cdcd }, ••••••
符号串集合的正闭包

设符号串集合A,A的正闭包记为A+则:
符号串集合的闭包

设符号串集合A,A的闭包记为A*,则: 例: 设Σ ={0,1},则 : ={0,1,00,01,10,11,000,001……}。 ={ε ,0,1,00,01,10……}。 A+=AA*=A*A
L(G)={x|S
x,且x∈ VT *,} 。
例:文法G[S]:
S→MVD M→小王|小张 V→是|不是 D→大学生 则文法G[S]表示的语言可定义为: L(G)={小王是大学生,小王不是大学生,小张是 大学生,小张不是大学生} MVD,M是D,M是大学生等均是G[S]的句型。
例:G: S → 0S1, S → 01

注意:A*=A0∪A+ s A*或s ∈A+表示???
一般约定

小写字母 a, b, c, ••• , r 表示符号。 小写字母 s, t, u, ••• , z 表示符号串。 大写字母 A, B, C, ••• , Z 表示符号串集合。
3.3 文法和语言的形式定义
规则(重写规则、产生式、生成式)
0型文法

如果文法G的产生式α→β ,其中α∈ (VN∪VT)*,
且至少含有一非终结符号,β∈ (VN∪VT)*,则称 G为0型文法。 0型文法又称短语结构文法。 0型文法的能力相当于图灵机(Turing),也即 说,任何0型语言都是递归可枚举的。 反之,递归可枚举集必定是一个0型语言。





、 x、 xy 、x y z是符号串 xyz 的前缀(头), 、 x、 xy是符号串 xyz 的固有前缀(头) ; 、 z、yz、xyz是符号串 xyz 的后缀(尾) , 、
z、 yz是符号串 xyz 的固有后缀(尾) 。
符号串集合


字母表上若干个符号串组成的集合。 空集:不含任何元素的集合,记为 Ø。 注意: (1). Ø A = A Ø = Ø ; (2). Ø

其直接推导序列为: EE+TE+T*FE+F*FT+F*FF+F*FF +F*iF+i*ii+i*i S x,则称x是文法G[S]的句
设G[S]是一文法,如有
型。
若x是G[S]的句型,且x∈
VT *,则称x是G[S]的句子。
文法G[S]的语言是G[S]的一切句子构成的集合。即
第3章 文法和语言
教学目的
掌握文法基本概念、文法类型,掌握文法和 语言的形式定义,学会用语法树进行句型分析。
教学重点和难点
文法和语言的形式定义,句型分析。
课时分配
8学时
教学过程
3.1文法的直观概念
语法

所谓一个语言的语法是指一组规则,用它可以形成 和产生一个合适的程序。
目前广泛使用的是上下文无关文法,即用上下 程序设计语言的描述
符号串长度


设 x 是字母表上的符号串,符号串中包含符号 的个数称为符号串 x 的长度,用 x 表示。例: ||=0; | a x | = | x a | = | x | + 1 ( a ∈∑ )
符号串的连结


设 x 与 y 是字母表 ∑上的两个符号串,把 y 的 所有符号相继写在 x 的符号之后所得到的符号 串称为x 与 y 的连结,用 x y 表示。注意: |xy|=|x|+|y| x=x=x x y ≠ y x ( 一般情况 )

例:文法G=(VN,VT,P,S),其中VN = { S }, VT ={ 0, 1 },P={ S →0S1, S → 01 } ,开始符为S。
例:文法G=(VN , VT , P , S),其中VN ={S, B}, VT ={0,1},P={S→ 0B,B→ 1,B→ 1B},开 始符为S。
形式化方法:是指用一整套带有严格规定的符
号体系来描述问题的理论和方法。
形式语言:一种不考虑含义的符号语言。
程序设计语言的语义分成


静态语义:是一系列限定规则,并确定哪些合乎 语法的程序是合适的; 动态语义(运行语义、执行语义):表明程序要 做什么,要计算什么。
以自然语言为例,人们无法列出全部句子,
Σ={a,b,c,d,……z}。 a、b、c……都称为符号。 hello、stri、aezfg、main都是Σ上的符号串。 {hello、stri、aezfg}称为符号串集合。
例:
符号串和符号串集合的运算
符号串相等

设 x 、y 是字母表 上的两个符号串,若 x 与 y 的诸符号依次相等,则该两符号串相等,记为 x = y。
字母表中的元素。 符号的有穷序列。 注意: 表示空符号串,表示什么符号也不含的 符号串。
字母表(符号集Σ )

符号(字符)

符号串


符号串的前缀(头)、后缀(尾) 、固有头、固有尾 设 x、y、z 是字母表 上的符号串,则称 x 为 符号串 x y 的前缀(头),y 是符号 串 x y 的后 缀(尾);
<标识符> → <标识符><数字> <字母> → a|b|…|z <数字> → 0|1|…|9
<字母> → a|b|…|z
<数字> → 0|1|…|9 } S=<标识符>
通俗表示法:很多时候,不用将文法G的四元组
显式地表示出来,而只将产生式写出。 一般约定 第一条产生式的左部是识别符; 用尖括号括起来的是非终结符(或者用大写字 母表示); 不用尖括号括起来的是终结符(或者用小写字 母表示); 将G也写成G[S],其中S是识别符。
四类文法产生对应的四类语言。
判断下列文法类型
例:文法G[S]: S →aSAB, S→aAB (或S→aSAB|aAB), aA→ab, bA→bb, bB→bd,BA→AB, dB→dd 例:文法G[S]: S →aSAB,S→aAB(或S→aSAB|aAB) aA→x,bA→bb,bB→bd,BA→AB,dB→dd
例3.2 文法G=(VFra Baidu bibliotek,VT, P,S),其中
VN ={标识符,字母,数字},
通俗表示: 文法G[<标识符>]:
<标识符>→ <字母>
VT ={a,b,c,…x,y,z,0,1,…,9}
P={ <标识符>→ <字母> <标识符> → <标识符><字母> <标识符> → <标识符><数字>
<标识符> → <标识符><字母>
使用文法作为工具,不仅为了严格地定义句
子的结构,也是为了适当条数的规则把语言 的全部句子描述出来,可以说文法是以有穷 的集合刻画无穷的集合的一个工具。
有穷的(规则)集合;
无穷的(句子/程序)集合
3.2
语言

符号和符号串
可以看成在一个基本符号集上定义的,按一定 规则构成的一切基本符号串组成的集合。 是一个非空有穷集合。
符号串的逆


设 x 是字母表上的符号串,其逆为符号串 x 的 倒置,记为 。 若 x = abcd , 则 = dcba . = 设 x是符号串,x自身的连接称为符号串的方幂, 有:
符号串的方幂


例: x=ba,
= ε,
=ba,
=bababa
符号串集合的乘积

若A、B均为Σ上的符号串集合,则: AB={xy|x∈A,y∈ B }
相关文档
最新文档