Помощник написания кода на С++

4. Для парсера

#include<iostream>
#include<string>

using namespace std;

int calcExp(string x);
int calcTerm(string x);
int calcElem(string x);

int calcN(string x) {
    int ans = 0;
    for(int i = 0; i < x.size(); i++) {
        ans *= 10;
        ans += x[i] - '0';
    }
    return ans;
}

int calcExp(string x) {
    int schet = 0;
    for(int i = x.size() - 1; i >= 0; i--) {
        if(x[i] == '(') schet--;
        if(x[i] == ')') schet++;
        if(x[i] == '+' and schet == 0) return calcExp(x.substr(0, i)) + calcTerm(x.substr(i+1, x.size() - i - 1));
        if(x[i] == '-' and schet == 0) return calcExp(x.substr(0, i)) - calcTerm(x.substr(i+1, x.size() - i - 1));
    //    if(x[i] == '*') return calcExp(x.substr(0, i)) * calcN(x.substr(i+1, x.size() - i - 1));
    }
    return calcTerm(x);
}

int calcTerm(string x) {
    int schet = 0;
    for(int i = x.size() - 1; i >= 0; i--) {
        if(x[i] == '(') schet--;
        if(x[i] == ')') schet++;
        if(x[i] == '*' and schet == 0) return calcTerm(x.substr(0, i)) * calcElem(x.substr(i+1, x.size() - i - 1));
    }
    return calcElem(x);
}

int calcElem(string x) {
    if(x[0] == '(') return calcExp(x.substr(1,x.size()-2));
    return calcN(x);
}

int main() {
    string input;
    cin >> input;
    cout << calcExp(input);
    return 0;
}