Design patterns
patterns15InterpreterPattern
- Path
- pkg8patterns/patterns15InterpreterPattern.java
- Package
- pkg8patterns
- Study order
- 15
- Run
- Single-file source launch
- Command
- java pkg8patterns/patterns15InterpreterPattern.java
There is no in-browser runner. This is the file from the curriculum, unchanged.
1package pkg8patterns;2 3/*4 * Interpreter (Behavioral)5 * ------------------------6 * INTENT: given a language, define a representation for its grammar and an7 * interpreter that uses the representation to evaluate sentences.8 * UML: Expression + interpret(ctx) ; Terminal and NonTerminal expressions.9 * PROS: easy to extend the grammar; each rule is a class.10 * CONS: complex grammars become hard to maintain (use a parser generator instead).11 * REAL-WORLD: regular expressions, SQL parsers, rule engines.12 */13public class patterns15InterpreterPattern {14 15 interface Expr { int interpret(); }16 17 static class Num implements Expr {18 private final int value;19 Num(int value) { this.value = value; }20 public int interpret() { return value; }21 }22 static class Add implements Expr {23 private final Expr l, r;24 Add(Expr l, Expr r) { this.l = l; this.r = r; }25 public int interpret() { return l.interpret() + r.interpret(); }26 }27 static class Mul implements Expr {28 private final Expr l, r;29 Mul(Expr l, Expr r) { this.l = l; this.r = r; }30 public int interpret() { return l.interpret() * r.interpret(); }31 }32 33 public static void main(String[] args) {34 // (3 + 4) * 535 Expr expr = new Mul(new Add(new Num(3), new Num(4)), new Num(5));36 System.out.println("(3 + 4) * 5 = " + expr.interpret());37 }38}