Skip to content

Commit e32c9b8

Browse files
author
chrish
committed
Add InterpreterPattern.
1 parent b9e9383 commit e32c9b8

File tree

9 files changed

+53
-9
lines changed

9 files changed

+53
-9
lines changed

Behavioral/InterpreterPattern/src/io/csie/chris/Evaluator.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
package io.csie.chris;
22

33
import io.csie.chris.expression.*;
4+
import io.csie.chris.expression.common.Expression;
5+
import io.csie.chris.expression.operation.Divide;
6+
import io.csie.chris.expression.operation.Minus;
7+
import io.csie.chris.expression.operation.Multiplication;
8+
import io.csie.chris.expression.operation.Plus;
49

510
import java.util.Map;
611
import java.util.Stack;
@@ -31,6 +36,12 @@ public class Evaluator implements Expression {
3136
final Expression multiExpression = new Multiplication(expressionStack.pop(), expressionStack.pop());
3237
expressionStack.push(multiExpression);
3338
break;
39+
case "/":
40+
final Expression rightOperand = expressionStack.pop();
41+
final Expression leftOperand = expressionStack.pop();
42+
final Expression divideExpression = new Divide(leftOperand, rightOperand);
43+
expressionStack.push(divideExpression);
44+
break;
3445
default:
3546
expressionStack.push(new Variable(token));
3647
break;

Behavioral/InterpreterPattern/src/io/csie/chris/Main.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.csie.chris;
22

3-
import io.csie.chris.expression.Expression;
4-
import io.csie.chris.expression.Number;
3+
import io.csie.chris.expression.common.Expression;
4+
import io.csie.chris.expression.operation.Number;
55

66
import java.util.HashMap;
77
import java.util.Map;
@@ -10,12 +10,13 @@ public class Main {
1010

1111
public static void main(final String[] args) {
1212

13-
final String expression = "v w x z - + *";
13+
final String expression = "u v w x z - + * /";
1414

1515
final Evaluator sentence = new Evaluator(expression);
1616

1717
final Map<String, Expression> variables = new HashMap<>();
1818

19+
variables.put("u", new Number(108));
1920
variables.put("v", new Number(2));
2021
variables.put("w", new Number(5));
2122
variables.put("x", new Number(10));

Behavioral/InterpreterPattern/src/io/csie/chris/expression/Variable.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.csie.chris.expression;
22

3+
import io.csie.chris.expression.common.Expression;
4+
35
import java.util.Map;
46

57
public class Variable implements Expression {

Behavioral/InterpreterPattern/src/io/csie/chris/expression/Expression.java renamed to Behavioral/InterpreterPattern/src/io/csie/chris/expression/common/Expression.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.csie.chris.expression;
1+
package io.csie.chris.expression.common;
22

33
import java.util.Map;
44

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package io.csie.chris.expression.operation;
2+
3+
import io.csie.chris.expression.common.Expression;
4+
5+
import java.util.Map;
6+
7+
public class Divide implements Expression {
8+
9+
private Expression leftOperand;
10+
11+
private Expression rightOperand;
12+
13+
public Divide(Expression leftOperand, Expression rightOperand) {
14+
this.leftOperand = leftOperand;
15+
this.rightOperand = rightOperand;
16+
}
17+
18+
@Override
19+
public int interpret(Map<String, Expression> variables) {
20+
return leftOperand.interpret(variables) / rightOperand.interpret(variables);
21+
}
22+
}

Behavioral/InterpreterPattern/src/io/csie/chris/expression/Minus.java renamed to Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Minus.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
package io.csie.chris.expression;
1+
package io.csie.chris.expression.operation;
2+
3+
import io.csie.chris.expression.common.Expression;
24

35
import java.util.Map;
46

Behavioral/InterpreterPattern/src/io/csie/chris/expression/Multiplication.java renamed to Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Multiplication.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
package io.csie.chris.expression;
1+
package io.csie.chris.expression.operation;
2+
3+
import io.csie.chris.expression.common.Expression;
24

35
import java.util.Map;
46

5-
public class Multiplication implements Expression{
7+
public class Multiplication implements Expression {
68

79
private Expression leftOperand;
810

Behavioral/InterpreterPattern/src/io/csie/chris/expression/Number.java renamed to Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Number.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
package io.csie.chris.expression;
1+
package io.csie.chris.expression.operation;
2+
3+
import io.csie.chris.expression.common.Expression;
24

35
import java.util.Map;
46

Behavioral/InterpreterPattern/src/io/csie/chris/expression/Plus.java renamed to Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Plus.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
package io.csie.chris.expression;
1+
package io.csie.chris.expression.operation;
2+
3+
import io.csie.chris.expression.common.Expression;
24

35
import java.util.Map;
46

0 commit comments

Comments
 (0)