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

来源:互联网 发布:资源管理系统源码 编辑:程序博客网 时间:2024/05/17 18:25

修复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("初始化失败!");}}



0 0
原创粉丝点击