Shunting yard algorithm
The shunting yard algorithm is mainly used for parsing mathematical expressions specified in infix notation. It produces the postfix notation. That means this algorithm is used to convert the infix notation to RPN. The postfix notation is also known as the reverse polish notation (RPN).
Edsger Dijkstra developed this algorithm. The algorithm was named "shunting yard" because its activity resembles a railroad shunting yard.
It is a stackbased algorithm. This algorithm was later generalized to operatorprecedence parsing. The input of this algorithm is divided into two parts: the output queue and the operator stack, as shown in the examples below.
The form of infix notation expressions is "7 + 5" or 7 + 5 * (8  5) and the form of the reverse polish notation expressions is "7 5 +" or "7 5 8 5  * +".
Precedence Table
Symbol 
Precedence 
Value 
^ 
High 
3 
/ 
Less than ^ 
2 
* 
Equal of / 
2 
+ 
Low 
1 
 
Equal of + 
1 
Example 1: Simple conversion of the infix notation to postfix notation "5 + 8".
Example 2: Convert infix notation to reverser polish notation.
Input: A + B  C * D + (E ^ F) * G / H + I
Symbols 
Action 
Stack 
Output 
Note 
A 
"A" add token to output 

A 

+ 
Push token to stack 
+ 
A 

B 
"B" add token to output 
+ 
A B 

 
Pop stack to output 

A B + 
+ and  have same precedence 

Now,  push token to stack 
 
A B + 

C 
"C" add token to output 
 
A B + C 

* 
Push token to stack 
* 
A B + C 
* has higher precedence than  
D 
"D" add token to output 
* 
A B + C D 

+ 
Pop stack to output 
 
A B + C D * 
+ has lesser precedence than * 

Pop stack to output 

A B + C D *  
+ and  have same precedence 

Now, + push token to stack 
+ 
A B + C D *  

( 
Push token to stack 
+( 
A B + C D *  

E 
"E" add token to output 
+( 
A B + C D *  E 

^ 
Push token to stack 
+(^ 
A B + C D *  E 

F 
"F" add token to output 
+(^ 
A B + C D *  E F 

) 
Pop stack to output 
+ 
A B + C D *  E F ^ 
Discard bracket 
* 
Push token to stack 
+* 
A B + C D *  E F ^ 
* has higher precedence than + 
G 
"G" add token to output 
+* 
A B + C D *  E F ^ G 

/ 
Pop stack to output 
+ 
A B + C D *  E F ^ G * 
/ and * have same precedence 

Now, push token to stack 
+/ 
A B + C D *  E F ^ G * 

H 
"H" add token to output 
+/ 
A B + C D *  E F ^ G * H 

+ 
Pop stack to output 
+ 
A B + C D *  E F ^ G * H / 
+ has lesser precedence than / 

Pop stack to output 

A B + C D *  E F ^ G * H / + 
Same precedence 

Now, Push token to stack 
+ 
A B + C D *  E F ^ G * H / + 

I 
"I" add token to output 
+ 
A B + C D *  E F ^ G * H / + I 

End 
Pop whole stack 

A B + C D *  E F ^ G * H / + I + 

Output: A B + C D *  E F ^ G * H / + I +
Example 3: Convert infix notation to reverser polish notation.
Input: 4 + 2 / (9  8) ^ 4 ^ 2
Symbols 
Action 
Stack 
Output 
Note 
4 
"4" add token to output 

4 

+ 
Push token to stack 
+ 
4 

2 
"2" add token to output 
+ 
4 2 

/ 
Push token to stack 
+ / 
4 2 
/ has higher precedence than + 
( 
Push token to stack 
+ / ( 
4 2 

9 
"9" add token to output 
+ / ( 
4 2 9 

 
Push token to stack 
+ / (  
4 2 9 

8 
"8" add token to output 
+ / (  
4 2 9 8 

) 
Pop stack to output 
+ / 
4 2 9 8  
Discard bracket 
^ 
Push token to stack 
+ / ^ 
4 2 9 8  
^ has higher precedence than / 
4 
"4" add token to output 
+ / ^ 
4 2 9 8  4 

^ 
Push token to stack 
+ / ^ ^ 
4 2 9 8  4 
^ is evaluated right to left 
2 
"2" add token to output 
+ / ^ ^ 
4 2 9 8  4 2 

End 
Pop whole stack 

4 2 9 8  4 2 ^ ^ / + 

Output: 4 2 9 8  4 2 ^ ^ / +
Implementation of shunting yard algorithm in Java
