第三章 文法和语言
编译原理第3章文法和语言

第3章文法和语言第1题文法G=({A,B,S},{a,b,c},P,S)其中P为:S→Ac|aBA→abB→bc写出L(G[S])的全部元素。
答案:L(G[S])={abc}第2题文法G[N]为:N→D|NDD→0|1|2|3|4|5|6|7|8|9G[N]的语言是什么?答案:G[N]的语言是V+。
V={0,1,2,3,4,5,6,7,8,9}N=>ND=>NDD....=>NDDDD...D=>D......D或者:允许0开头的非负整数?第3题为只包含数字、加号和减号的表达式,例如9-2+5,3-1,7等构造一个文法。
答案:G[S]:S->S+D|S-D|DD->0|1|2|3|4|5|6|7|8|9第4题已知文法G[Z]:Z→aZb|ab写出L(G[Z])的全部元素。
答案:Z=>aZb=>aaZbb=>aaa..Z...bbb=>aaa..ab...bbbL(G[Z])={anbn|n>=1}第5题写一文法,使其语言是偶正整数的集合。
要求:(1)允许0打头;(2)不允许0打头。
答案:(1)允许0开头的偶正整数集合的文法E→NT|DT→NT|DN→D|1|3|5|7|9D→0|2|4|6|8(2)不允许0开头的偶正整数集合的文法E→NT|DT→FT|GN→D|1|3|5|7|9D→2|4|6|8F→N|0G→D|0第6题已知文法G:<表达式>::=<项>|<表达式>+<项> <项>::=<因子>|<项>*<因子><因子>::=(<表达式>)|i试给出下述表达式的推导及语法树。
(5)i+(i+i)(6)i+i*i答案:(5)<表达式>=><表达式>+<项>=><表达式>+<因子>=><表达式>+(<表达式>)=><表达式>+(<表达式>+<项>)=><表达式>+(<表达式>+<因子>)=><表达式>+(<表达式>+i)=><表达式>+(<项>+i)=><表达式>+(<因子>+i)=><表达式>+(i+i)=><项>+(i+i)=><因子>+(i+i)=>i+(i+i)(6)<表达式>=><表达式>+<项>=><表达式>+<项>*<因子>=><表达式>+<项>*i=><表达式>+<因子>*i=><表达式>+i*i=><项>+i*i=><因子>+i*i=>i+i*i<表达式><表达式>+<项><因子><表达式><表达式>+<项><因子>i<项><因子>i<项><因子>i()<表达式><表达式>+<项><项>*<因子><因子>i<项><因子>ii第7题证明下述文法G[〈表达式〉]是二义的。
编译原理课后习题答案+清华大学出版社第二版

用以引用非局部(包围它的过程)变量时,寻找该变量的地址。 DL: 动态链,指向调用该过程前正在运行过程的数据段基地址,用以过程执行结束释放
数据空间时,恢复调用该过程前运行栈的状态。 RA: 返回地址,记录调用该过程时目标程序的断点,即调用过程指令的下一条指令的地
编译程序大致有哪几种开发技术?
答案:
(1)自编译:用某一高级语言书写其本身的编译程序。 (2)交叉编译:A 机器上的编译程序能产生 B 机器上的目标代码。 (3)自展:首先确定一个非常简单的核心语言 L0,用机器语言或汇编语言书写出它的编
译程序 T0,再把语言 L0 扩充到 L1,此时 L0⊂ L1 ,并用 L0 编写 L1 的编译程序 T1,再把语 言 L1 扩充为 L2,有 L1 ⊂ L2 ,并用 L1 编写 L2 的编译程序 T2,……,如此逐步扩展下 去, 好似滚雪球一样,直到我们所要求的编译程序。 (4)移植:将 A 机器上的某高级语言的编译程序搬到 B 机器上运行。
(main).
答案: 程序执行到赋值语句 b∶=10 时运行栈的布局示意图为:
1
《编译原理》课后习题答案第二章
第 3题 写出题 2 中当程序编译到 r 的过程体时的名字表 table 的内 容。
name
kind
level/val
adr
size
答案:
题 2 中当程序编译到 r 的过程体时的名字表 table 的内容为:
盛威网()专业的计算机学习网站
2
《编译原理》课后习题答案第一章
合实现方案,即先把源程序翻译成较容易解释执行的某种中间代码程序,然后集中解释执行 中间代码程序,最后得到运行结果。
编译原理 文法和语言

文法与语言的对应关系
文法描述语言的语 法
文法的主要作用是描述语言的 语法结构,即规定什么样的句 子是合法的。因此,文法与语 言之间存在一种对应关系,即 文法规则定义了语言的语法规 则。
语言反映文法的特 性
语言作为文法规则的体现,反 映了文法的一些特性。例如, 语言的简洁性、一致性、无歧 义性等特性都与文法的制定密 切相关。
编译原理与文Biblioteka 和语言的关系编译原理利用文法和语言的 概念来描述程序设计语言的 语法和语义,从而实现对程
序的正确翻译。
文法和语言提供了编译器设 计的理论基础,使得编译器 能够按照预定的规则对程序 进行词法分析、语法分析和
语义分析等处理。
编译原理的发展推动了文法 和语言理论的深入研究,同 时也促进了程序设计语言的 发展和进步。
程序设计语言和自然语言
程序设计语言是一种用于编写计算机程序的语言,具有严格的语法和语义 规则;自然语言是人类日常交流所使用的语言,具有灵活性和歧义性。
静态语言和动态语言
静态语言在编译时检查类型错误,如C、C等;动态语言在 运行时检查类型错误,如Python、JavaScript等。
语言的表示方法
01
语言的上下文相关性
语言中的句子往往具有上下文相关性,即句子的含义和合 法性可能依赖于其所在的上下文环境。这就要求文法在描 述语言时,需要考虑到这种上下文相关性。
语言的歧义性
有些语言存在歧义现象,即同一句子可能有多种不同的解 释。这就要求文法在描述语言时,需要具有足够的精确性 和明确性,以避免产生歧义。
产生式规则中左部是非终结符,右部是终 结符和非终结符的序列,且右部中至多有 一个非终结符。
文法的表示方法
巴科斯-诺尔范式(BNF)
第三章文法和语言

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)
G生成的每个串都在L(G)中 L(G)中的每个串确实能被G生成
30
已知语言描述,写出文法
26
例: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,+,*,(和)构成的算术表 达式
27
文法,语言的定义
由文法G生成的语言记为L(G),它是文法G
的一切句子的集合:
L(G)={x|S
*
推导的定义
直接推导“”
α→β是文法G的产生式,若有v,w满足: v=γαδ,w= γβδ, 其中γ∈V*,δ∈V* 则称v直接推导到w,记作 v w
或w直接归约到v
例:G: S→0S1, S→01
S 0S1 00S11 000S111 00001111 <程序><分程序>. <变量说明部分> < 语句>. ... VAR<标识符>;BEGIN READ(< 标识符>)END. VAR A;BEGIN READ(A) END.
9
对于每个符号串s, s和ε两者都是符号串s的 前缀,后缀和子串。
符号串s的真前缀,真后缀,真子串:任何非 空符号串 x,相应地,是s的前缀,后缀或子串, 并且 s x
符号串的运算
编译原理(清华)第三章文法和语言

例 文法G: S→0S1,S→01 有直接推导: 0S1 00S11 ( S→0S1 ) 00S11 000S111 ( S→0S1 ) 000S111 00001111 ( S→01 ) S 0S1 ( S→0S1 )
推导和归约 若存在v=w0 w1 ... wn=w ,(n>0) 则称v推导出w,或w归约到v,记为v=+>w 若有v =+>w,或v=w,则记作v=*>w
2. 符号串 – 定义:由字母表中的符号组成的任何有穷序列 – 例: 0,00,10是字母表∑={0‚1}上的符号串 a,ab,aaca是Α={a‚b,c}上的符号串 – 在符号串中,符号是有顺序的,顺序不同,代 表不同的符号串,如:ab和ba不同 – 不含任何符号的符号串称为空串,用ε表示 注意:{ε}并不等于空集合{ } – 符号串长度: 符号串中含有符号的个数 如: |abc|=3 | ε|=0
3.3 文法和语言的形式定义
1.文法的定义 2.文法的简化表示法 3.推导与归约 4.句型、句子、语言的定义 5.文法的等价
1.文法的定义
产生式(规则) 产生式是一个有序对(α,β),通常写作 α→β(或α::=β ) 文法定义: 文法G(Grammar)定义为四元组(VN,VT,P,S) VN (Nonternimal):非终结符集 VT (Terminal):终结符集 P (Production): 产生式(规则)集合 S: 开始符号或识别符号
第三章
文法和语言
学习目标: 掌握:自上而下与自下而上的分析方法 理解:文法的形式定义,推导,归约,句 型,句子,语言,上下文无关文法,规范 句型,语法树,短语,直接短语,句柄 了解:文法的类型,文法使用中的限制, 文法的二义性
编译原理文法和语言

<谓语>::=<动词><直接宾语>
<动词>::=是|学习
<直接宾语>::=<代词>|<名词>
§3.2 文法和语言的形式定义
一、文法的直观理解
3.由产生式推导句子 推导方法:从一个要识别的符号开始推导,
即用相应产生式的右部来替代产生式的左部, 每次仅用一条产生式去进行推导。
例:给定一组语法规则,考察一个句子: “我是大学生”的推导过程。
§3.2 文法和语言的形式定义
三、推导和归约
1.直接推导/直接归约
如α→β是文法G的产生式,γ和δ∈V*, 若有 v,w满足:v=γαδ,w= γβδ, 其中 则称v直接推导到 w,也称w直接归约到v,记作 v w
例2:文法G[S]: S→0S1, S→01 若v=S,w=0S1, 有直接推导S0S1
§3.2 文法和语言的形式定义
四 、句型、句子和语言
3. 语言
文法G生成的语言记为L(G),它是文法G 的一切句子的集合:
L(G)={x|S * x,且x ∈VT*}
例:G[S]: S→0S1, S→01 S 0S1 00S11 0n-1S1n-1 0n1n L(G)={0n1n|n≥1}
§3.2 文法和语言的形式定义
<谓语>
<代词> 我
<动词> 是
<直接宾语> <代词>
大学生
§3.2 文法和语言的形式定义
二、文法的形式定义
其中: ① 非终结符号:出现在
定义: 文法G[S]定义为一个四元产能组生推,式出的符左号部或或符右号部串,,且
VN :G[非S]终=(结V符N,号V集T,P,S)用分②来。终表结示 符语号言:的不语出法现成在
编译原理(第二版)第3章文法和语法
编译原理(第二版)第3章文法和语法编译原理(第二版)第3章文法和语法课件第3章文法和语言教学要求:本章是编译原理课程的理论基础,要求理解文法、语言、规范推导、规范归约和短语、简单短语、句柄的基本概念;掌握语言的求解方法、文法的二义性的判断方法及句型的分析方法。
教学重点:上下文无关文法,语言定义编译原理(第二版)第3章文法和语法课件一、语言语言是由句子组成的集合,是由一组记号所构成的集合。
汉语--所有符合汉语语法的句子的全体英语--所有符合英语语法的句子的全体程序设计语言--所有该语言的程序的全体编译原理(第二版)第3章文法和语法课件二、文法一种语言描述工具,用来定义句子的结构,用有限的规则把语言的全部句子描述出来,是以有穷的集合刻划无穷的集合的工具。
〈句子〉::=〈主语〉〈谓语〉〈主语〉::=〈代词〉|〈名词〉〈代词〉::= 你| 我| 他〈名词〉::= 王明| 大学生| 工人| 英语〈谓语〉::=〈动词〉〈直接宾语〉〈动词〉::= 是| 学习〈直接宾语〉::=〈代词〉|〈名词〉“我是大学生”是否是该语言的句子?编译原理(第二版)第3章文法和语法课件〈句子〉::=〈主语〉〈谓语〉〈主语〉::=〈代词〉|〈名词〉〈代词〉::= 你| 我| 他〈名词〉::= 王明| 大学生| 工人| 英语〈谓语〉::=〈动词〉〈直接宾语〉〈动词〉::= 是| 学习〈直接宾语〉::=〈代词〉|〈名词〉〈句子〉〈主语〉〈谓语〉〈代词〉〈谓语〉我〈谓语〉我〈动词〉〈直接宾语〉我是〈直接宾语〉我是〈名词〉我是大学生编译原理(第二版)第3章文法和语法课件三、符号和符号串任何一种语言可看成是某个符号集上定义的,按一定规则构成的一切基本符号串组成的集合。
字母表:元素的非空有穷集合。
(符号集) 符号:字母表中的元素。
例如:汉语的字母表中包括汉字、数字及标点符号等。
C语言的字母表是由字母、数字、若干专用符号及IF、FOR之类的保留字组成。
第三章 文法和语言
2019/11/13
文法和语言
8
符号和符号串
• 符号串的连接:设x和y是符号串,它们的连接 xy是把y的符号写在x的符号之后得到的符号串
– 如:x=ST,y=abu,xy=STabu
• 符号串的方幂:设x是符号串,把x自身连接n 次得到符号串z,即z=xx…xx,成为符号串x的 方幂,写作z=xn
一个非终结符,β∈(VN ∪ VT)* ; – VN,VT和P是非空有穷集。 – S称作识别符号或开始符号,它是一个非终结符,
至少要在一条产生式中作为左部出现。
– VN和VT不含公共的元素,即VN ∩ VT = φ – 用V表示VN ∪ VT ,称为文法G的字母表或字汇表
2019/11/13
文法和语言
语言或上下文有关语言 • 2型文法或上下文无关文法产生的语言称为2型
语言或上下文无关语言 • 3型文法或正则(正规)文法产生的语言称为3
型语言或正则(正规)语言
2019/11/13
文法和语言
31
3.5 上下文无关文法及其语法树
• 上下文无关文法有足够的能力描述程序设计语言 的语法结构
文法G=({E},{+,*,i,(,)},P,E)其中P为: {E→i , E→E+E , E→E*E , E→(E) }。 E表示算术表达式, i表示程序的“变量”, 该文法定义了由变量,+,*,(和)组成的算术表达式的 语法结构,即:
表示为|x|=m。如001110的长度为6 – 空符号串:不包含任何符号的符号串,用|ε |=0表
示
2019/11/13
文法和语言
7
符号和符号串
• 符号串的头尾,固有头和固有尾:如果 z=xy是一符号串,那么x是z的头,y是z 的尾。如果x是非空的,那么y是固有尾; 若y非空,x是固有头。
编译原理 文法和语言-PPT精品文档
3.2 符号和符号串
1、字母表
字母表是符号的非空有穷集合。任何程序语言都有 自己的字母表,例如: 1.计算机语言:由符号“0”和“1”组成的字 母表, ∑={0,1} 2. ASCII字符集; 3. Pascal字母表为: ∑={AZ, az, 09, +, -, *, /, <, =, >,:, ',', ; ,., , (, ), {, }, [, ]}
2
3.1 文法的直观概念
如何来描述一种语言? 如果语言是有穷的(只含有有穷多个句子),可以将句子逐 一列出来表示; 如果语言是无穷的,语言的有穷表示有两个途经:
• 生成方式(文法):语言中的每个句子可以用严格定义的规则 来构造。
• 识别方式(自动机):用一个过程,当输入的一任意串属于语 言时,该过程经有限次计算后就会停止并回答“是”,若 不属于,要么能停止并回答“不是”,要么永远继续下去。 参见课本句子组成的实例。
4
3.2 符号和符号串
2、符号串
一. 符号串的定义
(1)ε 是∑上的一个符号串。
(2)若x是∑上的符号串,而a是∑的元素,则xa是∑
上的符号串。
(3)y是∑上的符号串,当且仅当它由(1)和(2)导出。
由字母表中的符号所组成的的任何有穷序列被称之
为该字母表上的符号串,也称作"字"。
5
3.2 符号和符号串
二 术语
设s是符号串
前缀: 移走s的尾部的零个或多于零个符号 后缀: 删去s的头部的零个或多于零个符号 子串: 从s中删去一个前缀和一个后缀 子序列: 从s中删去零个或多于零个符号(这些符号不要求 是连续的) 逆转: 将s中的符号按相反次序写出而得到的符号串。 长度: 是该符号串中的符号的数目。例|aab|=3,|ε |=0。
编译原理教案
编译原理教案说明:一、参考书:1、陈意云、张昱:《编译原理》,高等教育出版社,2003年。
2、陈意云、张昱:《编译原理习题精选》,中国科技大学出版社,2003年。
3、吕映芝、张素琴、蒋维杜:《编译原理》,清华大学出版社,1998年第二版。
4、王生原、吕映芝、张素琴:《编译原理课程辅导》,清华大学出版社,2007年。
5、伍春香:《编译原理习题与解析》,清华大学出版社,2001年。
6、Andrew W.Appel:《现代编译原理—C语言描述》,人民邮电出版社,2005年。
7、Noam Nison等:《计算机系统要素》,电子工业出版社,2007年。
8、Randall Hyde:《编程卓越之道(第二卷)》,电子工业出版社,2007年。
二、教学目的:通过学习形式语言与自动机理论、词法分析、语法分析、语义分析、代码优化和生成等内容使学生掌握构造编译程序的基本原理和基本方法,并通过上机实习使学生进一步掌握开发应用程序的基本方法,为深入理解计算机系统、程序设计语言与开发大型应用程序打下良好的基础。
三、教学时数:课堂教学51学时,上机实验30学时。
四、授课内容:第一章编译程序概述第二章 PL/0编译程序的实现第三章文法和语言第四章词法分析第五章自顶向下语法分析方法第六章自底向上优先分析方法第七章 LR分析方法第八章语法制导翻译和中间代码生成第九章符号表第一○章目标程序运行时的存储组织第一一章代码优化第一二章代码生成第一章概述一、说明:1、教学目的与要求:了解编译程序的概念、结构以及工作流程。
2、主要内容:什么是编译程序、编译过程概述、编译程序的结构、编译阶段的组合、编译技术和软件工具以及实例分析。
3、教学重点:编译程序的结构以及每一阶段的任务。
4、教学难点:理解编译程序各模块的判错功能、编译方式和解释方式执行速度上的不同。
二、教学内容第一节编译程序1、机器语言:直接用计算机能够识别的二进制代码指令来编写程序的语言。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
举例:已知语言写文法 例1:L={anbn am bm |m,n ≥0}
G:S AB
A
aAb|ε
B
aBb|ε
文法的等价 若L(G1)=L(G2),则称文法G1和G2是等 价的。 如文法G1[A]:A→0R 与G2[S]:S→0S1等价 A→01 S→01 R→A1
第三章 文法和语言
本章内容 引言和预备知识 文法和语言的形式定义 文法的类型 上下文无关文法及其语法树 上下文无关文法的句型分析
例 文法G[S]: (1)S→aSBE (2)S→aBE (3)EB→BE (4)aB→ab (5)bB→bb (6)bE→be (7)eE→ee 判断aabbee是否是该文法的句子?并写出该文 法所表示的语言。
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 }
文法的类型举例 例:1型(上下文有关)文法 文法G[S]: (1)S→aSBE (2)S→aBE (3)EB→BE (4)aB→ab (5)bB→bb (6)bE→be (7)eE→ee
文法的类型举例
例:2型(上下文无关)文法
文法G[S]:S→AB A→BS|0 B→SA|1
文法的类型举例
例:3型文法
3.2
字母表和符号串
二、符号串的运算 4、符号串集合的乘积 定义 设A、B为两个符号串集合,其乘积为 AB={xy|x∈A,y∈B} 例如: 若A={ab,bc}, B={ac,cb} 则AB={abac,abcb,bcac,bccb}
3.2
字母表和符号串
二、符号串的运算 5、符号串集合的幂 定义 设A为符号串集合,则A的幂运算为: A0= {ε} A1=A A2=AA … An=An-1A(AAn-1)(n>0)
文法的写法:一般不用将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 |ε
习惯表示 用尖括号括起来的为非终结符,否则为终 结符 或:大写字母:非终结符 小写字母:终结符 S –> AB A –> Ax | y B –> z
3.4 文法的类型
通过对产生式施加不同的限制, Chomsky将文法分为四种类型: 0型文法(短语结构文法):对任一产生式 α→β,都有α∈(VN∪VT)+,且α至少包 含一个非终结符, β∈(VN∪VT)*
3.4 文法的类型
1型文法(上下文有关文法):对任一产生式
α→β,都有|β|≥|α|, 仅仅 S→ε除外。 在有些文献给的定义中,将上下文有关文法的 产生式的形式描述为α1Aα2→α1βα2,其中 α1、α2和β都在( VN∪VT )*中(即在V*中), β≠ε,A在VN中。 这种定义与前边的定义等价。但它更能体 现"上下文有关"这一术语,因为只有A出现在 α1和α2的上下文中,才允许用β取代A。
E (E) (E+E) (i+E) (i+i)
通常,用 1 n 表示:从1出发,经过 一步或若干步,可以推出n。
用 1 n 表示:从1出发,经过0步 或若干步,可以推出n。
所以 : 即
*
*
或
3.3
文法和语言形式定义
句型、句子、语言: 定义:假定G是一个文法,S 是它的开始符号。 * 若 S ,则称是一个句型。仅含终 结符号的句型是一个句子。文法G所产生的句 子的全体是一个语言,将它记为 L(G)。 * L(G ) { | S , VT*}
“我是大学生”。是否是汉语的一个句子? 〈句子〉∷=〈主语〉〈谓语〉 〈主语〉∷=〈代词〉|〈名词〉 〈代词〉∷=我|你|他|她 〈名词〉∷=王明|大学生|工人|英语 〈谓语〉∷=〈动词〉〈直接宾语〉 〈动词〉∷=是|学习 〈直接宾语〉∷=〈代词〉|〈名词〉
有了一组规则以后,按照如下方式用它 们导出句子: 如句子:“我是大学生”的全部动作过程是: 〈句子〉 〈主语〉〈谓语〉 〈代词〉〈谓语〉 我〈谓语〉 我〈动词〉〈直接宾语〉 我是〈直接宾语〉 我是〈名词〉 我是大学生
由此可见:“我是大学生”的构成符 合上述规则, 而“我大学生是”不符合上述规则, 我们说它不是句子。 这些规则成为我们判别句子结构合法 与否的依据,换句话说,这些规则看成 是一种元语言,用它描述汉语。这里仅 仅涉及汉语句子的结构描述。其中这种 描述元语言称为文法。
语言描述
语言是由句子组成的集合,是由一组符 号所构成的集合。 汉语--所有符合汉语语法的句子的全体 英语--所有符合英语语法的句子的全体 程序设计语言--所有该语言的程序的全体 每个句子构成的规律(语法) 研究语言 每个句子的含义(语义) 每个句子和使用者的关系(语用)
3.3
文法和语言形式定义
二、规则 定义 一个规则是一个二元组,通常写作: U::=x 或 U x 其中:U是规则的左部,它是一个符号, x是规则的右部,它是有穷符号串,“::=” 和“”表示为“定义为”或表示为“由… 组成”。规则又称为产生式。
3.3
文法和语言形式定义
形式上,一个上下文无关文法G是一个四元组 G=(VT,VN,S,P),
语法 -- 表示构成语言句子的各个记号之间 的组合规律 语义 -- 表示各个记号的特定含义。(各个 记号和记号所表示的对象之间的关系) 语用 --表示在各个记号所出现的行为中,它 们的来源、使用和影响。
如果不考虑语义和语用,即只从语法这 一侧面来看语言,这种意义下的语言称作形 式语言。形式语言抽象地定义为一个数学系 统。 “形式”是指这样的事实:语言的所有 规则只以什么符号串能出现的方式来陈述。 形式语言是程序设计语言语法分析研究的基 础。
3.2
字母表和符号串
二、符号串的运算 2、符号串的连接 设x,y是字母表上两个符号串,把y的所有符号 相继写在x的符号之后所得到的串称为x与y的连结, 用xy表示。 例如:若x=ab,y=abc,
则xy=ababc 而且|xy|=|x|+|y|
3.2
字母表和符号串
二、符号串的运算 3、符号串的方幂 设x是字母表上的符号串,则x的幂运算为: x 0= ε X1=x X2=xx … Xn=xn-1x(xxn-1)(n>0)
3.4 文法的类型
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
3.3
文法和语言形式定义
句型、句子、语言:
例:G: S→0S1, S→01 L(G)={0n1n|n≥1}
例: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,+,*,(和)构成的算术表 达式
三、上下文无关文法
其中,VT:终结符集合(非空)
VN:非终结符集合(非空),且VT VN= S:文法的开始符号,SVN P:产生式集合(有限),每个产生式形式为 P, PVN, (VT VN)* 开始符S至少必须在某个产生式的左部出现一次。
3.3
文法和语言形式定义三、来自下文无关文法 例 文法G=(VN,VT,P,S) VN = { S }, VT ={ 0, 1 } P={ S→0S1, S→01 } S为开始符号
为了定义文法所产生的语言,需引入推 导的概念。 直接推导:就是在推导中每次替换一个规则。 例:G: S→0S1, S→01 0S1 00S11 00S11 000S111 000S111 00001111 S 0S1
3.3
文法和语言形式定义
推导: 定义:对于文法G,如果存在一直接推导序列 v=u0 u1 un=w(n>0)则称v推导 + 出w。记作v w 例如:对文法G(E): E i | E+E | E*E | (E)
3.2
字母表和符号串
3、符号串 定义 由字母表中的符号组成的任何有穷序列。 例如: 设字母表={a}; 则a,aa,a…a;都是字母表{a}上 的字符串。 设字母表={a,b};则a,b,aa,ab,abb,baa,…都是{a, b}上的符号串。
3.2
字母表和符号串
4、空符号串 定义 不含任何符号的符号串,记为ε。 5、符号串的长度 定义 设x是字母表上的符号串,符号串中包含符号 的个数称为符号串x的长度,用|x|表示。
例如:|abc|=3
|ε|=0
3.2
字母表和符号串
6、符号串集合 定义 字母表上若干符号串组成的集合。 例如: 设有字母表={a,b,c},则有符号串集合: A={a,ab,bc ,abc}
3.2
字母表和符号串
二、符号串的运算 1、符号串的头尾、固有头和固有尾 如果z=xy一个符号串,那么x是z的头(前缀), y是z的尾(后缀),如果x是非空的, 那么y是固 有尾;同样如果y 是非空的, 那么x是固有头。 例如:z=abc 头: ε、a、ab、abc 尾: ε、c 、bc 、abc 固有头: ε、a、ab 固有尾: ε、c 、bc
3.2
字母表和符号串
二、符号串的运算 6、集合A的闭包与正闭包 定义 集合A的闭包表示为A*(又称为自反闭包或星 闭包),具体定义为 A*= A0∪A1∪A2∪A3∪… 正闭包表示为A+=A1∪A2∪A3∪… 还可以证明: A+=AA*= A*A