编译原理之后缀表达式生成与计算(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 查看。


前缀、中缀、后缀表达式

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

相关文章推荐

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

编译原理值后缀表达式生成与计算
  • qyvlik
  • qyvlik
  • 2016年06月01日 21:23
  • 1105

编译原理后缀表达式实验

  • 2010年05月04日 17:00
  • 254KB
  • 下载

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

Java数据结构和算法中文第二版.pdf 代码StackX.java package com.ch4.postfix; public class StackX { private ...
  • cai5
  • cai5
  • 2012年03月29日 11:27
  • 797

正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——2 构造抽象语法树

简要介绍     构造抽象语法树是构造基于DFA的正则表达式引擎的第一步。目前在我实现的这个正则表达式的雏形中,正则表达式的运算符有3种,表示选择的|运算符,表示星号运算的*运算符,表示连接的运算符...

后缀表达式计算

  • 2012年03月09日 20:52
  • 3.75MB
  • 下载

正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——2 构造抽象语法树

简要介绍     构造抽象语法树是构造基于DFA的正则表达式引擎的第一步。目前在我实现的这个正则表达式的雏形中,正则表达式的运算符有3种,表示选择的|运算符,表示星号运算的*运算符,表示连接的运算符...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编译原理之后缀表达式生成与计算(2)
举报原因:
原因补充:

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