From 5831d3239d30b3ac3163aba0e31bdd20d0ce731c Mon Sep 17 00:00:00 2001 From: Ilkka Seppala Date: Tue, 18 Aug 2015 23:10:08 +0300 Subject: [PATCH] #107 Interpreter example JavaDoc --- .../java/com/iluwatar/interpreter/App.java | 140 +++++++++--------- .../com/iluwatar/interpreter/Expression.java | 23 +-- .../iluwatar/interpreter/MinusExpression.java | 51 ++++--- .../interpreter/MultiplyExpression.java | 53 ++++--- .../interpreter/NumberExpression.java | 55 +++---- .../iluwatar/interpreter/PlusExpression.java | 51 ++++--- .../com/iluwatar/interpreter/AppTest.java | 33 +++-- 7 files changed, 220 insertions(+), 186 deletions(-) diff --git a/interpreter/src/main/java/com/iluwatar/interpreter/App.java b/interpreter/src/main/java/com/iluwatar/interpreter/App.java index 56924f6b0..2273b386b 100644 --- a/interpreter/src/main/java/com/iluwatar/interpreter/App.java +++ b/interpreter/src/main/java/com/iluwatar/interpreter/App.java @@ -1,68 +1,72 @@ -package com.iluwatar.interpreter; - -import java.util.Stack; - -/** - * - * Interpreter pattern breaks sentences into expressions (Expression) that can - * be evaluated and as a whole form the result. - * - */ -public class App { - - /** - * - * Expressions can be evaluated using prefix, infix or postfix notations - * This sample uses postfix, where operator comes after the operands - * - */ - public static void main(String[] args) { - String tokenString = "4 3 2 - 1 + *"; - Stack stack = new Stack<>(); - - String[] tokenList = tokenString.split(" "); - for (String s : tokenList) { - if (isOperator(s)) { - Expression rightExpression = stack.pop(); - Expression leftExpression = stack.pop(); - System.out - .println(String.format( - "popped from stack left: %d right: %d", - leftExpression.interpret(), - rightExpression.interpret())); - Expression operator = getOperatorInstance(s, leftExpression, - rightExpression); - System.out.println(String.format("operator: %s", operator)); - int result = operator.interpret(); - NumberExpression resultExpression = new NumberExpression(result); - stack.push(resultExpression); - System.out.println(String.format("push result to stack: %d", - resultExpression.interpret())); - } else { - Expression i = new NumberExpression(s); - stack.push(i); - System.out.println(String.format("push to stack: %d", - i.interpret())); - } - } - System.out - .println(String.format("result: %d", stack.pop().interpret())); - } - - public static boolean isOperator(String s) { - return s.equals("+") || s.equals("-") || s.equals("*"); - } - - public static Expression getOperatorInstance(String s, Expression left, - Expression right) { - switch (s) { - case "+": - return new PlusExpression(left, right); - case "-": - return new MinusExpression(left, right); - case "*": - return new MultiplyExpression(left, right); - } - return null; - } -} +package com.iluwatar.interpreter; + +import java.util.Stack; + +/** + * + * Interpreter pattern breaks sentences into expressions ({@link Expression}) that can + * be evaluated and as a whole form the result. + * + */ +public class App { + + /** + * + * Program entry point. + *

+ * Expressions can be evaluated using prefix, infix or postfix notations + * This sample uses postfix, where operator comes after the operands + * + * @param args command line args + * + */ + public static void main(String[] args) { + String tokenString = "4 3 2 - 1 + *"; + Stack stack = new Stack<>(); + + String[] tokenList = tokenString.split(" "); + for (String s : tokenList) { + if (isOperator(s)) { + Expression rightExpression = stack.pop(); + Expression leftExpression = stack.pop(); + System.out + .println(String.format( + "popped from stack left: %d right: %d", + leftExpression.interpret(), + rightExpression.interpret())); + Expression operator = getOperatorInstance(s, leftExpression, + rightExpression); + System.out.println(String.format("operator: %s", operator)); + int result = operator.interpret(); + NumberExpression resultExpression = new NumberExpression(result); + stack.push(resultExpression); + System.out.println(String.format("push result to stack: %d", + resultExpression.interpret())); + } else { + Expression i = new NumberExpression(s); + stack.push(i); + System.out.println(String.format("push to stack: %d", + i.interpret())); + } + } + System.out + .println(String.format("result: %d", stack.pop().interpret())); + } + + public static boolean isOperator(String s) { + return s.equals("+") || s.equals("-") || s.equals("*"); + } + + public static Expression getOperatorInstance(String s, Expression left, + Expression right) { + switch (s) { + case "+": + return new PlusExpression(left, right); + case "-": + return new MinusExpression(left, right); + case "*": + return new MultiplyExpression(left, right); + } + return null; + } +} diff --git a/interpreter/src/main/java/com/iluwatar/interpreter/Expression.java b/interpreter/src/main/java/com/iluwatar/interpreter/Expression.java index 877e5db33..e70e57f7c 100644 --- a/interpreter/src/main/java/com/iluwatar/interpreter/Expression.java +++ b/interpreter/src/main/java/com/iluwatar/interpreter/Expression.java @@ -1,9 +1,14 @@ -package com.iluwatar.interpreter; - -public abstract class Expression { - - public abstract int interpret(); - - @Override - public abstract String toString(); -} +package com.iluwatar.interpreter; + +/** + * + * Expression + * + */ +public abstract class Expression { + + public abstract int interpret(); + + @Override + public abstract String toString(); +} diff --git a/interpreter/src/main/java/com/iluwatar/interpreter/MinusExpression.java b/interpreter/src/main/java/com/iluwatar/interpreter/MinusExpression.java index 03d088604..d26f977da 100644 --- a/interpreter/src/main/java/com/iluwatar/interpreter/MinusExpression.java +++ b/interpreter/src/main/java/com/iluwatar/interpreter/MinusExpression.java @@ -1,23 +1,28 @@ -package com.iluwatar.interpreter; - -public class MinusExpression extends Expression { - - private Expression leftExpression; - private Expression rightExpression; - - public MinusExpression(Expression leftExpression, Expression rightExpression) { - this.leftExpression = leftExpression; - this.rightExpression = rightExpression; - } - - @Override - public int interpret() { - return leftExpression.interpret() - rightExpression.interpret(); - } - - @Override - public String toString() { - return "-"; - } - -} +package com.iluwatar.interpreter; + +/** + * + * MinusExpression + * + */ +public class MinusExpression extends Expression { + + private Expression leftExpression; + private Expression rightExpression; + + public MinusExpression(Expression leftExpression, Expression rightExpression) { + this.leftExpression = leftExpression; + this.rightExpression = rightExpression; + } + + @Override + public int interpret() { + return leftExpression.interpret() - rightExpression.interpret(); + } + + @Override + public String toString() { + return "-"; + } + +} diff --git a/interpreter/src/main/java/com/iluwatar/interpreter/MultiplyExpression.java b/interpreter/src/main/java/com/iluwatar/interpreter/MultiplyExpression.java index fa30e4236..9feada7ee 100644 --- a/interpreter/src/main/java/com/iluwatar/interpreter/MultiplyExpression.java +++ b/interpreter/src/main/java/com/iluwatar/interpreter/MultiplyExpression.java @@ -1,24 +1,29 @@ -package com.iluwatar.interpreter; - -public class MultiplyExpression extends Expression { - - private Expression leftExpression; - private Expression rightExpression; - - public MultiplyExpression(Expression leftExpression, - Expression rightExpression) { - this.leftExpression = leftExpression; - this.rightExpression = rightExpression; - } - - @Override - public int interpret() { - return leftExpression.interpret() * rightExpression.interpret(); - } - - @Override - public String toString() { - return "*"; - } - -} +package com.iluwatar.interpreter; + +/** + * + * MultiplyExpression + * + */ +public class MultiplyExpression extends Expression { + + private Expression leftExpression; + private Expression rightExpression; + + public MultiplyExpression(Expression leftExpression, + Expression rightExpression) { + this.leftExpression = leftExpression; + this.rightExpression = rightExpression; + } + + @Override + public int interpret() { + return leftExpression.interpret() * rightExpression.interpret(); + } + + @Override + public String toString() { + return "*"; + } + +} diff --git a/interpreter/src/main/java/com/iluwatar/interpreter/NumberExpression.java b/interpreter/src/main/java/com/iluwatar/interpreter/NumberExpression.java index 041ddccae..0cf6b034a 100644 --- a/interpreter/src/main/java/com/iluwatar/interpreter/NumberExpression.java +++ b/interpreter/src/main/java/com/iluwatar/interpreter/NumberExpression.java @@ -1,25 +1,30 @@ -package com.iluwatar.interpreter; - -public class NumberExpression extends Expression { - - private int number; - - public NumberExpression(int number) { - this.number = number; - } - - public NumberExpression(String s) { - this.number = Integer.parseInt(s); - } - - @Override - public int interpret() { - return number; - } - - @Override - public String toString() { - return "number"; - } - -} +package com.iluwatar.interpreter; + +/** + * + * NumberExpression + * + */ +public class NumberExpression extends Expression { + + private int number; + + public NumberExpression(int number) { + this.number = number; + } + + public NumberExpression(String s) { + this.number = Integer.parseInt(s); + } + + @Override + public int interpret() { + return number; + } + + @Override + public String toString() { + return "number"; + } + +} diff --git a/interpreter/src/main/java/com/iluwatar/interpreter/PlusExpression.java b/interpreter/src/main/java/com/iluwatar/interpreter/PlusExpression.java index 843a66b62..f244fa946 100644 --- a/interpreter/src/main/java/com/iluwatar/interpreter/PlusExpression.java +++ b/interpreter/src/main/java/com/iluwatar/interpreter/PlusExpression.java @@ -1,23 +1,28 @@ -package com.iluwatar.interpreter; - -public class PlusExpression extends Expression { - - private Expression leftExpression; - private Expression rightExpression; - - public PlusExpression(Expression leftExpression, Expression rightExpression) { - this.leftExpression = leftExpression; - this.rightExpression = rightExpression; - } - - @Override - public int interpret() { - return leftExpression.interpret() + rightExpression.interpret(); - } - - @Override - public String toString() { - return "+"; - } - -} +package com.iluwatar.interpreter; + +/** + * + * PlusExpression + * + */ +public class PlusExpression extends Expression { + + private Expression leftExpression; + private Expression rightExpression; + + public PlusExpression(Expression leftExpression, Expression rightExpression) { + this.leftExpression = leftExpression; + this.rightExpression = rightExpression; + } + + @Override + public int interpret() { + return leftExpression.interpret() + rightExpression.interpret(); + } + + @Override + public String toString() { + return "+"; + } + +} diff --git a/interpreter/src/test/java/com/iluwatar/interpreter/AppTest.java b/interpreter/src/test/java/com/iluwatar/interpreter/AppTest.java index f89150159..b0e486833 100644 --- a/interpreter/src/test/java/com/iluwatar/interpreter/AppTest.java +++ b/interpreter/src/test/java/com/iluwatar/interpreter/AppTest.java @@ -1,14 +1,19 @@ -package com.iluwatar.interpreter; - -import org.junit.Test; - -import com.iluwatar.interpreter.App; - -public class AppTest { - - @Test - public void test() { - String[] args = {}; - App.main(args); - } -} +package com.iluwatar.interpreter; + +import org.junit.Test; + +import com.iluwatar.interpreter.App; + +/** + * + * Application test + * + */ +public class AppTest { + + @Test + public void test() { + String[] args = {}; + App.main(args); + } +}