您的位置:首页 > 其它

编译原理:第六节

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为止。在消去结点的过程中,逐步用正规式标记弧。



举个转化的例子,如下图所示:





正规式,正规文法与有限自动机的关系:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: