Port of schuchert.wikispaces.com


Katas.ShuntingYardAlgorithm.examples

Katas.ShuntingYardAlgorithm.examples
Example Infix Expression Expected Postfix Result Notes
empty string empty string A good place to start, you’ll create the basic translator class and get a value back.
null empty string Make sure you handle one error case, a null string, by returning a reasonable default value of an empty string.
45 45 Make sure you can handle a simple, literal number. This test may work out of the box, if not, it should be simple to get it to work.
+ + Make sure you can handle a simple operator. This test will probably work out of the box after getting the previous test to pass. Later on, this test represents a error case of sorts since there are no operands for this operator.
3 + 8 3 8 + Your first “real” test, can you perform some basic translation?
2 + 9 - 6 2 9 + 6 - You probably hard-coded the first example, this makes you do a little more work. And it adds a second operator to boot.
2 + 9 * 6 2 9 6 * + This is the first example where operator precedence makes a difference.
2 * 10 ^ 6 2 10 6 ^ * The ^ (raised to the power of) operator is typically a right-associative operator.
2 ^ 3 ^ 4 2 3 4 ^ ^ This was a bit of a dud test I added. It immeidately passed. Might consider leaving this one out.
a ^ 3 a 3 ^ I want my expression evaluator to handle symbols as well as literal numbers. This example forces that behavior.
(3 + 4) 3 4 + Handle ()’s. First, simply remove them.
(3 + 4) * 5 3 4 + 5 * Now make sure that ()s change the order of evaluation since + typically happensafter *.
(3+(4-5))*6 3 4 5 - + 6 * A more complex example to verify that the solution is general. Also notice that the spaces between separate tokens has been removed. You’ll need to handle both with and without spaces.
f(3) 3 f This is an example of a function call. Notice, this forces “look ahead” in your algorithm because you do not know if something is a function or a variable unless you look ahead to the next token.
f(g(4)) 4 g f Is your solution general enough to handle nested functions?
f(3, 4, 19) 3 4 19 f Can your solution handle multiple parameters to a function call?
3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3 3 4 2 * 1 5 - 2 3 ^ ^ / + This example is taken from the Shunting Yard Algorithm writeup on wikipedia.
f(4+5,1+a^2,(8+b)*10) 4 5 + 1 a 2 ^ + 8 b + 10 * f I added this some time later. It incorporates just about everything already done and it specifically pushes handling multiple parameters to a function correctly. I expected this to take some time, but it really did not take much (a few minutes).

Comments

" Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.