11package io .csie .chris ;
22
3- import io .csie .chris .expression .Expression ;
4- import io .csie .chris .expression .Minus ;
5- import io .csie .chris .expression .Plus ;
6- import io .csie .chris .expression .Variable ;
3+ import io .csie .chris .expression .*;
74
85import java .util .Map ;
96import java .util .Stack ;
@@ -12,23 +9,32 @@ public class Evaluator implements Expression {
129
1310 private Expression syntaxTree ;
1411
15- public Evaluator (final String expression ) {
12+ Evaluator (final String expression ) {
1613
17- final Stack <Expression > expressionStack = new Stack <Expression >();
14+ final Stack <Expression > expressionStack = new Stack <>();
1815
1916 for (final String token : expression .split (" " )) {
20- if (token .equals ("+" )) {
21- final Expression subExpression = new Plus (expressionStack .pop (), expressionStack .pop ());
22- expressionStack .push (subExpression );
23- } else if (token .equals ("-" )) {
24- // it's necessary remove first the right operand from the stack
25- final Expression right = expressionStack .pop ();
26- // ..and after the left one
27- final Expression left = expressionStack .pop ();
28- final Expression subExpression = new Minus (left , right );
29- expressionStack .push (subExpression );
30- } else
31- expressionStack .push (new Variable (token ));
17+ switch (token ) {
18+ case "+" :
19+ final Expression addExpression = new Plus (expressionStack .pop (), expressionStack .pop ());
20+ expressionStack .push (addExpression );
21+ break ;
22+ case "-" :
23+ // it's necessary remove first the right operand from the stack
24+ final Expression right = expressionStack .pop ();
25+ // ..and after the left one
26+ final Expression left = expressionStack .pop ();
27+ final Expression subExpression = new Minus (left , right );
28+ expressionStack .push (subExpression );
29+ break ;
30+ case "*" :
31+ final Expression multiExpression = new Multiplication (expressionStack .pop (), expressionStack .pop ());
32+ expressionStack .push (multiExpression );
33+ break ;
34+ default :
35+ expressionStack .push (new Variable (token ));
36+ break ;
37+ }
3238 }
3339 syntaxTree = expressionStack .pop ();
3440 }
0 commit comments