functiontable實現
讓表示式計算器支援函式運算
對於乙個好的科學計算器,內建函式是必需的。計算器必須能計算平方根、對數、三角函式等等。因而我們要讓解析器識別這些函式,並呼叫適當的數學庫函式。
functiontable實現
functiontable.h:
#ifndef _function_table_h_
#define _function_table_h_
class symboltable;
typedef double (*ptrfun)(double);
class functiontable
ptrfun getfunction(unsigned int id) const
private:
ptrfun* pfuns_;
unsigned int size_;
};#endif // _function_table_h_
functiontable.cpp:
#include "functiontable.h"
#include "symboltable.h"
#include #include #include struct functionentry
;functionentry entrys =
;functiontable::functiontable(symboltable& tbl)
: size_(sizeof(entrys) / sizeof(entrys[0]))
void functiontable::init(symboltable& tbl)
private:
storage& getstorage()
ptrfun getfunction(unsigned int id) const
bool isfunction(unsigned int id) const
unsigned int addsymbol(const std::string& str);
unsigned int findsymbol(const std::string& str) const;
symboltable symtbl_;
functiontable funtbl_;
storage storage_;
};#endif // _calc_h_
calc.cpp
#include "calc.h"
unsigned int calc::findsymbol(const std::string& str) const
unsigned int calc::addsymbol(const std::string& str)
在node.h中要多增加乙個一元運算節點
class functionnode : public unarynode
double calc() const;
private:
ptrfun pfun_;
};
node.cpp
double functionnode::calc() const
在parser.cpp中對factor的更改:
if (scanner_.token() == token_lparenthesis) // function call
else
{status_ = status_error;
std::cout<<"unknown function "<<"\""<
物件導向版表示式 九
解決一些bug 一 按回車出bug 二 1 1 2 未完全解析就返回樹了 三 1 1 4 出錯 因為剛開始由exp term factor 解析出1後,然後識別出 運算子後,繼續解析 1 4 由於缺少右括號,這個expr 所返回的是null節點,那麼新增到sumnode的時候就會出錯!四 1 解決1...
正規表示式 物件導向程式設計
一.正規表示式 正規表示式 由一系列特殊字元拼接而成的表示式 規則,該表示式用於從乙個大字串中匹配出符合規則的子字串 1.常用匹配模式 w 匹配字母數字及下劃線 w 匹配非字母數字及下劃線 s 匹配任意空白字元等價於 t n r s 匹配任意非空字元 d 匹配任意數字,等價於 0 9 d 匹配任意非...
表示式,物件
表示式是可以計算的 片段,由運算元和運算子構成,運算子包括 等。運算元包括文字變數如 abc 變數如 i 123 類成員變數 函式 如 math.pi 等,也可以包含子表示式 如 2 10指的是2 的10次方 乘號不能省略,pow 2,3,3 表示2的3次方,第二個3表示3次根號開方,結果為2 py...