直譯器模式(Interpreter)

2021-10-02 08:14:31 字數 1994 閱讀 3527

直譯器模式(interpreter pattern)提供了評估語言的語法或表示式的方式,它屬於行為型模式。這種模式實現了乙個表示式介面,該介面解釋乙個特定的上下文。這種模式被用在 sql 解析、符號處理引擎等。

直譯器模式的角色:

抽象表示式角色(abstractexpression):宣告乙個所有的具體表示式角色都需要實現的抽象介面。這個介面主要是乙個interpret()方法,稱作解釋操作。

終結符表示式角色(terminal expression):實現了抽象表示式角色所需求的介面,主要是乙個interpret()方法;文法中的每乙個終結符都有乙個具體終結表示式與之相對應。比如有乙個簡單的公式:r=r1+r2,在裡面r1和r2就是終結符,對應的解析r1和r2的直譯器就是終結符表示式。

非終結符表示式角色(nonterminal expression):文法中的每一條規則都需要乙個具體的非終結符表示式,非終結符表示式一般是文法中的運算子或者其他關鍵字。比如r=r1+r2中的「+」就是非終結符,解析「+」的直譯器就是乙個非終結符表示式。

環境角色(context):這個角色的任務一般是用來存放文法中各個終結符所對應的具體值。比如r=r1+r2,我們給r1賦值100,給r2賦值200。這些資訊需要存放到環境角色中,很多情況下我們使用map來充當環境角色就足夠了。

建立乙個表示式介面:

package com.wuychn.interpreter;

public inte***ce expression

建立實現了上述介面的實體類:

package com.wuychn.interpreter;

public class terminalexpression implements expression

@override

public boolean interpret(string context)

return false;

}}

package com.wuychn.interpreter;

public class orexpression implements expression

@override

public boolean interpret(string context)

}

package com.wuychn.interpreter;

public class andexpression implements expression

@override

public boolean interpret(string context)

}

interpreterpatterndemo 使用 expression 類來建立規則,並解析它們:

package com.wuychn.interpreter;

public class interpreterpatterndemo

//規則:julie 是乙個已婚的女性

public static expression getmarriedwomanexpression()

public static void main(string args)

}

執行結果:

john is male? true

julie is a married women? true

優點:

直譯器是乙個簡單語法分析工具,它最顯著的優點是擴充套件性,修改語法規則只要修改相應的非終結符表示式就可以了,若擴充套件語法,則只要增加非終結符類就可以了。

缺點:直譯器模式會引起類膨脹,每個語法都要產生乙個非終結符表示式,語法規則比較複雜時,可能產生大量的類檔案,難以維護。

直譯器模式採用遞迴呼叫方法,它導致除錯非常複雜。

直譯器由於使用了大量的迴圈和遞迴,所以當用於解析複雜、冗長的語法時,效率是難以忍受的。

原文:

設計模式之直譯器模式(Interpreter)

直譯器模式是我們暫時的最後一講,一般主要應用在oop開發中的編譯器的開發中,所以適用面比較窄。context類是乙個上下文環境類,plus和minus分別是用來計算的實現,如下 public inte ce expression public class plus implements expres...

直譯器模式

include include include include include using namespace std 直譯器模式 給定一種語言,定義它的文法的一種表示,並定義乙個直譯器 該直譯器使用該表示來解釋語言中的句子 類似於程式語言或者指令碼 假設情景是乙個指令碼控制系統 wasd上下左右方...

直譯器模式

1 模式定義 直譯器模式 interpreter pattern 定義語言的文法,並且建立乙個直譯器來解釋該語言中的句子,這裡的 語言 意思是使用規定格式和語法的 它是一種類行為型模式。2 模式結構 直譯器模式包含如下角色 abstractexpression 抽象表示式 terminalexpre...