더북(TheBook)

프로그램은 입력된 수식을 왼쪽에서 오른쪽으로 스캔하면서 분석하고, 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;
}
 

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.