您的位置:首页 > 编程语言 > C语言/C++

20170226C++项目班08_修复bug/函数添加

2017-03-01 20:25 155 查看

修复bug:

1:当输入:1=5的时候应该抛出异常,表明其左值不可赋值,可以在AssignNode的构造函数里面加上判断,左值是否是一个变量,从而解决。
2:Parser里面所有的Node应该判断是否为空指针,否则可能会抛出空指针异常,这时候,测试用例就非常重要了!!
    注意:在些项目的时候,需要把测试用例做成多个版本,把他们记录好。在程序测试的时候也可以使用一个专门的类来做程序的测试,使用for循环遍历。
3:抛出异常的时候注意包装,可以把工程常用的几种异常定义出来,需要抛出异常的时候就可以直接抛出,避免直接生成对象以及出现魔数等。
4:表达式未完全解析的情况可以通过最后返回树后,判断扫描器的下一个状态是不是为结束,如果不是,就代表表达式未读取完,应该抛出异常。

函数添加:

1:添加FuncTable类,并传递进SymbolTable的对象,这个类会将一些函数名称添加进这个SymbolTable的对象。
2:调用对应的math库函数:使用结构体将函数名和函数指针连接起来,使用函数指针数组将所有的函数连接起来,从而是ian调用。
3:部分代码:
struct FunctionInfo
{
FuncPtr pFunc_;
char* pFuncName_;
};
FunctionInfo funcs[] =
{
log, "log", sin, "sin", cos, "cos", tan, "tan", abs, "abs"
};
FunctionTable::FunctionTable(SymbolTable &symbolTbl) :size_(sizeof(funcs) / sizeof(FunctionInfo))
{
pFuncs_ = new FuncPtr[size_];
for (size_t i = 0; i < size_; ++i)
{//我们希望添加的函数名的ID和我们的下标是一样的,只要保证第一次初始化就初始化这个就可以解决了。
pFuncs_[i] = funcs[i].pFunc_;
if (i != symbolTbl.AddSymbol(funcs[i].pFuncName_))
throw MyExcept("初始化失败!");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程 指针 结构