본문 바로가기

프로그래밍/이론정리

수식 표기법(postfix, prefix, infix)


<Infix>
일반적인 수식의 표기법은 infix이다
두개의 피연산자 사이에 연산자가 존재하는 형태이다.
연산자의 우선순위에따라 수행되며 이해하기 쉽다.
무엇보다 일반적인 사용법이기 때문에 직관적으로 받아들일 수 있다.

(a + b) * c / d + e



<postfix>
연산자를 피연산자의 뒷쪽에 표시하는 방법이다.
Stack을 사용한 컴퓨터의 계산을 위해서 postfix와 prefix가 고안되었다.
변형방법은 괄호로 묶어서 괄호를 하나씩 지우면서 연산자를 뒤로 빼내면 된다.
가장 기본적인 변환방법은 'a + b' > 'a b +' 이다

(a + b) * c / d + e
> (((a + b) * c) / d) + e
> (((a + b) * c) / d) e  +
> ((a + b) * c) d / e  +
> (a + b) c * d / e  +
> a

 b + c * d / e  +

Stack에서의 연산방법은,
1. 피연산자(숫자)가 입력되면, Stack에 넣는다
2. 연산자가 입력되면, Stack에서 피연산자 두개를 꺼내어 계산후 결과를 Stack에 넣는다.

 입력  동작  Stack
 a  push  a
 b  push  a b
 +  pop, pop, calc, push  (a + b)
 c  push  (a + b) c
 *  pop, pop, calc, push  (a + b) * c
 d  push  (a + b) * c d
 /  pop, pop, calc, push  (a + b) * c / d
 e  push  (a + b) * c / d e
 +  pop, pop, calc, push  (a + b) * c / d + e



<prefix>
prefix는 연산자를 앞으로 배치하는 방식이다.
변환방법은 postfix와 큰 차이가 없다

(a + b) * c / d - e

> (((a + b) * c) / d) - e
> - (((a + b) * c) / d) e
> - / ((a + b) * c) d e
> - / * (a + b) c d e
> - / * + a b c d e

Stack에서의 연산방법은,
1. 연산자가 입력되면, Stack에 넣는다
2. 연속 두개의 피연산자가 입력되면, Stack에서 피연산자와 연산자를 꺼내어 계산후 결과를 Stack에 넣는다.

 입력  동작  Stack

 -

 push

 -

 /

 push

 - /

 *

 push

 - / *

 +  push

 - / * +

 a  push  - / * + a
 b  pop, pop, calc, push

 - / * (a + b)

 c  pop, pop, calc, push

 - / ((a + b) * c)

 d  pop, pop, calc, push

 - ((a + b) * c / d)

 e  pop, pop, calc, push  (a + b) * c / d - e











'프로그래밍 > 이론정리' 카테고리의 다른 글

정렬알고리즘 정리  (0) 2011.03.01
네트워크 이론정리  (0) 2011.02.07
운영체제 #4 - 메모리 관리  (0) 2010.11.15
운영체제 #3 - 교착상태  (0) 2010.11.06
운영체제 #2 - 스케줄링  (0) 2010.11.01