Реализация алгоритма Маневрового двора

Я пытался реализовать алгоритм маневрового двора. Код получает ввод от пользователя, и после того, как он оценен другой функцией (что уже сделано), он будет преобразован в постфиксную запись и затем передан для вычисления. Код ниже предназначен только для самого алгоритма. ie — это вектор токенов, сделанных из пользовательского ввода.
Код имеет смысл для меня, но он не компилируется, но не может понять, где не совсем правильно. Я новичок в C ++, поэтому, пожалуйста, держись со мной!

  double eval_infix_expr(vector<Token> ie, map<string,double> sym_tab)
{
vector<Token> postfix_expr;static bool IsOperator(const string& token) {
return token == "+" ||
token == "-" ||
token == "*" ||
token == "/" ||
token == "%";
}

static int PrecedenceOf(const string& token) {
if (token == "+" || token == "-") return 0;
if (token == "*" || token == "/" || token == "%") return 1;
throw runtime_error("Unknown operator: " + token);
}bool expectingOperator = false;for (size_t i = 0; i < ie.size(); ++i) {

if (IsOperator(ie[i])) {

if (!expectingOperator)
throw runtime_error("Unexpected operator: " + ie[i]);while (!sym_tab.empty() && IsOperator(sym_tab.top()) &&
PrecedenceOf(sym_tab.top()) >= PrecedenceOf(ie[i])) {
postfix_expr.push_back(sym_tab.top()); sym_tab.pop();
}sym_tab.push(ie[i]);

expectingOperator = false;
}else if (ie[i] == "(") {

if (expectingOperator)
throw runtime_error("Expected operator, found (.");
sym_tab.push(ie[i]);
}

else if (ie[i] == ")") {if (!expectingOperator)
throw runtime_error("Expected value, found ).");while (!sym_tab.empty() && sym_tab.top() != "(") {
postfix_expr.push_back(sym_tab.top()); sym_tab.pop();
}if (sym_tab.empty())
throw runtime_error("Imbalanced parentheses.");sym_tab.pop();expectingOperator = true;
}

else {

if (expectingOperator)
throw runtime_error("Expecting operator, found " + ie[i]);postfix_expr.push_back(ie[i]);

expectingOperator = true;
}
}if (!expectingOperator)
throw runtime_error("Expected value, didn't find one.");while (!sym_tab.empty()) {
if (sym_tab.top() == "(")
throw runtime_error("Imbalanced parentheses.");
postfix_expr.push_back(sym_tab.top()); sym_tab.pop();
}
}postfix_Evaluator pe(postfix_expr);
return pe.eval();

}

}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]