設計模式之 【解釋器模式】

解釋器模式

定義

   給定一個語言,定義他的文法的一種表示,並定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。

能夠解決的問題 :

如果一種特定的問題發生的頻率足夠高,那麼可能就值得將該問題的各個實例表述爲一個簡單語句中的句子。這樣就可以構建一個解釋器,該解釋器通過解釋這些句子來解決該問題

       //抽象表達式
abstract  class AbstractExpression
     {
        public abstract void Interpret(Context context);

     }
class Context
    {
        private string input;
        public string Input
        {
            get { return input; }
            set { input = value; }
        }

        private string output;
        public string Output
        {
            get { return output; }
            set { output = value; }
        }

    }
 //非終結符表達式
    class NonterminalExpression:AbstractExpression 
    {

        public override void Interpret(Context context)
        {
            Console.WriteLine("非終端解釋器");
        }
    }
 //終結符表達式
    class TerminalExperssion:AbstractExpression
    {
        public override void Interpret(Context context)
        {
            Console.WriteLine("終端解釋器");
        }
    }
 class Program
    {
        static void Main(string[] args)
        {
            Context context = new Context();
            IList<AbstractExpression> list = new List<AbstractExpression>();
            list.Add(new TerminalExperssion());
            list.Add(new NonterminalExpression());
            list.Add(new TerminalExperssion());
            list.Add(new TerminalExperssion());

            foreach (AbstractExpression  exp in list)
            {
                exp.Interpret(context);
            }

            Console.Read();

        }
    }

 

解釋器模式的優點:

用瞭解釋器,很容易地改變和 擴展文法,因爲該模式使用類來表示文法規則,你可使用繼承來改變或拓展該文法。也比較容易實現文法,因爲定義抽象語法樹中各個節點的類的實現大體類似,這些類都易於直接編寫。

解釋器模式的缺點:

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

 

發佈了70 篇原創文章 · 獲贊 14 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章