提交 1dd89150 创建 作者: 风清扬's avatar 风清扬

modifymain_ccharset

上级 ff564ae2
......@@ -6,15 +6,15 @@
#include "OutputResult.h"
#include <stdlib.h>
NFAFragmentStack FragmentStack; // 栈。用于储存 NFA 片段
NFAStateStack StateStack; // 栈。用于储存 NFA 状态
NFAFragmentStack FragmentStack; // 栈。用于储存 NFA 片段
NFAStateStack StateStack; // 栈。用于储存 NFA 状态
const char VoidTrans = '$'; // 表示空转换
const char VoidTrans = '$'; // 表示空转换
char* regexp = "a(a|1)*"; // 1
// char* regexp = "(aa|b)*a(a|bb)*"; // 2
// char* regexp = "(a|b)*a(a|b)?"; // 3
char* regexp = "a(a|1)*"; // 例 1
// char* regexp = "(aa|b)*a(a|bb)*"; // 例 2
// char* regexp = "(a|b)*a(a|b)?"; // 例 3
char regexp_ci[256];
......@@ -25,7 +25,7 @@ int main(int argc, char **argv)
dfa->length = 0;
//
// 初始化栈
// 初始化栈
//
InitNFAFragmentStack(&FragmentStack);
......@@ -35,12 +35,12 @@ int main(int argc, char **argv)
#endif
//
// 调用 re2post 函数将正则表达式字符串转换成解析树的后序遍历序列
// 调用 re2post 函数将正则表达式字符串转换成解析树的后序遍历序列
//
post = re2post(regexp);
//
// 调用 post2dfa 函数将解析树的后序遍历序列转换为 DFA
// 调用 post2dfa 函数将解析树的后序遍历序列转换为 DFA
//
dfa = post2dfa(dfa, post);
......@@ -50,16 +50,16 @@ int main(int argc, char **argv)
}
/*
功能:
创建一个 DFA 状态的转换。
能:
创建一个 DFA 状态的转换。
参数:
TransformChar -- 转换符号。
NFAStateArray -- NFA 状态指针数组。
Count -- 数组元素个数。
参数:
TransformChar -- 转换符号。
NFAStateArray -- NFA 状态指针数组。
Count -- 数组元素个数。
返回值:
Transform 结构体指针。
回值:
Transform 结构体指针。
*/
Transform* CreateDFATransform(char TransformChar, NFAState** NFAStateArray, int Count)
{
......@@ -80,14 +80,14 @@ Transform* CreateDFATransform(char TransformChar, NFAState** NFAStateArray, int
}
/*
功能:
创建一个 DFA 状态。
能:
创建一个 DFA 状态。
参数:
pTransform -- DFA 状态转换指针。
参数:
pTransform -- DFA 状态转换指针。
返回值:
DFAState 结构体指针。
回值:
DFAState 结构体指针。
*/
DFAState* CreateDFAState(Transform* pTransform)
{
......@@ -106,102 +106,102 @@ DFAState* CreateDFAState(Transform* pTransform)
}
/*
功能:
判断一个转换中的 NFA 状态集合是否为某一个 DFA 状态中 NFA 状态集合的子集。
能:
判断一个转换中的 NFA 状态集合是否为某一个 DFA 状态中 NFA 状态集合的子集。
参数:
pDFA -- DFA 指针。
pTransform -- DFA 状态转换指针。
参数:
pDFA -- DFA 指针
pTransform -- DFA 状态转换指针。
返回值:
如果存在返回 DFA 状态下标,不存在返回 -1。
回值:
如果存在返回 DFA 状态下标,不存在返回 -1。
*/
int NFAStateIsSubset(DFA* pDFA, Transform* pTransform)
{
//
// TODO: 在此添加代码
// TODO: 在此添加代码
//
}
/*
功能:
判断某个 DFA 状态的转换链表中是否已经存在一个字符的转换。
能:
判断某个 DFA 状态的转换链表中是否已经存在一个字符的转换。
参数:
pDFAState -- DFAState 指针。
TransformChar -- 转换标识符。
参数:
pDFAState -- DFAState 指针
TransformChar -- 转换标识符。
返回值:
Transform 结构体指针。
回值:
Transform 结构体指针。
*/
Transform* IsTransformExist(DFAState* pDFAState, char TransformChar)
{
//
// TODO: 在此添加代码
// TODO: 在此添加代码
//
}
/*
功能:
将一个 NFA 集合合并到一个 DFA 转换中的 NFA 集合中。
注意,合并后的 NFA 集合中不应有重复的 NFA 状态。
参数:
NFAStateArray -- NFA 状态指针数组,即待加入的 NFA 集合。
Count -- 待加入的 NFA 集合中元素个数。
pTransform -- 转换指针。
能:
将一个 NFA 集合合并到一个 DFA 转换中的 NFA 集合中。
注意,合并后的 NFA 集合中不应有重复的 NFA 状态。
参数:
NFAStateArray -- NFA 状态指针数组,即待加入的 NFA 集合。
Count -- 待加入的 NFA 集合中元素个数。
pTransform -- 转换指针。
*/
void AddNFAStateArrayToTransform(NFAState** NFAStateArray, int Count, Transform* pTransform)
{
//
// TODO: 在此添加代码
// TODO: 在此添加代码
//
}
/*
功能:
使用二叉树的先序遍历算法求一个 NFA 状态的ε-闭包。
能:
使用二叉树的先序遍历算法求一个 NFA 状态的ε-闭包。
参数:
State -- NFA 状态指针。从此 NFA 状态开始求ε-闭包。
StateArray -- NFA 状态指针数组。用于返回ε-闭包。
Count -- 元素个数。 用于返回ε-闭包中 NFA 状态的个数。
参数:
State -- NFA 状态指针。从此 NFA 状态开始求ε-闭包。
StateArray -- NFA 状态指针数组。用于返回ε-闭包。
Count -- 元素个数。 用于返回ε-闭包中 NFA 状态的个数。
*/
void Closure(NFAState* State, NFAState** StateArray, int* Count)
{
InitNFAStateStack(&StateStack); // 调用 InitNFAStateStack 函数初始化栈
InitNFAStateStack(&StateStack); // 调用 InitNFAStateStack 函数初始化栈
//
// TODO: 在此添加代码
// TODO: 在此添加代码
//
}
/*
功能:
将解析树的后序遍历序列转换为 DFA。
能:
将解析树的后序遍历序列转换为 DFA。
参数:
pDFA -- DFA 指针。
postfix -- 正则表达式的解析树后序遍历序列。
参数:
pDFA -- DFA 指针
postfix -- 正则表达式的解析树后序遍历序列。
返回值:
DFA 指针。
回值:
DFA 指针
*/
NFAState* Start = NULL;
DFA* post2dfa(DFA* pDFA, char *postfix)
{
int i, j; // 游标
Transform* pTFCursor; // 转换指针
NFAState* NFAStateArray[MAX_STATE_NUM]; // NFA 状态指针数组。用于保存ε-闭包
int Count = 0; // ε-闭包中元素个数
int i, j; //
Transform* pTFCursor; // 转换指针
NFAState* NFAStateArray[MAX_STATE_NUM]; // NFA 状态指针数组。用于保存ε-闭包
int Count = 0; // ε-闭包中元素个数
//
// 调用 post2nfa 函数将解析树的后序遍历序列转换为 NFA 并返回开始状态
// 调用 post2nfa 函数将解析树的后序遍历序列转换为 NFA 并返回开始状态
//
Start = post2nfa(postfix);
//
// TODO: 在此添加代码
// TODO: 在此添加代码
//
return pDFA;
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论