RegExp DEMO version --[4][regexp.h]核心数据类型(3)

/*输出StateTable,测试用*/void showStateTable(pStateTable pst) { pState tmp; pStateCollectionEle pscele; printf("debug: ################### there is the NFA table basic info: #######################\n"); printf("debug: StateCount = %d\n", pst->stateCount); printf("head->%x\tcur...
C语言 | 2007-06-03 06:44 | 阅读 2083 次 | 评论 0 条

RegExp DEMO version --[4][regexp.h]核心数据类型(2)

/*##############################################*//*####### *函数实现* ######################*//*##############################################*//*状态*/pState newState() { pState pS = NULL; pS = (pState)malloc(sizeof(State)); if (pS != NULL) { pS->destStateCollection =...
C语言 | 2007-06-03 06:43 | 阅读 2036 次 | 评论 0 条

RegExp DEMO version --[4][regexp.h]核心数据类型(1)

这里是[regexp.h]的全部代码,所有的数据结构和针对他们的操作函数都在这里了,总揽一下哈: 终结符类型 状态 新建,销毁,置目标状态,克隆 状态集合的元素(相当于一条弧线:输入元素和目标状态) 新建,销毁,克隆 状态集合 新建,销毁,克隆,追加一个状态元素 状态表格 新建,销毁,克隆,追加一个状态,用于调试的showStateTable() 状态机 新建,销毁 ...
C语言 | 2007-06-03 06:39 | 阅读 2523 次 | 评论 0 条

RegExp DEMO version -- [3]核心函数(7)dealState()

case REPEAT_RANGE_M_MORE: /*(A{m,})*/ pst_needed = repeatMachine_needed(g_repeat_m-1, pmnew); if (pst_needed != NULL) { g_st = joinStateTable(g_st, pst_needed); ...
C语言 | 2007-06-03 06:34 | 阅读 1976 次 | 评论 0 条

RegExp DEMO version -- [3]核心函数(6)dealState()

case END_REGEXP: while_notfinish = 0; /*一会儿退出循环*/ printf("debug: end scan the regexp:\n\t\"%s\"\n", g_strRegExp); /*做一次状态机结束操作*/ case OR_MACHINE_END: if (symboltype == OR_MACHINE_END) { ...
C语言 | 2007-06-03 06:33 | 阅读 1504 次 | 评论 0 条

RegExp DEMO version -- [3]核心函数(6)dealState()

case END_REGEXP: while_notfinish = 0; /*一会儿退出循环*/ printf("debug: end scan the regexp:\n\t\"%s\"\n", g_strRegExp); /*做一次状态机结束操作*/ case OR_MACHINE_END: if (symboltype == OR_MACHINE_END) { ...
C语言 | 2007-06-02 21:49 | 阅读 1737 次 | 评论 0 条

RegExp DEMO version -- [3]核心函数(5)dealState()

case DOT: for (OR_MACHINE_i=0; OR_MACHINE_i<(int)'\n'; OR_MACHINE_i++) { g_ele_ary[OR_MACHINE_i] = 1; } for (OR_MACHINE_i=(int)'\n' + 1; OR_MACHINE_i<=sizeo...
C语言 | 2007-06-02 21:45 | 阅读 1372 次 | 评论 0 条

RegExp DEMO version -- [3]核心函数(4)dealState()

case OR_MACHINE_BEGIN: /*开始一个或运算子状态机(字母表),左括号: '['*/ pmnew = newMachine(NULL, NULL, g_scan_pos, -1, '|', NULL); pmnew->state_start = newState(); /*状态机开始状态*/ ...
C语言 | 2007-06-02 21:43 | 阅读 1655 次 | 评论 0 条

RegExp DEMO version -- [3]核心函数(3)dealState()

case START_REGEXP: printf("debug: start scan the regexp:\n\t\"%s\"\n", g_strRegExp); /*做一次状态机开始操作*/ case AND_MACHINE_BEGIN: /*开始一个子状态机,左括号: '('*/ pmnew = newMachine(NULL, NULL, g_s...
C语言 | 2007-06-02 21:41 | 阅读 1649 次 | 评论 0 条

RegExp DEMO version -- [3]核心函数(2)dealState()

case BACKTRACE: /*将当前状态与子状态机的结束状态连接*/ setdestState(g_st->curState, (int)g_st->eleCount, g_mstk->topM->state_end); /*将当前状态回退到子状态机的头部,开始一个新的分支*/ g_st->curState = g_mstk->topM->state_start; break; ...
C语言 | 2007-06-02 21:36 | 阅读 1200 次 | 评论 0 条

RegExp DEMO version -- [3]核心函数(1)dealState()

这个函数是状态机的执行部分,他根据getSymbol()函数返回的一个词,来决定正则状态机的行为。下面我来对这其中的一些细节做一下解释:====================================== [1] 在这个DEMO版本中,输入被看作是字节流,像一个汉字会被解析成两个INPUT_ELE, 例如:"王"会被解析为 "\xCD\xF5"。[2] 我的一个比较重要的概念是“子状态机”,被“()”和“[]”包围的都是“子状态机”, 将括号以这种方式独立出来处理,可以很方便的进行各种运算(重复,或,连接)[3] 在[regexp.h]中定义的Machi...
C语言 | 2007-06-02 21:33 | 阅读 1252 次 | 评论 0 条

RegExp DEMO version -- [2]词法分析代码

[regexp.c]中主要函数声明和源代码下面是主要的函数声明:======================================SymbolType getSymbol(); /*词法分析函数,返回一个符号的类型和它的值*/int dealState(SymbolType symboltype); /*处理输入状态*/void repeat_needed(int m, int eleindex); /*{m,n}生成必选的m次循环状态表*/void repeat_optional(int n, int eleindex); /*{m,n}生成可选的n次循...
C语言 | 2007-06-02 21:06 | 阅读 1116 次 | 评论 0 条

RegExp DEMO version -- [1]正则表达式 TO NFA表格

最近想做一个正则表达式的解析工具,目前已经完成了正则表达式向NFA(不确定有穷自动机)表格的转换代码。源代码包在这里下载:====================================== 源代码zip包:regexp.zip======================================我再跟几个帖子把核心代码贴出来一部分:供各位赏玩 。。。readME文件如下:===================================作者:王旭华泰山学院E-MAIL:qfhuazi@163.comQQ: 471600163文件:regexp-win.ex...
C语言 | 2007-06-02 21:04 | 阅读 1337 次 | 评论 0 条