【发布时间】:2016-07-21 00:48:47
【问题描述】:
我正在尝试实现一个 fsm,它运行良好。我可以输入字符串,看看它们是否有效等等。
但是正则表达式(即 fsms)具有此功能,您可以在其中指定某个字符可能出现的次数,例如 a{2,4} 将接受“aa”和“aaa”,但不接受“aaaaa”和“一个”
我可以想象在边缘上有一个计数器来计算它们被击中的次数,并在计数器达到一定数量后使用它来拒绝任何字符,但你不能以这种方式实现最小值,因为它总是会阻塞第一个字符(除非最小值为 0)。
有人知道实现此功能的方法吗? 它还必须适用于非常大的数字,例如{1,99999999999}
【问题讨论】:
-
想解释一下有限状态机和正则表达式之间的关系并给我们看一些代码吗?
-
@andrea 正则表达式是有限状态机
-
哦,现在很清楚了...我很感激我可能不是该主题的专家,但如果您愿意以更清晰的方式解释问题,您可能会帮助其他人理解该主题并吸引得到更多人的关注和帮助。
-
aaa?a?不是等价的吗? -
对于有限的 {n,m},您可以通过“爆炸”FSM 来摆脱困境:只需将其堆叠到自身上即可。一次又一次。对于无限 FSM,您需要一个堆栈来记住猜测的状态。