設計模式之直譯器模式
直譯器模式,給定一個語言,定義它的文法的一種表示,並定義一個直譯器,這個直譯器使用該表示來解釋語言中的句子。這和解釋型程式語言的直譯器有點類似,要根據一段輸入轉換成一段輸出,將不易讀的文字轉換為易讀的文字,將機器不能識別的輸入轉成二進位制機器可讀的輸出。當有一個語言需要解釋執行,並且你可以將該語言中的句子表示為一個抽象語法樹時,可以使用直譯器模式。 |
Prototype
Context: 直譯器上下文
AbstractExpression: 解釋表示式抽象,定義解釋操作
ConcreteExpression: 解釋表示式實現類,實現具體的解釋邏輯
Sample
public class Context { public string Input { get; set; } public string Output { get; set; } } public abstract class AbstractExpression { public abstract void Interpret(Context context); } public class TerminalExpression : AbstractExpression { public override void Interpret(Context context) { Console.WriteLine("TerminalExpressionInterpreter"); } } public class NoneTerminalExpression : AbstractExpression { public override void Interpret(Context context) { Console.WriteLine("NonTerminalExpressionInterpreter"); } } var context = new Context(); ICollectionexpressions = new List(); expressions.Add(new TerminalExpression()); expressions.Add(new TerminalExpression()); expressions.Add(new NoneTerminalExpression()); foreach (var expression in expressions) { expression.Interpret(context); }
More
直譯器模式為某個語言定義它的語法(或者叫文法)表示,並定義一個直譯器用來處理這個語法。
要想了解“語言”要表達的資訊,我們就必須定義相應的語法規則。這樣,書寫者就可以根據語法規則來書寫“句子”(專業點的叫法應該是“表示式”),閱讀者根據語法規則來閱讀“句子”,這樣才能做到資訊的正確傳遞。而我們要講的直譯器模式,其實就是用來實現根據語法規則解讀“句子”的直譯器。
直譯器模式的程式碼實現比較靈活,沒有固定的模板。
應用設計模式主要是應對程式碼的複雜性,直譯器模式也不例外。它的程式碼實現的核心思想,就是將語法解析的工作拆分到各個小類中,以此來避免大而全的解析類。
一般的做法是,將語法規則拆分一些小的獨立的單元,然後對每個單元進行解析,最終合併為對整個語法規則的解析。
直譯器模式可能小眾,只在一些特定的領域或情境下會被用到,比如編譯器、規則引擎、正規表示式等。
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2723347/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JAVA設計模式之直譯器模式Java設計模式
- 23種設計模式之直譯器模式設計模式
- 折騰Java設計模式之直譯器模式Java設計模式
- 20.java設計模式之直譯器模式Java設計模式
- 設計模式(十五):直譯器模式設計模式
- 軟體設計模式系列之十七——直譯器模式設計模式
- 簡說設計模式——直譯器模式設計模式
- 極簡設計模式-直譯器模式設計模式
- Python設計模式-直譯器模式Python設計模式
- 設計模式--直譯器模式和狀態模式設計模式
- 設計模式(十五)直譯器設計模式
- 設計模式——23直譯器模式(Interpreter)設計模式
- 直譯器設計模式知識概括設計模式
- 設計模式--直譯器模式Interpreter(行為型)設計模式
- 直譯器模式模式
- Rust語言之GoF設計模式: 直譯器Interpreter模式RustGo設計模式
- 設計模式的征途—23.直譯器(Interpreter)模式設計模式
- 終:直譯器模式模式
- 設計模式 第十章 備忘錄模式、直譯器模式、狀態模式設計模式
- PHP設計模式(二十二)—直譯器模式(Interpreter PattPHP設計模式
- Java設計模式-17、直譯器模式-自定義語言的實現Java設計模式
- 24_直譯器模式模式
- 設計模式之迭代器模式設計模式
- 設計模式學習筆記(二十二)直譯器模式及其實現設計模式筆記
- 直譯器模式(Interpreter)模式
- 設計模式(二十一)——直譯器模式(Spring 框架中SpelExpressionParser原始碼分析)設計模式Spring框架Express原始碼
- golang設計模式之迭代器模式Golang設計模式
- Javascript設計模式之迭代器模式JavaScript設計模式
- 設計模式之-裝飾器模式設計模式
- 設計模式之【裝飾器模式】設計模式
- Go 設計模式之裝飾器模式Go設計模式
- 23天設計模式之迭代器模式設計模式
- java設計模式之裝飾器模式Java設計模式
- javascript設計模式 之 4 迭代器模式JavaScript設計模式
- C#設計模式之迭代器模式C#設計模式
- 23種設計模式之迭代器模式設計模式
- 設計模式之裝飾器模式(decorator pattern)設計模式
- 16.java設計模式之迭代器模式Java設計模式