分页: 2 / 2

讨论代码在第340行(文件StringSet.cpp中)

帖子发表于 : 2015-05-13 14:28
Normangen
前面说了,状态86相当于告诉状态机:找以字符w开头的单词……
现在又输入一个字符h,那就等于告诉状态机:找以wh开头的单词……
因为单词表中存在单词what,所以也会进入新状态,在这个状态下,状态机期待接收的是字符 a 。
进入的新状态的值是87。
GTalkabout 写道:Click to open by GTalkabout: 4d55d3c0-f939-11e4-ab2b-1aee658114e8
图片

讨论代码在第323行(文件StringSet.cpp中)

帖子发表于 : 2015-05-13 14:30
Normangen
在有限状态机中找当前状态下(87),输入字符 i 的entry
GTalkabout 写道:Click to open by GTalkabout: 9364179e-f939-11e4-8e66-1aee658114e8
图片

讨论代码在第340行(文件StringSet.cpp中)

帖子发表于 : 2015-05-13 14:33
Normangen
状态87下只有输入字符 a 才会进入新状态。因为单词表中以wh开头的只有what。
那么输入字符 i 会使当前状态重置为 0。
GTalkabout 写道:Click to open by GTalkabout: 044f4200-f93a-11e4-ba38-1aee658114e8
图片

讨论代码在第345行(文件StringSet.cpp中)

帖子发表于 : 2015-05-13 14:42
Normangen
跳过单词white剩余部分,因为已经没必要再找了。
GTalkabout 写道:Click to open by GTalkabout: 2d2c1d4f-f93b-11e4-b49c-b8ee658114e8
图片

用极客讨论器讨论代码

帖子发表于 : 2015-05-13 14:44
Normangen
上面找了两个单词,a和white,都以失败告终。接下来我们看一单词fox的查找过程。
GTalkabout 写道:Click to open by GTalkabout: 8bc66821-f93b-11e4-9ba0-b8ee658114e8

讨论代码在第340行(文件StringSet.cpp中)

帖子发表于 : 2015-05-13 15:17
Normangen
省略中间的若干步骤:
状态 0 下输入字符 f 进入状态 12
状态 12 下输入字符 o 进入状态 13……
GTalkabout 写道:Click to open by GTalkabout: 1aede921-f940-11e4-98bb-b8ee658114e8
图片

讨论代码在第323行(文件StringSet.cpp中)

帖子发表于 : 2015-05-13 15:18
Normangen
在有限状态机中找当前状态下(13),输入字符 x 的entry
GTalkabout 写道:Click to open by GTalkabout: 477ac98f-f940-11e4-b24f-b8ee658114e8
图片

讨论代码在第327行(文件StringSet.cpp中)

帖子发表于 : 2015-05-13 15:23
Normangen
找到的这个entry,它的状态值是14,但是此时它的状态值已经不重要了,因为它的另一个成员m_dwIndex不再是0,而是4。
GTalkabout 写道:Click to open by GTalkabout: 025df51e-f941-11e4-a8d4-b8ee658114e8
图片

讨论代码在第333行(文件StringSet.cpp中)

帖子发表于 : 2015-05-13 15:27
Normangen
这个4表示它是单词表中第四个单词,也就是fox。
它是 1 序而不是 0 序的,因为 0 表示没有找到单词。所以将它从entry中提取出来要减去一。
GTalkabout 写道:Click to open by GTalkabout: 91d14900-f941-11e4-831d-b8ee658114e8
图片

讨论代码在第337行(文件StringSet.cpp中)

帖子发表于 : 2015-05-13 16:01
Normangen
找到单词fox,退出循环。
GTalkabout 写道:Click to open by GTalkabout: 3638b32e-f946-11e4-8de9-b8ee658114e8
图片