[英]Build a Regular Expression and Finite Automata
我需要一些帮助,以帮助您理解以下内容如何制作正则表达式,以用于生成epsilon NFA。
字母为{0,1}
语言是:所有以101开头并以01010结尾的字符串的集合。
有效字符串为:
我更关心了解如何制作正则表达式。
您需要的正则表达式非常简单:
101010|101(0|1)*01010 (theoretical)
要么
^101010|101[01]*01010$ (used in most programming languages)
这意味着:
要么
下列非确定性自动机应该起作用:
要了解您要寻找的内容,请使用交集运算符(在下面和下方表示)很有帮助。 它不属于理性表达的核心集,但是保留了理性-换句话说,您可以使用它,并且总是找到一种在没有它的情况下表达相同语言的方法。
使用Vcsn ,我可以在文本模式下得到它:
In [1]: import vcsn
In [2]: vcsn.B.expression('(101[01]*)&([01]*01010)').derived_term().expression()
Out[2]: 101010+101(0+1)*01010
并以图形方式显示,显示了使用derived_term
计算的中间自动机(其中包括有关每个状态的“含义”的详细信息,因此,随后调用strip
以使内容更易于阅读):
我建议一种既包括基本情况又包括一般情况的模式。 您需要覆盖101010的基本情况,其中两个模式重叠(以“ 101”开头,以“ 01010”结尾,第一个模式的最后两位是第二个模式的前两位。然后,您可以涵盖由Oscar给出的一般情况下的“ 101”,任何0或1,“ 01010”。
因此完整的模式将是:
^(101010|(101[01]*01010))$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.