编译原理之后缀表达式生成与计算(2)

原创 2016年06月01日 21:36:51

编译原理值之缀表达式生成与计算(2)

上一篇编译原理值后缀表达式生成与计算只提供了生成后缀表达式的方法,这篇文章提供如何计算后缀表达式。

先给 Parser 这个类一个 code 字段,用来保存后缀表达式:

class Parser {
public:
    void expr(LexerStream* lexers)
    {
    }

    void term(LexerStream* lexers)
    {
    }

    void factor(LexerStream* lexers)
    {
    }
    vector<string> code;
};

然后在每个解析函数中合适的地方压入值。具体代码前往 LearnCompilers/HLL/calculator001 查看。

class Calculator {
public:
    string result() {

        string current;

        do {
            current = code.front();
            code.erase(code.begin());

            if(!isOperator(current)) {
                calc.push(current);
            } else {

                string arg0 = calc.top();
                calc.pop();
                string arg1 = calc.top();
                calc.pop();

                calc.push(calcula(current, arg0, arg1));
            }
        } while(!code.empty());

        return calc.top();
    }

    bool isOperator(const string& s) ;
    string calcula(const string& operation, const string& arg0, const string& arg1);
    string add(const string& arg0, const string& arg1)
    string sub(const string& arg0, const string& arg1);
    string mul(const string& arg0, const string& arg1);
    string div(const string& arg0, const string& arg1);

    vector<string> code;
    stack<string> calc;
}

具体看 result 函数。先取出后缀表达式中的 token,如果是操作符,就从运算结果栈中取出两个 token,然后进行计算,将获取到的结果压入运算结果栈中;如果不是操作符,就压入运算结果栈中。

具体代码前往 LearnCompilers/HLL/calculator001 查看。


前缀、中缀、后缀表达式

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

编译原理之后缀表达式生成与计算

编译原理值后缀表达式生成与计算

后缀表达式字符串计算 --只对个位数计算及 1* 2 -3+6/2

Java数据结构和算法中文第二版.pdf 代码StackX.java package com.ch4.postfix; public class StackX { private ...
  • cai5
  • cai5
  • 2012-03-29 11:27
  • 747
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)