制作正则表达式NFA ^ [a-zA-Z0-9] {3,16} $

时间:2020-06-08 19:13:13

标签: regex grammar automata nfa

我正在尝试制作正则表达式^ [a-zA-Z0-9] {3,16} $的NFA。我了解到此正则表达式意味着该语言将只接受长度为3到16的字符串,其中可能包括a到z,A到Z或0到9。

我试图做到这一点,但是我面临的主要问题是如何使条件只有在字符串长度为3或16时才能进入最终状态,否则将其丢弃。任何帮助,将不胜感激。

这是我的尝试,您可以在状态5上看到(3,16),我认为这不是绘制NFA的有效方法。

1 个答案:

答案 0 :(得分:0)

有限机器状态没有任何辅助数据。它们只是一个状态,它们所能做的就是使用一组固定的过渡规则过渡到另一个状态。

您仍然可以数到一个已知的有限数;您只需为每个可能的值提供一个状态。但是您不能用任何通常意义上的“计数”。例如,您看不到两个子序列的长度是否相同。

因此,要接受固定长度的句子(最多16个),您将需要16个状态,不包括开始状态或输入不匹配时的“接收器”状态。 (通常不需要NFA完整,因此接收器状态是隐式的;它用于没有过渡的任何输入。)

这意味着您的NFA大致如下:

sequence of 16 states

碰巧的是,那里没有不确定性,所以它也是DFA。