根據運行的環境,操作系統可以分為桌面操作系統,手機操作系統,服務器操作系統,嵌入式操作系統等。 設計模式解釋器模式劉?(Sunny)weiliu_china@126.com概述?解釋器模式概述?語法規則和抽象語法樹?解釋器模式的結構和實現?解釋器模式的應用示例?口譯員模式您是否可以使用新的編程語言?口譯員模式概述?加/減解釋器加/減解釋器輸入表達式: 1 + 2 + 3–4 + 1計算結果顯示: 3解釋器模式概述?分析? C#語言不能直接解釋“ 1 + 2 + 3 – 4 + 1”字符串之類的內容嗎?定義一組語法規則來實現對這些語句的解釋,即設計一種自定義語言?基于現有的編程語言?面向編程語言?解釋器模式解釋器模式概述?解釋器模式定義解釋器模式: 給定一種語言,定義其語法表示形式,并定義一個解釋器,使用該表示形式來解釋該語言中的句子. 定義其語法的表示形式,以及使用該表示形式來解釋語言中句子的解釋器. ?行為類似模式解釋器模式的概述?解釋器模式的定義?解釋器模式的定義引用的“語言”是使用規定格式和語法的代碼嗎?這是相對少見但相對困難的設計模式嗎?賺錢,描述如何使用面向對象的語言來構成一個簡單的語言解釋器?是否可以加深對面向對象思維的理解,并了解編程語言的中文語法規則,語法規則和抽象語法樹的解釋過程?語法規則? 1 + 2 + 3–4 + 1表達式:: =值|操作操作:: =表達式'+'表達式| expression'-'expression value :: =整數//整數值? “ :: =”表示“定義為”? “ |”意思是“或”? “ {”和“}”表示“組合”?“ *”表示“出現0次或多次”語法規則和抽象語法樹?抽象語法樹非終結符表達?抽象語法樹(Abstract Syntax Tree,AST)操作+運算值4value 1?描述如何形成復雜的運算語句,通過對抽象語法+樹的分析,可以識別語言+值3value 1value 2的終止符類和非終止符類以及終止符的實現表達式解釋器模式Context?解釋解釋器模式的結構ClientAbstractExpression +解釋(上下文ctx)TerminalExpression +解釋(上下文ctx)NonterminalExpression +解釋(上下文ctx)解釋器模式的結構和實現解釋器模式的結構?解釋器模式包含以下4個角色: ?AbstractExpression(抽象表達式)?TerminalExpression(終端表達式)?非terminalExpression(非終端表達式)?上下文(環境類)解釋器模式的結構和實現?解釋器模式的實現?典型的抽象表達類代碼: 抽象類AbstractExpression {public abstract void Interpret(Context ctx);}解釋器模式的結構和實現?執行解釋器模式?典型的終端表達式類代碼: 類TerminalExpression: AbstractExpression {公共重寫void Interpret(Context ctx){//終端表達式的解釋器操作}}解釋器模式的結構和實現?解釋器模式類的實現NonterminalExpression: AbstractExpression {?典型的非終端表達式類代碼為: private AbstractExpression left;私人AbstractExpression權利;公共NonterminalExpression(左邊的AbstractExpression,右邊的AbstractExpression){this.left = left; this.right = right;}公共重寫void Interpret(Context ctx){//以遞歸方式調用每個組件的interpret()方法//在遞歸調用期間指定組件的連接方法,即非函數}}解釋器模式的結構和實現?解釋器模式的實現?環境類上下文: 用于存儲一些全局信息,通常包含Hashtable或List類型的集合對象(也可以直接由Hashtable等集合類用作環境類),存儲一系列公共信息,例如變量名之間的映射和值(鍵/值)等用于執行特定解釋操作時從中獲取相關信息?您可以在環境類中添加一些表達式解釋器常用功能以減少解釋器的責任?當系統不需要提供全局公共信息時,您可以忽略環境類,并根據實際情況決定是否需要環境類解釋器模式的結構和實現?使用System.Collections實現解釋器模式;類上下文?典型的環境類代碼: {private Hashtable ht = new Hashtable(); //設置集合對象中的值public void Assign(字符串鍵,字符串值){ht.Add(key,value);} //獲取存儲在集合對象中的公共字符串Lookup(string key)的值{返回(string)ht [key];}}解釋器模式的應用示例?該示例表明,一家軟件公司要開發一個機器人控制程序,其中包含一些簡單的英語控制指令,每個指令對應一個表達式(expression),該表達式可以是簡單表達式或復合表達式. 每個簡單表達式都由三個部分組成: 運動方向,動作和距離. 移動方向包括上,下和左. ), 是的是的);移動方式包括移動和運行. 移動距離是一個正整數. 這兩個表達式可以相互連接并形成一個復合表達式. 用戶可以通過操作圖形設置界面來創建機器人控制命令. 收到命令后,機器人將根據命令設置移動. 例如,輸入控制命令“ up move 5”以“ move up 5 units”;輸入控制命令“向下運行10,向左移動20”將“快速向下移動10個單元,然后向左移動20個單元”. 現在,使用解釋器模式設計程序并模擬實現. 解釋器模式的應用示例?示例分析和類圖?語法規則表達式:: =方向作用距離|合成//表達式合成:: =表達式'and'表達式//合成表達式方向:: ='up'| 'down'|'left'|'right'//運動方向動作:: ='move'|'run'//運動距離:: =整數//運動距離?終止符表達方向,動作和距離對應于DirectionNode類解釋器模式的優點,ActionNode類和DistanceNode類?非終端表達式和與SentenceNode和AndNode類解釋器模式對應的表達式的應用示例?實例分析和類圖?抽象語法樹?向下運行10并向左移動20AndNode和SentenceNodeDirectionNode向下ActionNode運行DistanceNode 10方向節點leftSentenceNodeActionNode向DistanceNode 20移動解釋器模式的應用示例?示例分析和類圖InstructionHandler-node: AbstractNode + Handle(字符串指令): void + Output(): void ... AbstractNode {抽象} + Interpret(): 字符串... AndNode-left: AbstractNode-right: AbstractNode + AndNode(左為AbstractNode,右為AbstractNode)+解釋(): 字符串... DirectionNode-方向: 字符串+ DirectionNode(字符串方向)+解釋(): 字符串... ActionNode-action: 字符串+ ActionNode(字符串操作)+解釋(): 字符串... DistanceNode距離: 字符串+ DistanceNode(字符串距離)+解釋(): 字符串... SentenceNode方向: AbstractNode動作: AbstractNode距離: AbstractNode + SentenceNode(AbstractNode方向,AbstractNode動作,AbstractNode距離)+解釋(): 字符串...機器人控制程序解釋器模式的應用示例?示例代碼? (1)AbstractNode: 抽象節點類,充當抽象表達角色? (2)AndNode: 以及節點類,充當非終端表達式? (3)SentenceNode: 簡單句子節點類,充當非終端表達式嗎? (4)DirectionNode: 方向節點類,擔當終端Expression的角色? (5)ActionNode: 動作節點類,充當終??止符嗎? (6)DistanceNode: 距離節點類,充當終??止符嗎? (7)InstructionHandler: 指令處理類,工具類? (8)程序: 客戶端測試演示...參考代碼(DesignPattern \ InterpreterSample)解釋器模式的應用示例?結果和分析下移10和左移20快速下移10,然后左移20向上移5,下移10和左移5上移5,然后快速下移10然后左移5解釋器模式的優缺點和適用范圍環境?模式優勢?易于更改和擴展語法嗎?您可以輕松實現一種簡單的語言嗎?實施語法更容易(使用自動生成工具)?添加新的解釋表達式更加方便. 解釋器模式和適用環境的優缺點?模式的缺點?難以維護復雜的語法?解釋器模式的優缺點和適用環境解釋器模式的優點,執行效率低?模式適用環境?可以用需要解釋和執行為抽象語法樹的語言來表達句子嗎?一些重復的問題可以用簡單的語言表達問題嗎?一種語言的語法相對簡單嗎?執行效率不是關鍵問題END
|
溫馨提示:喜歡本站的話,請收藏一下本站!