第二章 形式语言基础(1)

合集下载

第2章形式语言的基本知识

第2章形式语言的基本知识
例:Σ ={a,b} Σ *={ε ,a,b,aa,ab,ba,bb,aaa,aab,…} Σ +={a,b,aa,ab,ba,bb,aaa,aab,…}
• 7.符号串的 前缀:s为符号串,把s从尾部删去若干个 (包括0个)符号后所余下的部分称为s的前缀。
符号串abc的前缀是什么?
• 8.符号串的 后缀:s为符号串,把s从前部删去若干个 (包括0个)符号后所余下的部分称为s的后缀。
文法
<赋值语句>::=<标识符>“=”<表达式> <表达式>::=<表达式>“+”<表达式> | <表达式>“*”<表达式 > <表达式>::=“(”<表达式>“)” | <标识符> | <整数> | < 实数>
赋值语句
标识符
表达式
=
y
表达式 + 表达式
y =x+r*6
标识符 表达式
表达式
*
x 标识符
推导方法:从一个要识别的符号 开始推导,即用相应规则的 右部来替代规则的左部, 每次仅用一条规则去进行推导。
<句子> => <主语><谓语> => < 代词><谓语>
<句子>::=<主语><谓语> <主语>::=<代词>|<名词> <代词> ::=你|我|他 <名词>::= 王民|大学生|工人|英语 <谓语>::=<动词><直接宾语> <动词>::=是|学习 <直接宾语>::=<代词>|<名词>

第2章 形式语言基础

第2章 形式语言基础

研究符号串集合的表示方法、结构特性 以及运算规律。
第2章 形式语言基础
【内容提要】
2.1 形式语言是符号串集合 2.2 形式语言是由文法定义的 2.3 各种语法成分的定义 2.4 两类特性文法 2.5 文法变换方法 2.6 形式语言的分类
2.1 形式语言是符号串集合
【形式语言】是字母表上的符号按一定的 规则组成的所有符号串集合;其中的每个符号串 称为一个句子。
【例2.2】 L2={ abmc,bn | m>0,n≥0 } 字母表∑2= {a,b,c},
▪句型1: abmc 有句子:abc, abbc, abbbc,…
▪句型2: bn 有句子:, b, bb, bbb,…
【注】 (1) b0=(空符号串),b1=b,b2=bb,b3=bbb,…
(2) L1 为有限语言; L2 为无限语言。
5.固有头,固有尾
对于每个符号串s, s和ε两者都是符号串s的前缀, 后缀和子串。 符号串s的固有头,固有尾:
z=xy,x是z的头,y是z的尾,如果x非空则y是固 有尾,如果y非空则x是固有头。 例:在Z=abc Z的头:ε,a,ab,abc;其中固有头:ε,a,ab
Z的尾:ε,c,bc,abc;其中固有尾:ε,c,bc
则该集合的文法是:
(1) A->aBa B->b|Bb|bB
(2) Z->ABC A->a C->a B->bB|Bb|b
(3) A->aB B->ba|bB 练习2. Σ={a,b,c}上的字符串集
A={ancbn|n>=0} 该集合的文法是:
A->aAb|c
【例2.8】标识符的文法
【标识符】指字母开头的字母、数字序列。

第二章 形式语言概论

第二章 形式语言概论

语言的有穷表示有两个途经
生成方式(文法)
语言中的每个句子可以用严格定义的 规则来构造。
识别方式(自动机)
用一个过程,当输入的一任意串属于 语言时,该过程经有限次计算后就会停止 并回答“是”,若不属于,要么能停止并回 答“不是”,要么永远继续下去。
§2.2 文法及其分类
2.2.1 文法的定义
A*=∪Ai(i≥0)=A0∪A1∪A2∪A3∪…
例如:A={a,b}
则A*={ε,a,b,aa,ab,ba,bb, aaa,aab,aba,abb, …}
A*与A+的关系:
A*=A0∪A+
A+=AA*=A*A
由此得出结论:n语言是由句子组成的集 合,是由一组符号所构成的集合。换言之,字 母表S上的一个语言是S上的一些符号串的 集合。(字母表S上的每个语言是S*的一个 子集)。
的规则(或说是P中的一个产生式),和 是V*中的任意符号,若有符号串v,w,满 足v= ,w= ,则称v (应用规则 )直接产生w,或v直接推导出w,或 w是v的直接推导,或w直接归约到v,记 作v w。
例:
文法G[S]由如下规则组成: SA A AB|B B 0|1|2|…|9 其中S是文法 G [S] 的识别符号,该文法的 字母表为:V={S,A, B,0,1,…,9} 用这些规则和直接推导的定义可以推出所有 正整数,如可推导出24:
P15~P16例2.6~例2.10的文法类型。

2型文法可改写成3型文法。
例:将如下的上下文无关文法改写为等价的 正规文法。 G[S]:SabcA AbcB Ba 改写后G[S]: AbE SaM EcB MbN Ba NcA
文法分类的意义
文法分类对于实现程序设计语言的编译 程序具有重要意义。

第二章 形式语言概述

第二章 形式语言概述
– E + T * i,i,(E + T)都是G的句型。 – i + i * i,(i + i) * i,i都是G的句子。
2.3 文法的分类
0型文法(短语文法):
– 对产生式无限制。
1型文法(上下文相关文法): – 文法中任意的产生式→,则存在1,2 (VNVT)*; (VNVT)*;AVN;使得 = 1A2, = 12。
– A+ = A1 A2 … … – A+ = A A*
例:
– { 0, 1 }+为所有二进制串的集合。
2.1 基本概念
语言
– 一个语言为满足一定规律的串的集合。
语言的表示方法
– 集合表示:{ 1, aa, b }, { anbn| n > 0 }。 – 串集合的运算:a+{1, a}*。
推导:如果存在一个直接推导序列 = 0 = ,n > 0,则称为的一个推导,记为
''。1


n
''* 表示 '' 或者 =
例:10为S的推导,1100为S的推导,111S000为1S0的推 导。
2.2 文法与语言
最左推导:如果A ,VT*,AVN, , (VNVT)*,则称为A的一个最左推导。
– 符号的有穷序列称为符号串 – 不包含任何符号的串称为空串,记为
– 串α中符号的个数称为串α的长度,记为||
2.1 基本概念
串集合的乘积 – 令A、B为两个串集合,则A与B的乘积A·B = { | A, B },也可以缩写为AB – {} ·A = A ·{} = A, Ø·A = A ·Ø = Ø

第2章 形式语言的基础知识

第2章 形式语言的基础知识



字符串:字母表中符号的有穷序列。
字符串的长度:组成该字符串的符号的个 数。字符串的长度记作||。 例如字符串banana的长度为6。空字符串 记作,由0个符号组成,故||=0。



字符串的前缀:该字符串领头的若干符号。 字符串的后缀:该字符串结尾的若干符号。 例如,字符串abc具有前缀,a,ab和abc; 其后缀有,c,bc,abc。
S aSBE aaBEBE aabEBE aabBEE aabbEE aabbeE aabbee
(SaSBE) (SaBE) (aBab ) (EBBE ) (bBbb) (bEbe) (eEee)
S aSBEaaSBEBEaaaBEBEBE
第2章 形式语言的基础知识
内容提要


形式语言 文法和语言 分析树
2.1 形式语言

符号和字符串

符号:抽象实体,不加以形式定义。就像 几何学中的“点”。或者叫原子概念,凭 直觉去体会。 字母表:有限个符号的集合。字母表一般 用记。例如,英语的字母表 ={a,b,…,z,A,B,…,Z};汉语的字母表由汉 字构成。

例2.1 文法G=(VN, VT, P, S),其中VN={S}, VT={0,1},P={S0S1, S01}。

例2.2 文法G=(VN, VT, P, S),其中VN={<标识 符>,<字母>, <数字>},VT={a,,z,0,,9}, P={<标识符><字母> <标识符><标识符><字母> <标识符><标识符><数字> <字母>a||z <数字>0||9} S=<标识符>

编译原理 形式语言ppt课件

编译原理 形式语言ppt课件

表示 ,例如上例5中 步经 的过 推导记为
句子 thm e onk动 ey词 冠词 名词
规那么的简化表示
在前面的语法规那么定义中,有些语法范畴〔如<名 词>、<动词>〕有假设干条不同的规那么来定义它, 为简明起见,我们可以将它们写在同一个左部语法
范畴下,将其定义值用符号“|〞〔读作‘或’〕隔 开。如<名词>、 <动词>、 <冠词>的定义规那么可 简记为
正闭包 A+ = A1∪A2∪A3∪…称为Σ的正闭包 A + 表示上的除ε外的一切用穷长串的
集合
注: Σ* = Σ0∪Σ+ 注: Σ+ = ΣΣ* = Σ* Σ
字母表上的一个言语是上符合某种规那么的一 些符号串的集合 ,是*的一个子集
例如:Σ={a,b} Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…} 1. 集合{ab,aabb,aaabbb,…,anbn,…}或 {w|w∈Σ*且w=anbn,n≥1}为字母表上的一个言语 2. 集合{a,aa,aaa,…}或{w|w∈Σ*且w=an,n≥1}为 字母表上的一个言语
<句子> <主语短语><动词短语>
所得符号串<主语短语><动词短语>含有两个语法实体,可 对其中任一个〔例如对<动词短语>〕进展新的推导
<句子> <主语短语><动词短语>
<主语短语><动词><宾语短语>
反复上述过程,可得到一个推导序列〔见下页〕。
推导长度
推导 所用 所得的符号串
步 规那么

第2章形式语言概论

G=(VN,VT,P,S) 其中: VN={I, L, D} VT={a,b,c, … x,y,z,0,1,2,…
,P9=}{ I→L| I L| I D L→a | b | c | … | x | y | z D→0 | 1 | 2 | 3 | … | 9
S=I }
文法的形式定义
若将定义标识符的文法设计成: G=(VN,VT,P,S )
1. 字母表 元素的非空有穷集合。 例如,∑={ a, b, c } 根据字母表的定义,Σ是字母表,
它由a、b、c三个元素组成。
字母表和符号串
注意: (1) 字母表中至少包含一个元素。 (2) 字母表中的元素, 可以是字母、 数字或其他符号。 例如,∑' ={0, 1} 是一个字母表,由0、1两个元素 组成。
第2章 形式语言概论
形式语言理论是编译的重要理论 基础。本章主要介绍编译理论中用到 的有关形式语言理论的最基本概念, 重点介绍如何采用形式化的方法描述 程序设计语言。
第2章 形式语言概论
字母表和符号串 文法和语言的形式定义 文法和语言的分类 短语、直接短语和句柄 语法树和文法的二义性
概述
当n=1 L={aa, bb} L={a2n, b2n | n≥1}
当n=2 L={aaaa, bbbb} 当n=3 L={aaaaaa, bbbbbb}
…… L={aa, bb, aaaa, bbbb, aaaaaa, bbbbbb, … …} 即语言L是由偶数个a,偶数个b这样的 符号串组成的集合。
幂运算定义为:
A0={} A1=A A2=AA
… An= AA … A=AAn-1(n>0)
n
符号串的运算
例如,设A={ a, b },则 A0={} A1=A={ a, b } A2=AA={ aa, ab, ba, bb } A3=AAA=A2A

《编译原理》第2章 编译基础-形式语言与有穷自动机

整理课件
句型、推导
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
整理课件
例:奇偶测试器
0
0
1
q0
q1

1
自动机:M=(Q,∑ ,δ ,q0,Z)
Q={ q0, q1}
∑ ={0,1}
q0=q0 Z={q1}
整理课件
映射函数:
δ( q0,0)= q0 0
0
δ( q0,1)= q1
1
δ( q1,0)= q1 q0
q1
δ( q1,1)= q0
1
例:000110001
整理课件
第四节 正规文法与有穷自动机 1、正规文法 产生的语言的推导 例:文法 G=(VN,VT,P,S) 其中: VN={A,B,C}
VT={a,b,c} S=A P:A →aB A →aA
B →bB B →bC C →cC C →c
整理课件
A=>aA=>aaA=>…..=>aa…aB =>aa…abB=>aa…abb…bC =>aa…abb…bcC=> aa…abb…bccC => aa…abb…bcc…c
D→ε
Aa→bD
自然语言属于上下文有关文法
整理课件
文法的类型

第2章 形式语言概述


2.1.1字母表

定义2.1 字母表是元素的非空有穷集合,字母表中 的元素称为符号,因此字母表也称为符号表。高级 语言如C语言的字母表是由字母、数字、特殊符号 和一些专用符号构成。 例 ={a,b}, ={0,1}, ={0,1,2,3,4,5,6,7,8,9},


∑={a,b,c,…z,if,then,else,main,1,2,3,4,…,9,0,=, ==,>,<,;(,)}



P为产生式的规则:
{N→L|NL|ND
L→a|b| c
D→1|2|3 }
2.2.3文法的分类

自从乔姆斯基(Chomsky)于1956年建立形式语言的描述以来,把文法分成 四种类型,即0型、1型、2型和3型文法。


0型文法(短语文法)
设G=(VN,VT,P,S),如果它的每个产生式α→β是这样一种结构:α∈ (VN∪VT )+ ,且至少含有一个非终结符,而β∈(VN∪VT )*,则称G是一 个0型文法。0型文法又称短语文法,它的能力相当于一个图灵机。 例如,A→
1.0型语言与图灵机
图灵机是识别0型文法的识别装置。图灵机被
引进作为描述过程的数学模型,过程的直观 概念被看成是能机械实现的有穷指令的序列。 图灵机的基本模型如图2-1所示。它有一个有 限控制器、一个被分成若干单元的输入带和 一个一次读入一个单元的读头组成
a1
a2

2.符号串的长度 符号串x中所包含的符号的个数称为符号串x的长度, 记为|x| 。例如字母表{0,1},则|010110|=6。ε记为 空串,长度为0。


3.子字符串
定义2.3 设有非空符号串u=xvy,其中x、v、y是符号串, 且v≠ε,则称v为符号串u的子符号串。

第2章形式语言基础知识


2、符号串
定义:由字母表中的符号组成的任何有穷序列 例:0,00,10是字母表∑={0‚1}上的符号串 a,ab,aaca是V={a‚b,c}上的符号串 符号串是有序的。如: ab和ba不同 不含任何符号的符号串称为空串,用ε表示 注: {ε}并不等于空集合{ } 符号串长度: 符号串中含有符号的个数 如: |abc|=3 | ε|=0
2019/1/4
4
编译设计和开发技术
浙江科技学院计算机与电子工程学系
语义
定义单词和语法单位的意义 分类 静态语义:一系列限定规则,确定哪些合乎 语法的程序是合适的 动态语义:表明程序要做什么 作用: 检查类型匹配,变量作用域等
2019/1/4
5
编译设计和开发技术
浙江科技学院计算机与电子工程学系
2019/1/4
9
编译设计和开发技术
浙江科技学院计算机与电子工程学系
符号串集合的方幂: 设A是符号串的集 合,则称Ai为符号串集A的方幂,其中i 是非负整数 具体定义如下 A0 ={ε } A1 = A , A2 = A A AK = AA...…A (k个) 字母表A的n次方幂是字母表上所有长度 文n的串集
2.1 字母表和符号串
1、字母表
定义:元素的非空有穷集合 例:∑={0‚1} V={a‚b,c} 元素也称为符号,字母表也称符号集。 程序语言的字母表由字母数字和若干专用符 号组成。 是符号的非空有穷集合 一般用Σ 、V 表示
2019/1/4
6
编译设计和开发技术
浙江科技学院计算机与电子工程学系
字母表上符合某种规则构成的串
7、语言:字母表上句子的集合 a、b、c --- 符号 α、β、γ --- 符号串 A、B、C--- 符号串的集合(语言、句子)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

符号串集合运算示例(续):
【例2.5】 设 A={a,b}, A* = ? ∵ A* = A0∪A1∪A2∪…∪An∪… A0 ={}; A1 = A ={a,b}; A2 = A.A={a,b}.{a,b}={aa,ab,ba,bb}; A3 = A.A2={a,b}.{aa,ab,ba,bb} ={aaa,aab,aba,abb,baa,bab,bba,bbb}; … ∴ A* = { x | x=(a|b)n ,n≥0 }
2.3
2.3.1
主要语法成分的定义
文法的运算问题
直接推导 算符
文法有两种基本运算:推导,归约。 设 x, y∈(VN+VT)*, A->∈P
Ⅰ.直接推导( => ): xAy => xy 即:指用产生式的右部符号串替换左部非终结符。 + ): + β 加推导( => => (当且仅当=>1=>2=>…=>β) 即:指一步或一步以上的直接推导运算。 * ): * β 星推导( => α => (当且仅当=β或=>1=>2=>…β) 即:指零步或零步以上的直接推导运算。 加推导 算符
根据 语言定义式〖2.1〗, 合法的算术表达式是指:
+ i*(i+i-i) 成立吗? E =>
∵ E =>T =>T*F =>T*(E) =>T*(E-T)
=>T*(E+T-T)=>F*(E+T-T)=>i*(E+T-T) =>… =>i*(i+i-i) 观察推导过程,可

+ i*(i+i-i) E => 以看到:一旦产生式 选择错了,会导致失 败!

规则应用说明示例:
怎样利用上述文法规则表示语言L? 从开始符号出发,对符号串中的定义对象,采 用推导的方法(用其规则右部替换左部)产生新的 S -> aAc 符号串,如此进行,直到新符号串中不再出现定义 A -> bA | 的对象为止,则最终的符号串就是一个句子。 【句子产生过程】(=> 推导算符): 一个句子! 又一个句子!
【注】此文法定义了算术表达式的层次嵌套结构 : 项 因式 表达式 ( 表达式 )
+ * } L(G)={ x | Z x,x∈V => T ※ 算术表达式文法应用示例: 证明 i*(i+i-i) 是文法G(E)的一个句子 (即 合法的算术表达式):
G(E):
E->T |E+T |E-T T->F |T* F |T/F F->i |(E)
即:指零步或零步以上的直接归约运算。 这是相应的算符 ※ 实用中最常见的两种运算: + => 最左推导( ℓ )—每次推导皆最左非终结符优先; + )—每次归约皆最左可归约串优先。 最左归约( => . ℓ
文法运算示例:
【例2.8】 算数表达式文法:
G(E): E->T|E+T|E-T T->F|T*F|T/F F->i |( E )
【注】 ⑴ ⑵
2.1.1
符号串(集合)的运算
这是一种 泛指!
Ⅰ. 符号串的运算
设 , 为两个符号串,则:
1. 连接:• =

a•b=ab
2. 或: |= (或者 ) 3. 方幂: n = … = n-1 = n-1 n个 0 ※ = (空符号串)
第 2 章
形式语言基础
【内容提要】
2.1 2.2 2.3 2.4 2.5 2.6
形式语言是符号串集合 形式语言是由文法定义的 主要语法成分的定义 两类特性文法 文法变换方法 关于形式语言的分类问题
2.1
形式语言是符号串集合
【形式语言】是字母表上的符号,按一定的 规则组成的所有符号串集合。其中的每个符号串 称为句子。 【名词解释】:
2.3
2.3.2
主要语法成分的定义(续1)
三要素!
• 字母表 -- 元素(符号)的非空有限集合; • 符号串 -- 符号的有限序列; • 符号串集合 -- 有限个或者无限个符号串组成 的集合; • 规 则 -- 以某种形式表达的在一定范围内共 同遵守的章程和制度;这里,指符号串的组成 规则。

形式语言概念示例:
两个语言!
【例2.1】
L1={ 00,01,10,11 }; 字母表∑1= {0,1}, 句子有:00,01,10,11
推论:若 A为任一字母表,则 A* 就是该字母 表上的所有符号串(包括空串)的集合。
2.1.2
符号串集合的文法描述
长久以来,探讨符号串集合(即形式语言)的各种 描述方法,一直是语言计算机处理的重要任务之一。
【例2.5】
L ={ abnc | n≥0 }, 字母表:∑= {a,b,c}; 展开:L ={ac,abc,abbc,abbbc, … }

星推导 算符
Ⅱ.直接归约( => .
):
xy => . xAy
即:直接归约是直接推导的逆运算,用产生式的 左部非终结符替换右部符号串。 直接归约 + ): + β 加归约( => 算符 => . . (当且仅当 => . 1 => . 2 => . … => . β) 加归约 即:指一步或一步以上的直接归约运算。 算符 星归约( (当且仅当 星归约 * ): * β => => . . 算符 =β或 => . 1 => . 2 => . … => . β)
最左非终结符 给定一个符号串 i+i*i : 1. 最左推导(从开始符号出发)过程: E => E+T => T+T => F+T => i+T => i+T*F
=> i+F*F => i+i*F => i+i*i
+ => ∴ E ℓ i+i*i
最左可归约串
2. 最左归约(从符号串出发)过程: i+i*i => . F+i*i => . T+i*i => . E+i*i => . E+F*i => . E+T*i => E+T*F => . E+T => . E . + => ∴ i*i+i . ℓ E
① S => aAc => aεc = ac
② S => aAc => abAc => abεc = abc ③ S => aAc => abAc => abbAc => abbc …
+ abnc , n≥0 ∴ S =>
再一个句子!
2.2
形式语言是由文法定义的
什麽是文法 ?
2.2.1
【定义】 文法(grammar)是规则的有限集, 其中的上下文无关文法可定义为四元组: G(Z)=(VN, VT, Z, P) 每个元素
【例2.7】简单算术表达式文法


G(Z)= (VN, VT, Z, P)
VN ={ E(算术表达式),T(项),F(因式)}; VT ={ i(变量或常数),+,-,*,/,(,)}; Z = E ; P :
E -> T | E + T | E - T T -> F | T * F | T / F F -> i | ( E )
VN : VT : Z : P :
非终结符集(定义的对象集,如:语法成分等); 终结符集(字母表); 开始符号(研究范畴中,最大的定义对象); 规则集(又称产生式集); 每个规则
A -> 或者 A -> | 描述符号 : ->(定义为),|(或者是) 文法符号 : Z,A∈VN,,∈(VN+VT)*
【例2.2】
L2={ abmc,bn | m>0,n≥0 } 字母表∑2= {a,b,c}, 句型1: abmc , 有句子: abc, abbc, abbbc,… 句型2: bn ; 有句子: , b, bb, bbb,…
b0=(空符号串),b1=b,b2=bb,b3=bbb,… L1 为有限语言; L2 为无限语言。
A = ℓ A | d A |
※ 求解 I 值步骤:
正规方程式
① 先求解 A: A=(ℓ|d) A , A=(ℓ|d)2 A , … , A=(ℓ|d)n A
代入
A=
得: A= (ℓ|d)n , n≥0
代入 A= (ℓ|d)n , n≥0
② ∵ I=ℓ A | ℓ
得: I = ℓ (ℓ|d)n , n≥0 《标识符》:字母开头的字母、数字序列;

符号串集合运算示例:
【例2.3】 设 A={a,b},B={c,d} 则 A+B={a,b,c,d} 则 AB={xy|xA,yB}={ac,ad,bc,bd} 【例2.4】 设 A={a} 则 A* = A0∪A1∪A2∪…∪An∪… ={}+{a}+{aa}+{aaa}+… ={,a,aa,aaa,…} ={an|n≥0}
右图给出的表示 方法 --文法规则 ; 其中:
S -> aAc A -> bA |
⑴ S,A — 定义的对象(S 句子,最大的定义对象,又 称为开始符号; A为句型aAc的短语), ⑵ a,b,c -- 为字母表∑中的符号;ε- 空符号串。 ⑶ -> ,| -- 为描述符号( -> 定义为; | 或者是)
相关文档
最新文档