编译原理:第六节
2015-09-20 20:06
232 查看
编译原理:正规式与有限自动机
正规式与正规集
正规式的作用:表示语言正规集的作用:表示语言的集合
正规表达式是一种表示法,可以详细描述高级程序语言单词符号或者说每一个正规表达式r 表示一个语言 L(r).例如可以用正规表达式表示C++语言的标识符,而
C++语言的标识符(集合)可以看作一个语言,因此正规表达式
r 实质是用来表示一个语言
L(r).
具体来看什么是正规式和正规集呢?看个例子:
设字母表为 {0,1} ,则0,1, ε,Ø
都是该字母表上的正规式
0|1
,0*,1*等也是字母表上的正规式
相应的正规集为:{0,1}
{ε,0,00,000,0000,...} {ε,1,11,111,1111,...}
规定“*”, “连接” ,“|”运算左结合,
优先级由高到低
正规式 (a)|((b) *(c)) 等价于a|b *c
例:å={A,B,…,Z,a,b,…,z,0,1,…,9}
正规式1:A
|B... |Z|a
|b...|z
语言1:L( A) ∪ L( B)… ∪ L( Z) ∪ L( a) ∪ L( b)... ∪ L(z)
= {A,B,…,Z,a,b,…,z}
正规式2: 0
|1|.. .
|9
语言2:L(0) ∪ L(1) ∪... ∪ L(9)= { 0,1,…,9}
正则式与有限自动机
有限自动机接收的语言等价于正规文法产生的正则语言。而正规式或正则集定义的语言也为正则语言。所以,正规式与有限自动机在描述上等价。对于å上任一正规表达式r,一定能构造一个NFA m
,使得L( r )=L(m)。
从正规式到有限自动机
举个转化的例子,如下图所示:
从有限自动机到正规式
对于å上任一NFA m,能构造å上一个正规表达式r,使得L(r )=L(m)。
首先,在m的转换图上加进S,Z两个结点。从S用e弧连接到m的所有初态结点,从m的所有终结(接受)结点用e弧连接到Z,从而构成一个新的NFA
m’,L(m)=L(m’)。
反复使用下面的替换规则逐步消去NFA m’中的状态结点和弧,直至剩下S,Z为止。在消去结点的过程中,逐步用正规式标记弧。
举个转化的例子,如下图所示:
正规式,正规文法与有限自动机的关系:
相关文章推荐
- Android动画控件之Animation
- IP
- 配置虚拟主机(搭建网站)
- 设计模式-2-单例模式
- 一个测试工程师应具备那些素质和技能?
- linux运维实战练习-2015年9月13日-9月15日课程作业(练习)安排
- Java中 set,list,array(集合与数组)、Map相互转换
- LintCode 字符串查找
- 图像算法---基于局部均值的锐化算法研究
- windows 下修复Ubuntu启动项
- 我选择死亡
- 犀牛——第13章 13.3 JavaScript程序的执行
- 《三体》读后感
- 用win32api写的贪吃蛇
- 【Remoting-5代码实现】
- 最全前端面试问题及答案总结
- python字符串
- OC-集合2(字典,NSSet)
- 管道的应用(pipe)《深入分析Linux内核源码》 http://blog.csdn.net/wangpengqi/article/details/7996182
- 如何解决C/C++中stack overflow问题