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我必须以某种方式向后读取字符串.
我认为,更好的解决方案是将工作分为两个阶段:lexing和parsing.
在词法阶段,要划分每个令牌,看它是否是一个操作符(+,-,等)或恒定的,或者一个变量.然后将解析后的实体打包到包含类型和附加信息的结构中.
在您的代码提供的解析阶段,您不是使用字符串,而是使用结构.查看结构,您可以轻松找到它的类型.(如果您选择构建从公共基础派生的结构层次结构,它可以是结构内的字段,也可以是结构的类型.)
实际上,Java和C++中的逻辑应该是相同的.