定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子 类比:学习一门新语言,你需要知道它的语法和词汇,然后用这些规则去理解和翻译这门语言。 应用场景 解释一种特定语言或语法 将一个复杂的表达式分解成更简单的表达式并逐步求值时 优缺点 优点 易于实现简单文法的解释器 易于扩展新的文法规则 缺点 复杂文法的解释器难以维护 性能可能较低,因为每个文法规则通常需要一个类 实现代码 // 抽象表达式接口 interface AbstractExpression { interpret(context: string): string; } // 终结符表达式 class TerminalExpression implements AbstractExpression { private data: string; constructor(data: string) { this.data = data; } public interpret(context: string): string { if (context.includes(this.data)) { return `TerminalExpression: ${this.data} is found in ${context}`; } return `TerminalExpression: ${this.data} is not found in ${context}`; } } // 非终结符表达式 class OrExpression implements AbstractExpression { private expr1: AbstractExpression; private expr2: AbstractExpression; constructor(expr1: AbstractExpression, expr2: AbstractExpression) { this.expr1 = expr1; this.expr2 = expr2; } public interpret(context: string): string { return `${this.expr1.interpret(context)} OR ${this.expr2.interpret(context)}`; } } // 客户端代码 const expr1 = new TerminalExpression('Hello'); const expr2 = new TerminalExpression('World'); const orExpr = new OrExpression(expr1, expr2); console.log(orExpr.interpret('Hello JavaScript')); console.log(orExpr.interpret('Python World')); console.log(orExpr.interpret('Java Programming'));