编译原理(RE正则表达式和有限状态自动机)

RE正则表达式与有限状态自动机的等价

正则表达式:

  • RE<=>ε-NFA或者NFA之间的转换 :

    证明: a 一个字符,怎么去表示一个有限状态自动机?

    • 首先:针对于这个a,一定表示的是a作为一个边条件,然后从一个初始状态转换到另外的一个终止状态
    • 第二个可能,这个a是一个ε,那和上述依然一致
    • 第三个可能:a是一个空集,这里起到的作用是链接中转的可能.

递归-UNION:

E1+E2==>ε-NFA,假设这里有一个ε-NFA,E1+E2表示的是E1并上E2的值,从而将跳转到一个终止状态

但是E1对应了一个转换方式,E2也对应了一个转换方式,该怎么转换呢?

具体操作:

一个初始状态q0,然后利用ε转换到E1再去跳转,或者利用ε转换到E2

再去走到终止状态,但这个时候有两个终止状态了,所以最末尾还有一个真正的终止状态

有点类似于进行了一个或的运算

E1@E2=>ε-NFA,假设E1@E2,字符串的拼接需要去如何构建一个NFA呢?

具体操作:

两个NFA==>由于这里是字符串的拼接,所以在一个NFA状态转换之后,可以无条件转换为另一个新的NFA

这样去处理E1@E2即可

E*=>ε-NFA,这里的话,作为闭包{a,aa,aaaaa,…..}最终到终止状态,从正则表达式到ε的转换

任意给定一个正则表达式,完成其语言L1的判定程序,字符集是{0,1},运算包括E={0,1}|E+E|E@E|E*

010*1=>正则表达式定义,这个东西同时也是上下文无关文法(用于刻画表达式的)

上下文无关文法:

可以实现递归:0的n次方和1的n次方和(01)的n次方

上下文无关文法,主要用于定义


编译原理(RE正则表达式和有限状态自动机)
http://example.com/2024/11/10/compiler/RE与CFG/
作者
GENCO
发布于
2024年11月10日
许可协议