标签: 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的有效方法。
答案 0 :(得分:0)
有限机器状态没有任何辅助数据。它们只是一个状态,它们所能做的就是使用一组固定的过渡规则过渡到另一个状态。
您仍然可以数到一个已知的有限数;您只需为每个可能的值提供一个状态。但是您不能用任何通常意义上的“计数”。例如,您看不到两个子序列的长度是否相同。
因此,要接受固定长度的句子(最多16个),您将需要16个状态,不包括开始状态或输入不匹配时的“接收器”状态。 (通常不需要NFA完整,因此接收器状态是隐式的;它用于没有过渡的任何输入。)
这意味着您的NFA大致如下:
碰巧的是,那里没有不确定性,所以它也是DFA。