Upcoming SlideShare
×

# Shunting yard

398 views

Published on

1 Like
Statistics
Notes
• Full Name
Comment goes here.

Are you sure you want to Yes No
• Be the first to comment

Views
Total views
398
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
3
0
Likes
1
Embeds 0
No embeds

No notes for slide

### Shunting yard

1. 1. Shunting-yard algorithm Infix to postfix conversion Based on http://en.wikipedia.org/wiki/Shunting_yard_algorithm
2. 2. 2 + (3 * (8 - 4)) = ? How to evaluate this (or similar) formula? TODO: • rules should be visible and highlighted when a rule is applied • an example containing operator precedence rules
3. 3. 2 + (3 * (8 - 4)) = ?Let’s play that the tokens are train cars and we are shunting the shunting yard. 2 + ( 3 * ( 8 - 4 ) )
4. 4. 2 + (3 * (8 - 4)) = ?The first car is a number, it goes straight through. 2 + ( 3 * ( 8 - 4 ) )
5. 5. 2 + (3 * (8 - 4)) = ?Next, the third track (the stack) is empty, we move the operator there. 2 + ( 3 * ( 8 - 4 ) )
6. 6. 2 + (3 * (8 - 4)) = ?Left parenthesis goes always down. 2 ( 3 * ( 8 - 4 ) ) +
7. 7. 2 + (3 * (8 - 4)) = ?Again, there is a number. It moves always straight to the left. 2 3 * ( 8 - 4 ) ) ( +
8. 8. 2 + (3 * (8 - 4)) = ?Next there is an operator, it goes down because the topmost car there is an parenthesis. 2 3 * ( 8 - 4 ) ) ( +
9. 9. 2 + (3 * (8 - 4)) = ?Again a left parenthesis, they go always to the stack. 2 3 ( 8 - 4 ) ) * ( +
10. 10. 2 + (3 * (8 - 4)) = ?A number, straight to the left. 2 3 8 - 4 ) ) ( * ( +
11. 11. 2 + (3 * (8 - 4)) = ?A number, straight to the left. 2 3 8 - 4 ) ) ( * ( +
12. 12. 2 + (3 * (8 - 4)) = ?An operator, move it down. 2 3 8 - 4 ) ) ( * ( +
13. 13. 2 + (3 * (8 - 4)) = ?A number, to the left, as always. 2 3 8 4 ) ) - ( * ( +
14. 14. 2 + (3 * (8 - 4)) = ?A right parenthesis. Now we move the cars from the bottom until there is leftparenthesis. 2 3 8 4 ) ) - ( * ( +
15. 15. 2 + (3 * (8 - 4)) = ?The pair of the parenthesis just disappear. 2 3 8 4 - ) ) ( * ( +
16. 16. 2 + (3 * (8 - 4)) = ?Again, we pop out the items until there is a left parenthesis. 2 3 8 4 - ) * ( +
17. 17. 2 + (3 * (8 - 4)) = ?A pair of parenthesis disappear. 2 3 8 4 - * ) ( +
18. 18. 2 + (3 * (8 - 4)) = ?No more cars on the right side, so we move the cars from the bottom to the left. 2 3 8 4 - * +
19. 19. 2 + (3 * (8 - 4)) = ?Now the transformation is done, how to evaluate it? 2 3 8 4 - * +
20. 20. 2 + (3 * (8 - 4)) = ?Move the cars back to the right side. 2 3 8 4 - * +
21. 21. 2 + (3 * (8 - 4)) = ?Move the cars back to the right side. 2 3 8 4 - * +
22. 22. 2 + (3 * (8 - 4)) = ?Move the numbers to the down until we find an operator. 2 3 8 4 - * +
23. 23. 2 + (3 * (8 - 4)) = ?When operator is found, place it to the middle so that it is between two numbers. - * + 4 8 3 2
24. 24. 2 + (3 * (8 - 4)) = ?Do the calculation and put the result back to down. 8 - 4 * + 3 2
25. 25. 2 + (3 * (8 - 4)) = ?Do the calculation and put the result back to down. 4 * + 3 2
26. 26. 2 + (3 * (8 - 4)) = ?Again, operator to the middle, between the two upmost numbers. * + 4 3 2
27. 27. 2 + (3 * (8 - 4)) = ?Calculate the expression and put the result back to the down. 3 * 4 + 2
28. 28. 2 + (3 * (8 - 4)) = ?Calculate the expression and put the result back to the down. 12 + 2
29. 29. 2 + (3 * (8 - 4)) = ?And the last operator, it is handled in the same way. + 12 2
30. 30. 2 + (3 * (8 - 4)) = ?Calculate the result and that’s it! 2 + 12
31. 31. 2 + (3 * (8 - 4)) = 14Calculate the result and that’s it! 14