解釋器模式報(bào)告_第1頁(yè)
解釋器模式報(bào)告_第2頁(yè)
解釋器模式報(bào)告_第3頁(yè)
解釋器模式報(bào)告_第4頁(yè)
解釋器模式報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、組員: 報(bào)告流程報(bào)告流程什么是解釋器模式什么是解釋器模式解釋器模式結(jié)構(gòu)及其中的角色解釋器模式結(jié)構(gòu)及其中的角色解釋器模式舉例解釋器模式舉例解釋器模式的優(yōu)缺點(diǎn)及適用情形解釋器模式的優(yōu)缺點(diǎn)及適用情形代碼演示代碼演示什么是解釋器模式什么是解釋器模式 解釋器模式解釋器模式 給定一個(gè)語(yǔ)言,定義它的文法的一種表示,并定義一給定一個(gè)語(yǔ)言,定義它的文法的一種表示,并定義一個(gè)解器,這個(gè)解釋器使用該表示來(lái)解釋語(yǔ)言中的句。個(gè)解器,這個(gè)解釋器使用該表示來(lái)解釋語(yǔ)言中的句。 解釋器模式是一種使用頻率相對(duì)較低但學(xué)習(xí)難度較大的設(shè)計(jì)模式,它用于描述如何使用面向?qū)ο笳Z(yǔ)言構(gòu)成一個(gè)簡(jiǎn)單的語(yǔ)言解釋器。在某些情況下,為了更好地描述某一些特

2、定類型的問(wèn)題,我們可以創(chuàng)建一種新的語(yǔ)言,這種語(yǔ)言擁有自己的表達(dá)式和結(jié)構(gòu),即文法規(guī)則,這些問(wèn)題的實(shí)例將對(duì)應(yīng)為該語(yǔ)言中的句子。此時(shí),可以使用解釋器模式來(lái)設(shè)計(jì)這種新的語(yǔ)言。文法規(guī)則文法規(guī)則 解釋器模式描述了如何為簡(jiǎn)單的語(yǔ)言定義一個(gè)文法,解釋器模式描述了如何為簡(jiǎn)單的語(yǔ)言定義一個(gè)文法,如何在該語(yǔ)言中表示一個(gè)句子,以及如何解釋這些句子。如何在該語(yǔ)言中表示一個(gè)句子,以及如何解釋這些句子。例如:可以使用如下文法規(guī)則來(lái)定義:expression := value | operationoperation := expression + expression | expression - expression |

3、 expression expression | expression expressionvalue := an integer /一個(gè)整數(shù)值)(xzyxz 該文法規(guī)則包含三條語(yǔ)句,第一條表示表達(dá)式的組成方式,其中value和operation是后面兩個(gè)語(yǔ)言單位的定義,每一條語(yǔ)句所定義的字符串如operation和value稱為語(yǔ)言構(gòu)造成分或語(yǔ)言單位,符號(hào)“:=”表示“定義為”的意思,其左邊的語(yǔ)言單位通過(guò)右邊來(lái)進(jìn)行說(shuō)明和定義,語(yǔ)言單位對(duì)應(yīng)終結(jié)符表達(dá)式和非終結(jié)符表達(dá)式。如本規(guī)則中的operation是非終結(jié)符表達(dá)式,它的組成元素仍然可以是表達(dá)式,可以進(jìn)一步分解,而value是終結(jié)符表達(dá)式,它的

4、組成元素是最基本的語(yǔ)言單位,不能再進(jìn)行分解。 公式中僅有兩類元素:運(yùn)算元素和運(yùn)算符號(hào),運(yùn)算元素就是指x、y、z等符號(hào),需要具體賦值的對(duì)象,也叫做終結(jié)符號(hào),為什么叫終結(jié)符號(hào)呢?因?yàn)檫@些元素除了需要賦值外,不需要做任何處理,所有運(yùn)算元素都對(duì)應(yīng)一個(gè)具體的業(yè)務(wù)參數(shù),這是語(yǔ)法中最小的單元邏輯,不可再拆分;運(yùn)算符號(hào)就是加減符號(hào),需要我們編寫算法進(jìn)行處理,每個(gè)運(yùn)算符號(hào)都要對(duì)應(yīng)處理單元,否則公式無(wú)法運(yùn)行,運(yùn)算符號(hào)也叫做非終結(jié)符號(hào)。兩類元素的共同點(diǎn)是都要被解析,不同點(diǎn)是所有的運(yùn)算元素具有相同的功能,可以用一個(gè)類表示,而運(yùn)算符號(hào)則是需要分別進(jìn)行解釋,加法需要加法解析器,減法也需要減法解析器。抽象語(yǔ)法樹(shù) 在該抽象語(yǔ)

5、法樹(shù)中,可以通過(guò)終結(jié)符表達(dá)式value和非終結(jié)符表達(dá)式operation組成復(fù)雜的語(yǔ)句,每個(gè)文法規(guī)則的語(yǔ)言實(shí)每個(gè)文法規(guī)則的語(yǔ)言實(shí)例都可以表示為一個(gè)抽象語(yǔ)法樹(shù)例都可以表示為一個(gè)抽象語(yǔ)法樹(shù),即每一條具體的語(yǔ)句都可以用類似上圖所示的抽象語(yǔ)法樹(shù)來(lái)表示,在圖中終結(jié)符在圖中終結(jié)符表達(dá)式類的實(shí)例作為樹(shù)的葉子節(jié)點(diǎn),而非終結(jié)符表達(dá)式類表達(dá)式類的實(shí)例作為樹(shù)的葉子節(jié)點(diǎn),而非終結(jié)符表達(dá)式類的實(shí)例作為非葉子節(jié)點(diǎn),它們可以將終結(jié)符表達(dá)式類的實(shí)的實(shí)例作為非葉子節(jié)點(diǎn),它們可以將終結(jié)符表達(dá)式類的實(shí)例以及包含終結(jié)符和非終結(jié)符實(shí)例的子表達(dá)式作為其子節(jié)例以及包含終結(jié)符和非終結(jié)符實(shí)例的子表達(dá)式作為其子節(jié)點(diǎn)點(diǎn)。抽象語(yǔ)法樹(shù)描述了如何構(gòu)成一

6、個(gè)復(fù)雜的句子,通過(guò)對(duì)抽象語(yǔ)法樹(shù)的分析,可以識(shí)別出語(yǔ)言中的終結(jié)符類和非終結(jié)符類。解釋器模式結(jié)構(gòu)及其中的角色解釋器模式的解釋器模式的UMLUML圖圖解釋器模式結(jié)構(gòu)及其中的角色AbstractExpression(抽象表達(dá)式):在抽象表達(dá)式中聲明了抽象的解釋操作,它是所有終結(jié)符表達(dá)式和非終結(jié)符表達(dá)式的公共父類。 TerminalExpression(終結(jié)符表達(dá)式):終結(jié)符表達(dá)式是抽象表達(dá)式的子類,它實(shí)現(xiàn)了與文法中的終結(jié)符相關(guān)聯(lián)的解釋操作,在句子中的每一個(gè)終結(jié)符都是該類的一個(gè)實(shí)例。通常在一個(gè)解釋器模式中只有少數(shù)幾個(gè)終結(jié)符表達(dá)式類,它們的實(shí)例可以通過(guò)非終結(jié)符表達(dá)式組成較為復(fù)雜的句子。 Nontermin

7、alExpression(非終結(jié)符表達(dá)式):非終結(jié)符表達(dá)式也是抽象表達(dá)式的子類,它實(shí)現(xiàn)了文法中非終結(jié)符的解釋操作,由于在非終結(jié)符表達(dá)式中可以包含終結(jié)符表達(dá)式,也可以繼續(xù)包含非終結(jié)符表達(dá)式,因此其解釋操作一般通過(guò)遞歸的方式來(lái)完成。 Context(環(huán)境類):環(huán)境類又稱為上下文類,它用于存儲(chǔ)解釋器之外的一些全局信息,通常它臨時(shí)存儲(chǔ)了需要解釋的語(yǔ)句。Client:客戶端,創(chuàng)建一個(gè)抽象語(yǔ)法樹(shù),調(diào)用解釋操作。參考代碼抽象表達(dá)式 在解釋器模式中,每一種終結(jié)符和非終結(jié)符都有一個(gè)具體類與之對(duì)應(yīng),正因?yàn)槭褂妙悂?lái)表示每一條文法規(guī)則,所以系統(tǒng)將具有較好的靈活性和可擴(kuò)展性。對(duì)于所有的終結(jié)符和非終結(jié)符,我們首先需要抽象

8、出一個(gè)公共父類,即抽象表達(dá)式類public abstract class Expression /每個(gè)表達(dá)式必須有一個(gè)解析任務(wù)public abstract Object interpreter(Context ctx);參考代碼終結(jié)符表達(dá)式public class TerminalExpression extends Expression /通常終結(jié)符表達(dá)式只有一個(gè),但是有多個(gè)對(duì)象public Object interpreter(Context ctx) return null;參考代碼非終結(jié)符表達(dá)式public class NonterminalExpression extends Ex

9、pression/每個(gè)非終結(jié)符表達(dá)式都會(huì)對(duì)其他表達(dá)式產(chǎn)生依賴public NonterminalExpression(Expression expression) public Object interpreter(Context ctx) /進(jìn)行文法處理 /遞歸調(diào)用每一個(gè)組成部分的interpret()方法 /在遞歸調(diào)用時(shí)指定組成部分的連接方式,即非終結(jié)符的功能參考代碼上下文Context采用HashMap容納一個(gè)具體的表達(dá)式,其代碼如下所示: pulic class Context private HashMap map=new HashMap(): . public class Clie

10、ntpublic static void main (String args)Context ctx=new Context():for(; ;)/進(jìn)行語(yǔ)法判斷,并產(chǎn)生遞歸調(diào)用 . 通常Client是一個(gè)封裝類,封裝的結(jié)果就是傳遞進(jìn)來(lái)一個(gè)規(guī)范性的語(yǔ)法文件,解釋器分析后產(chǎn)生結(jié)果并返回,避免調(diào)用者與語(yǔ)法解釋器的耦合關(guān)系。參考代碼Client演示舉例演示舉例四則運(yùn)算四則運(yùn)算簡(jiǎn)單介紹一下,其中的角色分配: ArithmeticExpression 接口代表算術(shù)表達(dá)式; Variable類代表表達(dá)式中的變量,對(duì)應(yīng)終結(jié)符表達(dá)式; Variables類使用Map存各個(gè)變量的值,對(duì)應(yīng)解釋器中的環(huán)境角色; Pl

11、us、Substract、Multiply、Dvision類分別代表加減乘除四種運(yùn)算,對(duì)應(yīng)解釋器中的非終結(jié)符表達(dá)式; CientDemo類對(duì)應(yīng)客戶端應(yīng)用。解釋其模式舉例解釋其模式舉例四則運(yùn)算四則運(yùn)算UMLUML演示舉例演示舉例簡(jiǎn)單英文翻譯器簡(jiǎn)單英文翻譯器 下面我們結(jié)合一個(gè)簡(jiǎn)單的英文翻譯器來(lái)理解解釋其模式,用戶輸入“Teacher drink water”,程序?qū)⑤敵觥袄蠋熀人薄3绦虿粫?huì)自己懂得語(yǔ)言,需要我們定義好這個(gè)語(yǔ)言的語(yǔ)法表示,并且給出一個(gè)解釋器并且用定義好的語(yǔ)法表示來(lái)解釋這種語(yǔ)言中的句子。 使用程序?qū)崿F(xiàn)該該語(yǔ)言時(shí),定義的基本操作是將終結(jié)符號(hào)的值翻譯為漢語(yǔ),比如 Teacher翻譯為“老

12、師”,Drink翻譯為“喝”,Water翻譯為“水”,當(dāng)用戶輸入語(yǔ)句“Teacher Drink Water”后,程序輸出“老師喝水”SentenceTeacher drink water. Subject Predicate Object Noun Verb Noun := := := | := | := You|I|He|She := Me|You|Him|Them := Teacher|Student|Tiger|Water := Drink|Instruct|Receive文法規(guī)則 上述語(yǔ)言是英語(yǔ)語(yǔ)言的一個(gè)子集,該語(yǔ)言一共定義了八個(gè)語(yǔ)言單位和相關(guān)的八條語(yǔ)言規(guī)則,語(yǔ)法單位分為非終結(jié)符和終

13、結(jié)符,例如上面的、都是非終結(jié)符號(hào),、都是終結(jié)符號(hào)。這樣根據(jù)語(yǔ)法規(guī)則就可以產(chǎn)生定義語(yǔ)言的所有語(yǔ)句,程序就可以對(duì)產(chǎn)生的語(yǔ)句進(jìn)行某種操作,例如剛才說(shuō)的翻譯操作。下面介紹該文法中的四種角色1 Node接口對(duì)應(yīng)抽象表達(dá)式( AbstractionExpression )2 終結(jié)符表達(dá)式( TermailExpression ) 文法中共有4個(gè)終結(jié)語(yǔ)言單位,分別是、 、 、和 ,由于與和 是“或”的關(guān)系,所以針對(duì)和 的語(yǔ)言單位是同一個(gè)類SubjectPronounOr NounNode,針對(duì) 和 的語(yǔ)言單位是ObjectPronounOr NounNode,針對(duì)的語(yǔ)言單位是VerbNode。3 非終結(jié)符表達(dá)式 針對(duì)給出的文法,共有4個(gè)非終結(jié)表達(dá)式類,針對(duì) 語(yǔ)言單位的類是SentenceNode,針對(duì) 語(yǔ)言單位的類是PredicateNode,針對(duì) 語(yǔ)言單位的類是ObjectNode。4上下文角色是Context類翻譯器翻譯器UMLUML解釋器模式的優(yōu)缺點(diǎn)及適用情形

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論