1. 程式人生 > >【設計模式】——直譯器模式(interpreter)

【設計模式】——直譯器模式(interpreter)

行為型模式——直譯器模式(interpreter) 定義:給定一個語言,定義它的文法的一種表示,並定義一個直譯器,這個直譯器使用該表示來解釋語言中的句子

直譯器模式的結構圖: 在這裡插入圖片描述 部分程式碼理解 AbstractExpression抽象表示式,宣告一個抽象的解釋操作,這個介面為語法樹中所有的節點(TerminalExpression和NonterminalExpression)所共享

//宣告一個抽象的解釋操作
    abstract class AbstractExpression
    {
        public abstract void Interpret(Context context);//void對函式返回和引數的限定,
    }

TerminalExpression類,終結符表示式,實現與文法中的終結符相關的解釋操作,實現抽象表示式中所要求的幾口,主要有一個interpret()方法。文法中每一個終結符都有一個具體終結表示式與之對應。 NonterminalExpression類非中終結符表示式,直譯器操作以遞迴方式呼叫

    class TerminalExprssion:AbstractExpression 
    {
        public override void Interpret(Context context)
        {
            Console.WriteLine("終端直譯器");
        }

    }

直譯器模式適用範圍 當一個語言需要解釋執行,並且可將該語言中的句子表示為一個抽象語法樹時,可用直譯器模式。

直譯器模式的好處 容易改變和擴充套件文法,因為該模式使用類來表示文法規則,可以是使用繼承來改變或擴充套件該文法,也 比較容易實現文法,因為定義抽象語法樹中各個節點的類的實現大體類似,這些類都易於直接編寫

直譯器模式的不足 直譯器模式為文法中的每一條規則至少定義了有個類,因此包含許多規則的文法可能難以管理和維護。 當文法非常複雜時,使用其他的技術如語法分析程式或編譯生成器來處理。