zoukankan      html  css  js  c++  java
  • C++桌面计算机

    #include<iostream>
    #include<string>
    #include<map>
    #include<cctype>
    using namespace std;
    enum Token_value{
        NAME,      NUMBER,      END,
        PLUS='+',  MINUS='-',   MUL='*',  DIV='/',
        PRINT=';', ASSIGN='=',  LP='(',   RP=')',
    };
    Token_value curr_tok=PRINT;
    double number_value;
    string string_value;
    map<string,double>table;
    int no_of_errors;
    double error(const string& s)
    {
        no_of_errors++;
        cerr<<"error:"<<s<<'
    ';
        return 1;
    }
    //==============================================================================
    Token_value get_token()
    {
        char ch=0;
        cin>>ch;
        switch(ch){
            case  0:
                return curr_tok=END;
            case';':
            case'*':
            case'/':
            case'+':
            case'-':
            case'(':
            case')':
            case'=':
                return curr_tok=Token_value(ch);
            case'0':case'1':case'2':case'3':case'4':case'5':
            case'6':case'7':case'8':case'9':case'.':
                cin.putback(ch);
                cin>>number_value;
                return curr_tok=NUMBER;
            default:
                if(isalpha(ch)){
                    cin.putback(ch);
                    cin>>string_value;
                    return curr_tok=NAME;
                }
                error("bad token");
                return curr_tok=PRINT;
        }
    }
    //==============================================================================
    double expr(bool);
    double prim(bool get)
    {
        if(get)get_token();
        switch(curr_tok){
            case NUMBER:
            { double v=number_value;
                get_token();
                return v;
            }
            case NAME:
            { double&v=table[string_value];
                if(get_token()==ASSIGN)v=expr(true);
                return v;
            }
            case MINUS:
                return -prim(true);
            case LP:
            { double e=expr(true);
                if(curr_tok!=RP)return error(")expected");
                get_token();
                return e;
            }
            default:
                return error("primary expected");
        }
    }
    //==============================================================================
    double term(bool get)
    {
        double left=prim(get);
        for(;;)
            switch(curr_tok){
                case MUL:
                    left*=prim(true);break;
                case DIV:
                    if(double d=prim(true)){
                        left/=d;break;
                    }
                    return error("divide by 0");
                default:
                    return left;
            }
    }
    //==============================================================================
    double expr(bool get)
    {
        double left=term(get);
        for(;;)
            switch(curr_tok){
                case PLUS:
                    left+=term(true);break;
                case MINUS:
                    left-=term(true);break;
                default:return left;
            }
    }
    //==============================================================================
    int main()
    {
        table["pi"]=3.1415926535897932385;
        table["e"]=2.7182818284590452354;
        while(cin){
            get_token();
            if(curr_tok==END)break;
            if(curr_tok==PRINT)continue;
            cout<<expr(false)<<'
    ';
        }
        return no_of_errors;
    }
  • 相关阅读:
    【刷题】LOJ 6009 「网络流 24 题」软件补丁
    lab 项目
    js内的时间戳指的是当前时间到1970年1月1日00:00:00 UTC对应的毫秒数,和 unix时间戳是对应的秒数,差了1000倍
    js 原生: 身份证脱敏、唯一随机字符串uuid、对于高 index 元素的隐藏与显示
    diy 滚动条 样式 ---- 核心代码
    PC_后台管理系统
    三端兼容项目
    阿里小程序
    到位App_jQuery_art-template
    一步一步 copy163: 网易严选 ---- vue-cli
  • 原文地址:https://www.cnblogs.com/little-white/p/3594396.html
Copyright © 2011-2022 走看看