calcengine.h

来自「大学时用c++做的计算器」· C头文件 代码 · 共 62 行

H
62
字号
#ifndef CALCENGINE_H
#define CALCENGINE_H

#include <string>
#include <sstream>
#include <map>

#include "function.h"

class CalculatorEngine {
public:

    typedef Function::RDState RDState;
    typedef std::map<std::string, ValueType> MapType;
    typedef ValueType (Function::*UnaryFunction) (const ValueType&);
    typedef std::map<std::string, UnaryFunction> FunctionMapType;

    enum Token {
        NAME, NUMBER, PRINT=';', END,
        PLUS='+', MINUS='-', MUL='*', DIV='/', MOD='%',
        POW='^', ASSIGN='=', LP='(', RP=')',
    };


    CalculatorEngine();

    void setRDState(RDState s);
    void setExpression(const std::string& expr);
    ValueType calculate();
    
    void pushIdentifier(const std::string& name, const ValueType& value);
    
    static void buildFunctionTable();

private:
    void getToken();
    bool isFunction() const;
    void checkParenthesis();
    
    // parser methods
    ValueType expr(bool);
    ValueType term1(bool);
    ValueType term2(bool);
    ValueType prim(bool);
    
    ValueType unaryFunction();

private:
    Token __token;
    ValueType __number;
    std::string __string;
    MapType __table;
    
    Function __func;
    
    std::stringstream __inStream;
    
    static FunctionMapType __funcTable;
};

#endif  // CALCENGINE_H

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?