我已经阅读了一些灵魂和教程,特别是在Stackoverflow上,但不能帮助自己处理特定问题。 首先,我有这个DFA:
可以减少它:
所以我在(aa | ba | cc)c处有正则表达式但是错过了返回的d。使用http://hackingoff.com/compilers/regular-expression-to-nfa-dfa检查它远远看起来与我的起始DFA完全相同但没有d。我尝试了很多,但我不确定如何将d写入RE。
答案 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
是您已经找到的第一个序列(从q0
到q6
的所有内容,没有d
路径从q6
回到{{ 1}})。
出现q0
后,您基本上需要上述序列了。包含d
的序列的第二个实例可以重复多次,因此您使用d
量词。