查找此语言的正则表达式:
L = {λ,ab,abac,abacab,abacabac,abacabacab,...}
好的,所以我一直在解决这个问题。到目前为止,我知道'ab'重复其自我(ab)。但我被'ac'难倒......它不能(ab)(ac)* ...... 任何指针都会受到赞赏。
我看了看我的书,没有可以告诉我如何解决这个问题的例子。
答案 0 :(得分:3)
让我们先简化一下。我们让B表示ab
,C表示ac
。然后你试图生成字符串
λ,B,BC,BCB,BCBC,BCBCB,...
在这种情况下,您可能希望将正则表达式拆分为两种情况:一种生成
λ,BC,BCBC,BCBCBC,BCBCBCBC,......
和生成
的人B,BCB,BCBCB,BCBCBCB,......
前者由正则表达式(BC)*
给出,后者由正则表达式(BC)*B
给出。如果将这些组合在一起,则会得到(BC)* | (BC)*B
,可以将其重写为(BC)*(B | λ)
。剩下要做的就是通过替换B
和C with
ab and
ac`来扩展它,这会产生正则表达式
(abac)*(ab | λ)
这个观察也应该让你为这种语言设计一个DFA或NFA,但我会把它留作练习。 : - )
希望这有帮助!