程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 基於Java的解釋器設計模式

基於Java的解釋器設計模式

編輯:JAVA編程入門知識

  一、引子

  其實沒有什麼好的例子引入解釋器模式,因為它描述了如何構成一個簡單的語言解釋器,主要應用在使用面向對象語言開發編譯器中;在實際應用中,我們可能很少碰到去構造一個語言的文法的情況。

  雖然你幾乎用不到這個模式,但是看一看還是能受到一定的啟發的。

  二、定義與結構

  解釋器模式的定義如下:定義語言的文法,並且建立一個解釋器來解釋該語言中的句子。它屬於類的行為模式。這裡的語言意思是使用規定格式和語法的代碼。

  在GOF的書中指出:如果一種特定類型的問題發生的頻率足夠高,那麼可能就值得將該問題的各個實例表述為一個簡單語言中的句子。這樣就可以構建一個解釋器,該解釋器通過解釋這些句子來解決該問題。而且當文法簡單、效率不是關鍵問題的時候效果最好。

  這也就是解釋器模式應用的環境了。

  讓我們來看看神秘的解釋器模式是由什麼來組成的吧。

  1) 抽象表達式角色:聲明一個抽象的解釋操作,這個接口為所有具體表達式角色(抽象語法樹中的節點)都要實現的。

  什麼叫做抽象語法樹呢?《java與模式》中給的解釋為:抽象語法樹的每一個節點都代表一個語句,而在每個節點上都可以執行解釋方法。這個解釋方法的執行就代表這個語句被解釋。由於每一個語句都代表這個語句被解釋。由於每一個語句都代表一個常見的問題的實例,因此每一個節點上的解釋操作都代表對一個問題實例的解答。

  2) 終結符表達式角色:具體表達式。

  a) 實現與文法中的終結符相關聯的解釋操作

  b) 而且句子中的每個終結符需要該類的一個實例與之對應

  3) 非終結符表達式角色:具體表達式。

  a) 文法中的每條規則R::=R1R2…Rn都需要一個非終結符表帶式角色

  b) 對於從R1到Rn的每個符號都維護一個抽象表達式角色的實例變量

  c) 實現解釋操作,解釋一般要遞歸地調用表示從R1到Rn的那些對象的解釋操作

  4) 上下文(環境)角色:包含解釋器之外的一些全局信息。

  5) 客戶角色:

  a) 構建(或者被給定)表示該文法定義的語言中的一個特定的句子的抽象語法樹

  b) 調用解釋操作

  放上張解釋器結構類圖吧,這也是來自於GOF的書中。

  • 首頁
  • 上一頁
  • 1
  • 2
  • 下一頁
  • 尾頁
  • 共2頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved