解釋器模式為某語言定義文法表示,並提供一個解釋器來處理該文法的句子。適用於領域特定語言(DSL)、規則引擎、SQL 解析、正則表達式引擎等場景。
// 抽象表達式:統一解釋入口
public interface AbstractExpression {
void interpret(Context context);
}
// 上下文:包含解釋過程所需全局信息
public interface Context { }
// 終結符表達式:文法中最基本單元(如變量、常量)
public class TerminalExpression implements AbstractExpression {
public void interpret(Context context) { /* 具體解釋邏輯 */ }
}
// 非終結符表達式:文法規則組合(如加法、函數調用),持有子表達式
public class NonterminalExpression implements AbstractExpression {
private AbstractExpression successor;
public void setSuccessor(AbstractExpression s) { this.successor = s; }
public AbstractExpression getSuccessor() { return successor; }
public void interpret(Context context) { /* 組合子表達式解釋 */ }
}
AbstractExpression 樹。interpret(context),遞歸遍歷樹完成解釋/執行。interpret 即為樹的後序遍歷求值。Context 可攜帶變量表、函數表、輸出流等運行時狀態。解釋器模式將「文法規則」轉化為「對象結構」,利用遞歸遍歷實現語義計算。雖應用面較窄,但在 DSL、規則引擎等領域是理論基石。理解其結構有助於掌握編譯原理核心思想。