10月7日
突然发现实现正则限定符{}匹配应该借助词法分析器,限定符由于和宏替换都是使用的
10月6日
思考贪婪匹配与非贪婪该如何使用Nfa图搜索来实现
10月5日
看到了Nfa转Dfa的算法,Nfa节点与Dfa节点的数据结构有一些不同。最终是使Nfa图转化为Dfa图,然后会有一个Dfa最小化。但是如果要实现捕获器功能的话就不能一股脑的直接转换为Dfa,首先如果需要进行Dfa转化的话只能在圆括号内部进行转化,当然也可以不转化,直接用Nfa图,其次的话,如果要实现捕获器那就还需要在Nfa图上多做一些手脚,我们可以对Nfa的节点进行一些特殊的处理,多加一个属性,这样就可以完美的实现捕获功能了。
10月3,4日
国庆休息了一段时间
10月3日
10月2日
看了别人写的源代码,因为我看的是一个java版本的所以就快速过了一遍java的语法,然后就直接开始跟着注释读源码了。
�java程序杂记
int[], boolean[] ��数组的定义
throws 函数的定义
throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)
public void function() throws Exception {
}
如何知道程序需要进行宏替换,如果在程序中发现了{}
这样的大括号的时候我们就知道需要对程序进行宏替换。
10月1日
学习有限状态自动机概念,并且手写了一个简单的有限状态自动机,对基本的Dfa和Nfa有了解,阅读任务笔记上的文献(龙书)
对于自动状态机, 一种状态是否为结束的判断
NFA与DFA的主要区别如下:
- 对于一个特定的符号输入,DFA只会跳转到一个状态;而NFA则可能跳转到多个状态。
- NFA中一个状态可以不经过任何符号就可以实现状态转换(即存在ε-转移)
上面两个区别就导致了NFA匹配符号串时经常要回溯,而DFA由于状态转移时不存在不确定性,效率比DFA高很多,但另一方面NFA比DFA更灵活。
- NFA中一个状态可以不经过任何符号就可以实现状态转换(即存在ε-转移)
网友评论