DFA到正则表达式

时间:2016-09-30 13:41:24

标签: regex dfa

我已经阅读了一些灵魂和教程,特别是在Stackoverflow上,但不能帮助自己处理特定问题。 首先,我有这个DFA: enter image description here

可以减少它:

enter image description here

所以我在(aa | ba | cc)c处有正则表达式但是错过了返回的d。使用http://hackingoff.com/compilers/regular-expression-to-nfa-dfa检查它远远看起来与我的起始DFA完全相同但没有d。我尝试了很多,但我不确定如何将d写入RE。

1 个答案:

答案 0 :(得分:0)

revo指出,你提出的序列并不完全正确。正确的顺序是(aa|ba|c)c

整个DFA的正则表达式版本(用编程语言编写)将是

/^(?:aa|ba|c)c(?:d(?:aa|ba|c)c)*$/

正式的正则表达式将是

(aa|ba|c)c(d(aa|ba|c)c)*

(?:aa|ba|cc)c是您已经找到的第一个序列(从q0q6的所有内容,没有d路径从q6回到{{ 1}})。

出现q0后,您基本上需要上述序列。包含d的序列的第二个实例可以重复多次,因此您使用d量词。