物件導向版表示式(十)

2021-06-22 07:13:11 字數 1877 閱讀 5886

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...