c ++中的前缀递归表示法

Yod*_*oda 0 c++ evaluation parsing expression

我正在寻找用于评估波兰语前缀表示法中的表达式的递归解决方案,但没有找到,但是我找到了伪代码,我想将它转换为C++,但这很难.我写了大写字母,我不知道该怎么做.请纠正我,我是java家伙,对我来说C++是一团糟,但无法帮助它.

int preEval(stack<string> stos){
  string el = "";
  if(stos.empty()){
    return 0;
  }else if(stos.top() IS VALUE){
    string el = stos.top();
    stos.pop();
    return atoi(el.c_str());
  }else if(stos.top() IS OPERATOR){
    int x = preEval(stos);
    int y = preEval(stos);
    return x OPERATOR y;
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑

当我的表达式像/ 10 5应该堆栈假设有元素(从顶部)/ 10 5,或5 10 /?只是问,因为如果我想要它/ 10 5我必须以某种方式向后读取字符串.

Vla*_*lad 5

我认为,更好的解决方案是将工作分为两个阶段:lexing和parsing.

在词法阶段,要划分每个令牌,看它是否是一个操作符(+,-,等)或恒定的,或者一个变量.然后将解析后的实体打包到包含类型和附加信息的结构中.

在您的代码提供的解析阶段,您不是使用字符串,而是使用结构.查看结构,您可以轻松找到它的类型.(如果您选择构建从公共基础派生的结构层次结构,它可以是结构内的字段,也可以是结构的类型.)

实际上,Java和C++中的逻辑应该是相同的.