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.

pkg8patterns/patterns15InterpreterPattern.java
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}