怎么把regex“ x {m,n}”转换成NFA?

时间:2018-10-12 09:00:03

标签: regex parsing nfa

正则表达式x{m, n}从前一个m的{​​{1}}到n的重复项中进行匹配,尝试匹配尽可能多的内容。

我有一个幼稚的解决方案,但是节点和边的数量取决于xm,而当n大时,这是不可接受的。

那么,有什么有效的方法可以将正则表达式转换为 NFA

1 个答案:

答案 0 :(得分:1)

不幸的是,NFA不能很好地“计数”。从本质上讲,您将必须手动将正则表达式扩展为Thompsons的构造可以处理的东西。例如

m{2,5} -> mm(m(m(m)?)?)?

搜索功能SimplifyRepeat here以查看Google的实现。有关实际使用的正则表达式的更多信息,请参见this page