← Back to Home
Interpreter Pattern
Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.
What is it?
The Interpreter pattern provides a way to evaluate language grammar or expressions.
Example
interface Expression {
interpret(context: string): boolean;
}
class TerminalExpression implements Expression {
constructor(private data: string) {}
interpret(context: string): boolean {
return context.includes(this.data);
}
}
class OrExpression implements Expression {
constructor(private expr1: Expression, private expr2: Expression) {}
interpret(context: string): boolean {
return this.expr1.interpret(context) || this.expr2.interpret(context);
}
}
class AndExpression implements Expression {
constructor(private expr1: Expression, private expr2: Expression) {}
interpret(context: string): boolean {
return this.expr1.interpret(context) && this.expr2.interpret(context);
}
}
// Usage example:
const cat = new TerminalExpression('cat');
const dog = new TerminalExpression('dog');
const orExpression = new OrExpression(cat, dog);
console.log(orExpression.interpret('dog is friendly')); // true
const andExpression = new AndExpression(cat, dog);
console.log(andExpression.interpret('cat and dog')); // true
Common Uses
- Parsing expressions
- SQL or regex interpreters
- Compilers and calculators
When to Use
- When you have a grammar to represent
- When you want to interpret sentences in a language
Caution
- Can become complex for large grammars
- Not efficient for complex parsing