중위 표기법(infix notation)        =>        예) 5 + 2 / 7            예) (1 + 2) * 7

전위 표기법(prefix notation)        =>        예) + 5 / 2 7            예) * + 1 2 7

후위 표기법(postfix notation)        =>        예) 5 2 7 / +            예) 1 2 + 7 *


이 중에서 우리에게 익순한 것은 '중위 표기법'이다. 그러나 중위 표기법을 이용해서 작성된 수식에는 연산순서에 대한 정보가 담겨있지 않다.

나눗셈이 덧셈보다 우선순위가 높다는 사실을 알고 있기 때문에 가능한 것이지 만약, 처음 보는 낯선 연산자가 중위 표기법에 존재한다면 연산의 순서를 판단하기는 곤란할 것이다.


하지만 익숙지 않은 '전위 표기법의 수식'이나 '후위 표기법의 수식'에는 연산순서의 정보가 담겨 있다. 

연산자의 종류나 우선순위를 알지 못해도, 연산자가 자리한 위치만 보고서도 다음과 같은 판단이 가능하다.

"OP1이 먼저 등장했으니 OP1 연산을 하고 나서 OP2 연산을 해야겠다."


이렇듯 '전위 표기법으로 작성된 수식'과 '후위 표기법으로 작성된 수식'에는 배치순서를 근거로 한 연산순서의 정보가 담기기 때문에, 이를 대상으로 한 연산에서는 연산자의 우선순위가 필요치 않다.

다시 말해서 연산자의 우선순위란 중위 표기법만을 위한 것이다.

뿐만 아니라, 연산자의 배치순서를 바꿈으로써 연산의 순서를 바꿀 수 있기 때문에, 소괄호를 필요로 하지도 않는다.

즉 소괄호도 중위 표기법만을 위한 것이다.


중위 표기법: 3 + 2 * 4        =>        후위 표기법: 3 2 4 * +

중위 표기법: 2 * 4 + 3        =>        후위 표기법: 2 4 * 3 +

중위 표기법: 2 * 1 + 3 / 2        =>        후위 표기법: 2 1 * 3 2 / +


※ 참고로 프로그램상에서 작성되는 연산문도 컴파일러에 의해서 후위 표기법으로 바뀌어 처리가 된다.





후위 표기법의 수식에서는 연산자의 앞에 등장하는 두 개의 숫자가 피연산자입니다.

ex) 3 * 2 + 4    =>    3 2 * 4 +    =>    6 4 +    =>    10


Posted by scii
: