我正在尝试实施fsm,而且一切正常。我可以输入字符串,看看它们是否有效以及所有这些东西。
然而,正则表达式(fsms)具有此功能,您可以指定某个字符可能出现的次数,例如{2,4}会接受“aa”和“aaa”而不是“aaaaa”和“aaaaa”一个“
我可以想象在边缘上有一个计数器可以计算它们被击中的次数,并且在计数器达到一定数量后使用它来拒绝任何字符,但是你不能以这种方式实现最小值,因为它总会阻止第一个字符(除非最小值为0)。
有谁知道实现此功能的方法? 它也必须适用于像{1,99999999999}
这样的大数字答案 0 :(得分:0)
据我了解,这种约束不能在有限状态机中动态实现; FSM的某些部分必须进行静态扩展。在您的示例中,对于a{2,3}
,必须构建三个不同的单独FSM,一个接受aa
,第二个接受aaa
,第三个接受aaaa
;然后,必须通过一些空转换在最终的FSM中做出替代。这样做的原因是FSM本身不存储其当前状态达到的路径,这意味着无法检查模式a{i,j}
的paremeterized形式。