Q1,字符集匹配类型的节点是否能够被合并?
例如[1-3]2 | [4-5]3,其中的range1-3和range4-5是否能够合并成一个节点,合并成range1-5? 不可以 ,这样会导致诸如34这种第一位满足条件1,第二位满足条件2的字符串达成完全匹配…因此字符集合匹配的节点需要分开写,除非两个节点可以接受的内容完全一致,否则,不可以合并;
但是可以将多个字符集合节点的可接受内容编排到一个数组中…方便快速查询….
Q1.1,如何进行表结构的编排..
当字符集节点不能被合并的时候,DFA表就不能够简单的使用一个长度为18的数组,用数组的第18个元素保存字符集节点;有两个思路,来确定一下….
- 将第十八个元素替换成一个链表,用于记录该行head node可以到达的各个字符集节点;这样是最稳妥的方法,就是实现起来很麻烦….
- 遇到字符集合匹配的节点,按照它的字符集合将该节点添加到1-17号元素对应的位置上…
分析一下:
第一种方法毫无疑问是没有问题的,就是相当于把现在的数据结构扩容了,代码的逻辑基本没有变化;
第二种方法,在给定初始节点,指定匹配方式为CCL(字符集)的情况下,是有可能匹配到多个节点的…这些节点又不能搓到一起…那么是否可以在检索到一个节点之后,将节点分散,添加到对应的位置上…例如节点C是[2-4],这个range会在匹配条件为2,3,4的时候生效,那就在条件2,条件3,条件4下面添加一个节点C….这样是可行的
