编译原理:第六节

来源:互联网 发布:mysql 别名 编辑:程序博客网 时间:2024/05/01 02:13

编译原理:正规式与有限自动机

正规式与正规集

正规式的作用:表示语言
正规集的作用:表示语言的集合

正规表达式是一种表示法,可以详细描述高级程序语言单词符号或者说每一个正规表达式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两个结点。从Se弧连接到m的所有初态结点,从m的所有终结(接受)结点用e弧连接到Z,从而构成一个新的NFA m’,L(m)=L(m’)

反复使用下面的替换规则逐步消去NFA m’中的状态结点和弧,直至剩下S,Z为止。在消去结点的过程中,逐步用正规式标记弧。



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



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




0 0
原创粉丝点击