有限状态机与正则表达式的应用与转换
1. 有限状态机转换为正则表达式
1.1 转换算法
在将有限状态机转换为正则表达式时,会涉及一系列操作。首先会对节点和边进行处理,具体如下:
Mkk = label of edge (K, K)
M = MakMkk*Mkb
ELSE
M = MakMkb
IF edge (A, B) does exist
Mab = label of edge (A, B)
label of edge (A, B) = Mab ∪ M
ELSE
label of edge (A, B) = M
END LOOP
END LOOP
remove node K and connected edges
END LOOP
通过不断移除除初始和终止节点外的其他节点及其相连的边,最终剩下的单条边的标签就是转换后的正则表达式。之后,需要排除正则表达式中冗余的 ε 字符,并在可能的情况下进行简化。
1.2 示例
对于图 3.5 中的有限状态机,其转换为正则表达式的逐步过程如图 3.7 所示。若初始状态有入边,需按照规则添加新的初始状态。例如,得到的表达式 ε(ε(εaε ∪ εbε)) εc,在移除冗余的 ε 字符后,会变成常见的 (a ∪ b) c。
2. 搜索满足给定正则表达式的子串
2.1 问题提出
理论上,正则表达式用于描述形式语言,即一组字符串。它或对应的有限状态机只能回答“给定字符串是否是
超级会员免费看
订阅专栏 解锁全文
1282

被折叠的 条评论
为什么被折叠?



