怎么动态构造DFA?
比如在vim中搜索用户输入的某一字符串,动态地构造DFA,然后在文本中进行匹配,请问有没有动态地构造DFA的例子程序,谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
比如在vim中搜索用户输入的某一字符串,动态地构造DFA,然后在文本中进行匹配,请问有没有动态地构造DFA的例子程序,谢谢
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
既然语言可以描述DFA,那么DFA就可以动态构造.
我来造个语言来描述DFA,解释这个语言就是动态构造DFA
复制代码
[ 本帖最后由 cjaizss 于 2008-6-9 18:20 编辑 ]
建立数据结构和算法:
(当前状态,触发)作为key
谢谢,
我没问清楚
根据正规表达式动态构建DFA
如用户在编辑文件时,突然想查找符串:"abc",则就应该构建这个字符串的DFA
lex用的是 Thompson构造法: 正规表达式 -> NFA -> DFA -> DFA状态最小化
现在好像有从 正规表达式 直接到 DFA 的转化
.......非扩展正则表达式等价于DFA
直接转换
或者说,regex本身就是DFA,不需要转化
不过我还是要说明一下Thompson construction,这只是因为regex看起来表示DFA不够直接
这是一个regex->NFA->DFA->最小DFA
的过程
其实可以直接搭出来.
regex有这几种结构假设A和B都是子regex)
AB
A|B
A*
regex都是用以上三种结构反复组合出来的
其实只有以上三种
我来解释一下,
A+其实就是
AA*
A
A{a,b}其实就是
AAAAA...A(A|AA|...|A...A)
A{a,}其实就是A.....AA*
.....
那么AB
表示
DFA到达可以表达A的状态之后再接收状态直到表达AB的状态
A|B就是状态存在两个分叉,经过A|B之后,是同一个状态
A*就是一个圈,最终回到原来状态
于是一个递归就可以regex->DFA
[ 本帖最后由 cjaizss 于 2008-6-10 19:51 编辑 ]
谢谢
很详细
我试着写个程序看看