중위 표기식 직접 연산하기
참고
- 후위 표기식
괄호가 없는 경우, 아래의 순서대로 연산하면 중위 표기식을 직접 계산할 수 있다.
1. 숫자를 만나면 현재 숫자(cur)를 저장해둔다.
2. +, - 연산자가 나오면 temp에 현재의 숫자를 곱한다. (temp는 1로 초기화)
3. 그리고 result에 temp를 더한다.
4. *, / 가 나오면 temp에 값을 누적한다.
5. 이후 +, - 연산자가 나오면 2 ~ 3을 실행한다.
6. 모두 종료 후 남은 연산 실행
아래의 식으로 중위 표기식을 연산해보자.
operator는 *나 /를 만난 후 저장할 연산자이며, 초기화는 * 로 한다.
temp는 1로 초기화하고 - 를 만나게 되면 -1로 초기화한다.
첫 숫자 a를 cur에 저장한다.
+ 를 만났다. temp에 현재 숫자를 곱하고 result에 누적해서 더한다.
+ 를 만났기 때문에 temp는 1로 초기화된다.
이제 현재 숫자는 b다.
- 를 만났으므로 temp에 현재 숫자를 곱한 후 result에 누적한다.
- 를 만났기 때문에 temp는 -1로 초기화된다.
현재 숫자를 c로 갱신한다.
* 를 만났으므로 temp에 계속 누적한다.
operator가 * 이므로 temp에 현재 값을 곱한다.
그리고 operator를 현재 연산자 *로 갱신한다.
현재 숫자는 d.
/ 를 만났다.
/ 를 만났다고 해서 나누는 것은 아니다.
operator에는 *가 있고 이 값을 temp에 다시 갱신한다.
그리고 operator를 / 로 바꾼다.
현재 숫자는 e.
-를 만났으므로 temp에 cur을 operator대로 연산하고 result에 갱신한다.
result 갱신 후에는 operator를 *로 초기화한다.
이후 연산은 그림을 참고하자.
for문이 종료되었지만 연산은 아직 남았다.
남은 연산은 for문 바깥에서 실행한다.
구현은 괄호를 포함한 중위 표기식 연산하기를 참고하자.