Reverse Polish notation


'''Reverse Polish notation (RPN)''' , also known as postfix notation, is an arithmetic formula notation, derived from the Polish notation introduced in 1920 by the Polish mathematician Jan Łukasiewicz. RPN was invented by Australian philosopher and computer scientist Charles Hamblin in the mid-1950s, to enable zero-address memory stores. As a user interface for calculation the notation was first used in Hewlett-Packard's desktop calculators from the late 1960s and then in the HP-35 handheld scientific calculator launched in 1972. In RPN the operands precede the operator, thus dispensing with the need for parentheses. For example, the expression 3 Implementations of RPN are stack-based; that is, operands are popped from a stack, and calculation results are pushed back onto it. Although this concept may seem obscure at first, RPN has the advantage of being extremely easy, and therefore fast, for a computer to analyze.

Practical implications

Example

The calculation: ((1 + 2) 1 2 + 4 The expression is evaluated in the following way (the Stack is displayed after Operation has taken place):
Input Stack Operation
1 1 Push operand
2 1, 2 Push operand
+ 3 Addition
4 3, 4 Push operand
12 Multiplication
3 12, 3 Push operand
+ 15 Addition
The final result, 15, lies on the top of the stack at the end of the calculation. An alternate way of viewing the stack during the above operation is shown below (as seen on HP48S calculator). +---------------+ | | | | | 1 | 1 enter +---------------+ +---------------+ | | | 1 | | 2 | 2 [enter] +---------------+ +---------------+ | | | | | 3 | + +---------------+ +---------------+ | | | 3 | | 4 | 4 [enter] +---------------+ +---------------+ | | | | | 12 | +---------------+ +---------------+ | | | 12 | | 3 | 3 [enter] +---------------+ +---------------+ | | | | | 15 | + +---------------+ The enters are in brackets because they are optional when followed by an operator press. An enter is only needed to clear the insertion mark from the line. Thus, RPN allows the expression to be entered and evaluated in eight rather than eleven or twelve steps.

Converting from infix notation

Like the evaluation of RPN, conversion from infix notation to RPN is stack-based. Infix expressions are the form of math most people are used to, for instance 3+4 or 3+4

A simple conversion

Input: 3+4 #Add 3 to the output queue (whenever a number is read it is added to the output) #Add 4 to the output queue #Push + (or its ID) onto the operator stack #After reading expression pop the operators off the stack and add them to the output. # In this case there is only one, "+". #Output 3 4 + This already shows a couple of rules:

The algorithm in detail

:: Read a token. :: :: :::1) while there is an operator, o2, at the top of the stack, and either :::::: o1 is left-associative and its precedence is less than or equal to that of o2, or :::::: o1 is right-associative and its precedence is less than that of o2,
:::: pop o2 off the stack, onto the output queue; :::2) push o1 onto the operator stack. :: ::

Complex example

Input 3+4 Read "3" Add "3" to the output Output: 3 Read "+" Push "+" onto the stack Output: 3 Stack: + Read "4" Add "4" to the output Output: 3 4 Stack: + Read " Push " Output: 3 4 Stack: + Read "2" Add "2" to the output Output: 3 4 2 Stack: + Read "/" Pop " Output: 3 4 2 Stack: + / Read "(" Push "(" onto the stack Output: 3 4 2 Stack: + / ( Read "1" Add "1" to output Output: 3 4 2 Stack: + / ( Read "-" Push "-" onto the stack Output: 3 4 2 Stack: + / ( - Read "5" Add "5" to output Output: 3 4 2 Stack: + / ( - Read ")" Pop "-" off stack and add it to the output, pop ( Output: 3 4 2 Stack: + / Read "^" Push "^" onto stack Output: 3 4 2 Stack: + / ^ Read "2" Add "2" to output Output: 3 4 2 Stack: + / ^ End of Expression Pop stack to output Output: 3 4 2 If you were writing an interpreter, this output would be tokenized and written to a compiled file to be later interpreted. Conversion from Infix to RPN can also allow for easier computer simplification of expressions. To do this, act like you are solving the RPN expression, however, whenever you come to a variable its value is null, and whenever an operator has a null value, it and its parameters are written to the output (this is a simplification, problems arise when the parameters are operators). When an operator has no null parameters its value can simply be written to the output. This method obviously doesn't include all the simplifications possible.

Real-world RPN use

See also

Category:Calculators Category:Mathematical notation da:Omvendt polsk notation de:Umgekehrte Polnische Notation es:Notación polaca inversa fr:Notation polonaise inverse ko:역폴란드 표기법 ja:逆ポーランド記法 pl:Odwrotna notacja polska sv:Omvänd polsk notation
everse Polish notation Rverse Polish notation Reerse Polish notation Revrse Polish notation Revese Polish notation Revere Polish notation Revers Polish notation ReversePolish notation Reverse olish notation Reverse Plish notation Reverse Poish notation Reverse Polsh notation Reverse Polih notation Reverse Polis notation Reverse Polishnotation Reverse Polish otation Reverse Polish ntation Reverse Polish noation Reverse Polish nottion Reverse Polish notaion Reverse Polish notaton Reverse Polish notatin Reverse Polish notatio eRverse Polish notation Rveerse Polish notation Reevrse Polish notation Revrese Polish notation Revesre Polish notation Reveres Polish notation Revers ePolish notation ReverseP olish notation Reverse oPlish notation Reverse Ploish notation Reverse Poilsh notation Reverse Polsih notation Reverse Polihs notation Reverse Polis hnotation Reverse Polishn otation Reverse Polish ontation Reverse Polish ntoation Reverse Polish noattion Reverse Polish nottaion Reverse Polish notaiton Reverse Polish notatoin Reverse Polish notatino Reverse Polish notatio RReverse Polish notation Reeverse Polish notation Revverse Polish notation Reveerse Polish notation Reverrse Polish notation Reversse Polish notation Reversee Polish notation Reverse Polish notation Reverse PPolish notation Reverse Poolish notation Reverse Pollish notation Reverse Poliish notation Reverse Polissh notation Reverse Polishh notation Reverse Polish notation Reverse Polish nnotation Reverse Polish nootation Reverse Polish nottation Reverse Polish notaation Reverse Polish notattion Reverse Polish notatiion Reverse Polish notatioon Reverse Polish notationn everse polish notation rverse polish notation reerse polish notation revrse polish notation revese polish notation revere polish notation revers polish notation reversepolish notation reverse olish notation reverse plish notation reverse poish notation reverse polsh notation reverse polih notation reverse polis notation reverse polishnotation reverse polish otation reverse polish ntation reverse polish noation reverse polish nottion reverse polish notaion reverse polish notaton reverse polish notatin reverse polish notatio erverse polish notation rveerse polish notation reevrse polish notation revrese polish notation revesre polish notation reveres polish notation revers epolish notation reversep olish notation reverse oplish notation reverse ploish notation reverse poilsh notation reverse polsih notation reverse polihs notation reverse polis hnotation reverse polishn otation reverse polish ontation reverse polish ntoation reverse polish noattion reverse polish nottaion reverse polish notaiton reverse polish notatoin reverse polish notatino reverse polish notatio rreverse polish notation reeverse polish notation revverse polish notation reveerse polish notation reverrse polish notation reversse polish notation reversee polish notation reverse polish notation reverse ppolish notation reverse poolish notation reverse pollish notation reverse poliish notation reverse polissh notation reverse polishh notation reverse polish notation reverse polish nnotation reverse polish nootation reverse polish nottation reverse polish notaation reverse polish notattion reverse polish notatiion reverse polish notatioon reverse polish notationn