23. 解释器模式(Interpreter)
23. 解释器模式(Interpreter)
问题:需要解析和执行某种语言或表达式。
核心:为语法中的每种规则定义一个类,递归解析表达式树。
// 简易数学表达式解释器:支持 数字 + 加法 + 减法
class NumberExpr {
constructor(value) { this.value = value; }
interpret() { return this.value; }
}
class AddExpr {
constructor(left, right) { this.left = left; this.right = right; }
interpret() { return this.left.interpret() + this.right.interpret(); }
}
class SubtractExpr {
constructor(left, right) { this.left = left; this.right = right; }
interpret() { return this.left.interpret() - this.right.interpret(); }
}
// (5 + 3) - 2 = 6
const expr = new SubtractExpr(
new AddExpr(new NumberExpr(5), new NumberExpr(3)),
new NumberExpr(2)
);
console.log(expr.interpret()); // 6package interpreter
// 简易数学表达式解释器
type Expression interface {
Interpret() int
}
type NumberExpr struct{ Value int }
func (n NumberExpr) Interpret() int { return n.Value }
type AddExpr struct {
Left, Right Expression
}
func (a AddExpr) Interpret() int {
return a.Left.Interpret() + a.Right.Interpret()
}
type SubtractExpr struct {
Left, Right Expression
}
func (s SubtractExpr) Interpret() int {
return s.Left.Interpret() - s.Right.Interpret()
}
// 使用
// expr := SubtractExpr{
// Left: AddExpr{Left: NumberExpr{5}, Right: NumberExpr{3}},
// Right: NumberExpr{2},
// }
// fmt.Println(expr.Interpret()) // 6