design-patterns

Quick-reference guide to software design patterns with concise Dart examples.

View project on GitHub

Defines a grammar and an interpreter that processes sentences in that grammar.

Useful for simple DSLs or expression evaluation.

abstract class Expression {
  int interpret();
}

class Number implements Expression {
  final int value;
  Number(this.value);

  @override
  int interpret() => value;
}

class Add implements Expression {
  final Expression left, right;
  Add(this.left, this.right);

  @override
  int interpret() => left.interpret() + right.interpret();
}

class Multiply implements Expression {
  final Expression left, right;
  Multiply(this.left, this.right);

  @override
  int interpret() => left.interpret() * right.interpret();
}

// Usage: (3 + 5) * 2
final expr = Multiply(Add(Number(3), Number(5)), Number(2));
print(expr.interpret()); // 16