# Mathematical AST

## Origin

This kata was originaly write to implement the visitor pattern

## Kata

### Step 1

Write a program they build and Abstract Syntax Tree of a RPN mathematical expression from a string like:

``````                                           (+)
Mathematical.parse("3 6 +") be produce     / \
/   \
3     6
``````

and

``````                                                   (+)
/ \
/   \
3    (×)
Mathematical.parse("3 6 -6 * +") be produce           / \
/   \
6    -6
``````

For the first test You must chose objects or structs you will have in your AST.

Possible solutions are :

``````new Addition(new Operand(3), new Operand(6))

new Operation(new Add(), new Operand(3), new Operand(6))

...
``````

### Step 2

Make a method or function they build the RPN representation of AST

For exemple,

``````  (+)
/ \
/   \
3    (×)    should be represented by 3 6 -6 × +
/ \
/   \
6    -6
``````

Make a method or function they build the infix representation of AST

For exemple,

``````  (+)
/ \
/   \                               3 + 6 × -6
3    (×)    could be represented by       or
/ \                             3 + (6 × -6)
/   \
6    -6
``````

Make a method or function they evaluate the AST

``````  (+)
/ \
/   \
3    (×)    = -33
/ \
/   \
6    -6
``````

### Step 3

Build the infix representation with the minimum of parenthesis.

### Step 4

Implement operations:

• Exponent (^)
• Knuth’s up-arrow (↑)