프로그램은 입력된 수식을 왼쪽에서 오른쪽으로 스캔하면서 분석하고, stack 컨테이너 operators에 연산자를 저장하고, stack 컨테이너 operands에는 피연산자를 저장한다. 모든 연산자는 피연산자 두 개를 사용한다. 따라서 operators 스택 상위에 있는 연산자에 접근하고, operands 스택에서 상위 두 원소를 연산자의 피연산자로 가져와야 연산을 실행할 수 있다. 연산을 실행하는 작업은 다음 함수로 실행한다.
double execute(std::stack<char>& ops, std::stack<double>& operands) { double result {}; double rhs {operands.top()}; // 우측값을 가져온다… operands.pop(); // …그리고 스택에서 삭제한다 double lhs {operands.top()}; // 좌측값을 가져온다… operands.pop(); // …그리고 스택에서 삭제한다 switch (ops.top()) // 현재 연산자를 실행한다 { case ’+’: result = lhs + rhs; break; case ’-’: result = lhs - rhs; break; case ‘*‘: result = lhs * rhs; break; case ’/’: result = lhs / rhs; break; case ’^’: result = std::pow(lhs, rhs); break; default: throw std::runtime_error {string{“invalid operator: “} + ops.top()}; } ops.pop(); // 방금 실행한 연산자를 삭제한다 operands.push(result); return result; }