编译原理第二章

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

2014年6月12日12时3分
因此,所求文法为G[S]:
S→A | BD
D→CD | A A→1 | 3 | 5 | 7 | 9 B→2 | 4 | 6 | 8 | A C→0 | B
2014年6月12日12时3分
文法的等价性
若L(G1)=L(G2),则称文法G1和G2是等价的。 例如文法G1[A]: A→0R A→01 R→A1
2014年6月12日12时3分
例2.7写一个文法G, 使其语言为 不以0开头的奇数集。
不以0开头的奇数集数字的结构分为三种:一位数、两位 数和多位数。
A B A 一位数 两位数
B
C

C
A
多位数
2014年6月12日12时3分
其中,A代表可以出现在个位上的数字,可以是1,3,5, 7,9; B代表可以出现在开始位上的数字,除了0以外,其他数字 都可以;
2014年6月12日12时3分
(2)应用式的高级语言 应用式语言更注重程序所表示的功能,而不是一个语句接 一个语句地执行。程序的开发过程是从前面已有的函数出 发构造出更复杂的函数,对初始数据集进行操作直至最终 的函数可以用于从初始数据计算出最终的结果。这种语言 也称函数式语言。LISP和ML属于这种语言。 (3)基于规则的高级语言
与文法G2[S]: S→0S1|01 等价。
2014年6月12日12时3分
最左推导
所谓最左推导是指:任何一步α β都是对α中的最左非终 结符进行替换。
最右推导 所谓最右推导是指:任何一步α β都是对α中的最右非终 结符进行替换。
例如对于算术表达式文法G[E]句子(i*i+i)的最右推导
E (E) (E+E) (E+i) (E*E+i) (E*i+i) (i*i+i)
L(G)={α|S α & α ∈VT* } 例如对于文法G[E],字符串(i+i*i)是句子。因为 E (E) (E+E) (E+E*E) (i+E*E) (i+i*E) (i+i*i) 是从开始符E至(i+i*i)的一个推导。而E ,(E),(E+E), (E+E*E),(i+E*E) ,(i+i*E),(i+i*i)是句型。
基于规则的语言程序的执行过程是:检查一定的条件,当 它满足时,则执行适当的运作。最有代表性的基于规则语 言是PROLOG,它也称逻辑程序设计语言。
2014年6月12日12时3分
(4)面向对象的高级语言 面向对象语言的主要特征是支持封装性、继承性和多态性 等。把复杂的数据和用于这些数据的操作封装在一起,构 成对象;对简单对象进行扩充、继承简单对象的特性,从 而设计出复杂的对象。通过对象的构造可以使面向对象程 序获得强制式语言的有效性,通过作用于规定数据的函数 的构造可以获得应用式语言的灵活性和可靠性。
2014年6月12日12时3分
程序结构 一个高级语言程序通常由若干子程序段(过程、函数等) 构成、许多语言还引入了类、程序包等更高级的结构。 数据类型与操作 一个数据类型通常包括以下三要素: (1)用于区别这种类型的数据对象的属性;
(2)这种类型的数据对象可以具有的值;
(3)可以作用于这种类型的数据对象的操作。
•V自身的n次积记为:Vn=VV…V (n次重复),规定 V0={} 。 令 V*=V0 V1 V2 … , 称V*为V的闭包。 记V+=V V*,称V+为V的正则闭包。
2014年6月12日12时3分
上下文无关文法 文法是描述语言的的语法结构的形式规则 (即语法规则)。
所谓上下文无关文法是这样一种文法,它所定义的语法范 畴(语法单位)是完全独立于这种范畴可能出现的环境的。
2014年6月12日12时3分
如果一个文法存在某个句子对应两棵不同的语法树,则称 这个文法是二义的。也就是说一个文法存在某个句子对应 两个不同的最左(最右)推导,则称这个文法是二义的。例 如算术表达式文法G[E]是二义。因为存在句子i+i*i两个不 同的最左推导。 E => E+E =>i+E =>i+E*E =>i+i*E =>i+i*i
2014年6月12日12时3分
2.3 程序语言的语法描述
•设是一个有穷字母表,它的每个元素称为一个符号。 上的一个字符串是指中的符号所构成的一个有穷序列。 不包含任何符号的序列称为空字,记为。 •用*表示上的所有符号串的全体,空字也包括在内。
•*的子集U和V的(连接)积定义为 UV={ | U & V}。注意: UV≠VU 但 (UV)W=U(VW)
C代表可以出现在中间位上的数字。0-9所有数字都可以。
于是,
A→1 | 3 | 5 | 7 | 9
B→2 | 4 | 6 | 8 | A
C→0 | B
2014年6月12日12时3分
写文法时,先描述一位数结构,于是有产生式S →A。对 于两位数和多位数,都是以B开头和以A结尾,于是有产 生式S→BD。用非终结符D推导出两位数和多位数中除个 位数字以外的数字。对与多位数,由于中间位可以是许多 位,必须使用递归技术来描述其结构。于是有产生式: D→A D→CD
一个上下文无关文法G包括四个组成部分:一组终结符集, 一组非终结符集,一个开始符,以及一组产生式。 G=(VT, VN, S, P) VT:终结符集,即程序语言中的单词符号。 VN:非终结符集, 用来代表语法范畴。 VN∩VT= φ S:开始符号,一个特殊的非终结符,代表程序。
2014年6月12日12时3分
2014年6月12日12时3分
用E代表表达式,i代表函数、变量、常量,因此,文法定 义为G[E] E→E+E E→E*E
E→(E)
E→ i
可简写为:
E→E+E|E*E|(E)|i
2014年6月12日12时3分
推导的定义
直接推导“”
αAβ αγβ 仅当A→γ是文法G的产生式,且α、β∈(VT∪VN)* 例如对于文法G[E]的字符串(i+i*i)的推导: E (E) (E+E) (E+E*E) (i+E*E) (i+i*E) (i+i*i)
2014年6月12日12时3分
一步或多步推导“”
+
ຫໍສະໝຸດ Baidu
+
用“”表示:从α1出发,经过一步或多步,可推导出αn。 零步或多步推导“”
* 用“ ”表示:从α1出发,经过零步或多步,可推导出 * αn。 *
2014年6月12日12时3分
文法的句型、句子的定义
+ 假设G 是一个文法,S是它的开始符。如果S α,则称α 是一个句型。仅含终结符的句型是句子。文法G 所产生 句子的全体是一个语言,将它记为L(G)。
形式语言概述
通过对产生式施加不同的限制,Chomsky将文法分为四种 类型:
(1)0型文法:对任一产生式α→β,都有α∈(VN∪VT)+, β∈(VN∪VT)* (2)1型文法:对任一产生式α→β,都有|β|≥|α|, 仅 仅 S→ε除外
(2)2型文法:对任一产生式α→β,都有α∈VN , β∈(VN∪VT)*
P:一组产生式。一个产生式的形式是 A→α A是非终结符,称为产生式的左部。 α是由终结符和非终结符组成的符号串,称为产生式的右 部。 为了书写方便,有如下约定: 第一条产生式的左部是开始符号。用尖括号括起的是非终 结符,否则为终结符。或者大写字母表示非终结符,小 写字母表示终结符。用 α , β , γ 等代表由终结符和非 终结符组成的符号串。G可写成G[S],S是开始符号。
2014年6月12日12时3分
例如,字符串 0.5*X1+C 是一个表达式,其中常数0.5,标 识符X1和C,以及算符*和+称为语言的单词符号,而表达 式0.5*X1+C称为语言的一个语法单位,或语法范畴。 词法规则是指单词符号的形成规则。在现今多数程序语言 中,单词符号一般包括:关键字、标识符、运算符、界符 和常量等等。正规式和有限自动机理论是描述词法结构和 进行词法分析的有效工具。
2014年6月12日12时3分
E => E*E =>E+E*E =>i+E*E =>i+i*E =>i+i*i
对于算术表达式文法G[E],若规定运算符号的优先级,并 服从左结合性,可以构造无二义性文法G’[E]: E→E+T E→T T→T*F T→F F→(E) F→i
2014年6月12日12时3分
2014年6月12日12时3分
语法分析树与二义性
用一张图表示一个句型的推导,这种表示称为语法分析树, 或简称语法树。语法树有助于理解一个句子语法结构的层 次。语法树的根结由开始符号所标记。随着推导的展开, 当某个非终结符被它的某个候选式所替换时,这个非终结 符的相应结就产生出下一代新结,候选式中自左至右的每 个符号对应一个新结,并用这些符号标记其相应的新结。 每个新结和其你结间都有一条连线。在一棵语法树生长过 程中的任何时刻,所有那些没有后代的端末结自左至右排 列起来就是一个句型。
2014年6月12日12时3分
若干个左部相同的产生式, 例如 A→α1 A→α2 … A→αn
可合并为一个,简写为 A→α1|α2|… |αn
2014年6月12日12时3分
假设要定义一类含+、* 的算术表达式,表达式的递归定 义为 表达式+表达式是表达式 表达式*表达式是表达式 (表达式)是表达式 函数、变量、常量是表达式
2014年6月12日12时3分
语法规则是指语法单位的形成规则。下文无关文法用来描 述一个程序语言的语法规则。 语言的词法规则和语法 规则定义了程序的形式结构,是判断输入字符串是否构成 一个形式上正确(即合式)程序的依据。 对一个语言来说,不仅要给出它的词法、语法规则,而且 要定义它的单词符号和语法单位的意义。离开语义,语言 只不过是一堆符号的集合。所谓一个语言的语义是这样的 一组规则,使用它可以定义一个程序的意义。这些规则称 为语义规则。阐明语义要比阐明语法难的多,现在还没有 一种形式系统描述语义。
2014年6月12日12时3分
文法的二义性和语言的二义性是两个不同的概念。我们可 能有两个不同的文法G和G’,其中一个是二义的,而另一 个是无二义的,但是却有L(G)=L(G’),也就是说,这两个 文法所产生的语言是相同的。对于一个程序语言来说,常 常希望它的文法是无二义的。因为,我们希望对它的每个 语句的分析是唯一的。
2014年6月12日12时3分
2.2 高级语言的一般特性
高级语言的分类: (1)强制式的高级语言(也称过程式语言) 其特点是命令驱动,面向语句。一个强制式语言程序由一 系列的语名组成,每个语句的执行引起若干存储单元中的 值的改变。许多广为使用的语言,如FORTRAN、C、 PASCAL,ADA等等,属于这类语言。
编译原理
主讲教师:雷向东
2014年6月12日12时3分
第二章 高级语言及其语法描述
2.1程序语言的定义
一个程序语言是一个记号系统,包括语法和语义两个方面 定义。
任何语言程序都可看成是一定字符集(称字母表)上的一 字符串(有限序列)。所谓一个语言的语法是在指这样一 组规则,用它可以形成和产生一个合式的程序。这些规则 的一部分称为词法规则,另一部分称为语法规则。
人们已经证明,二义性问题是不可判定的。即,不存在一 个算法,它能在有限步骤内,确切地判定一个文法是否为 二义的。我们所能做的事是为无二义性寻找一组充分条件。
2014年6月12日12时3分
例如对于算术表达式文法G[E]关于(i*i+i)的语法树如下图 所示。 E
(
E E i * E i
E
+ E i
)
2014年6月12日12时3分
+
例2.1 考虑一个文法G1[S]: S→bA A→aA | a 因为 SbAba SbAbaAbaa … SbAbaA… ba…a 所以 L(G1)={ban|n≥1}
2014年6月12日12时3分
例2.2 考虑文法G2[S]: S→AB A→aA | a B→bB | b
L(G2)={ambn|m,n≥1} 例2.3 构造一个文法G3,使得 L(G3)={anbn|n≥1} 文法G3[S]: S→aSb | ab
2014年6月12日12时3分
例2.6 写一文法G6,使其语言为 L(G6)={ωcωR|ω ∈ (a|b)* & ωR 代表ω的逆} 文法G6[S]: S→aSa|bSb|c
相关文档
最新文档