直譯器模式

2021-09-11 10:16:19 字數 1494 閱讀 2930

1、內容

給定一種語言,定義它的文法表示,並定義乙個直譯器,該直譯器使用該表示來解釋語言中的句子。

直譯器模式中會有終結符和非終結符之說,語法也根據兩種終結符,決定語句最終含義。

2、角色

abstractexpression: 抽象表示式

terminalexpression: 終結符表示式

nonterminalexpression: 非終結符表示式

context: 環境類

client: 客戶類

複製**

3、使用場景

1、若乙個問題重**生,可以考慮使用直譯器模式。這點在資料處理和日誌處理過程中使用較多,當資料的需求方需要將資料納為己用時,必須將資料「翻譯」成本系統的資料規格;同樣的道理,日誌分析平台也需要根據不同的日誌格式翻譯成統一的「語言」。 2、特定語法直譯器。如各種解釋型語言的直譯器,再比如自然語言中基於語法的文字分析等。

**4、優點 **

1、在語法分析的場景中,具有比較好的擴充套件性。規則修改和制訂比較靈活。

5、缺點

1、解釋規則多樣化會導致直譯器的**; 2、直譯器目標比較單一,行為模式比較固定,因而重要的模組中盡量不要使用直譯器模式。

6、**示例

#!/usr/bin/python

#coding:utf8'''

interpreter'''

class context:

def __init__(self):

self.input=""

self.output=""

class abstractexpression:

def interpret(self,context):

pass

class expression(abstractexpression):

def interpret(self,context):

print

"terminal interpret"

class nonterminalexpression(abstractexpression):

def interpret(self,context):

print

"nonterminal interpret"

if __name__ == "__main__":

context= ""

c =

c = c + [expression()]

c = c + [nonterminalexpression()]

c = c + [expression()]

c = c + [expression()]

for a in c:

a.interpret(context)

複製**

直譯器模式

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

直譯器模式

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

直譯器模式

給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。要解決的問題 如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為乙個簡單語言中的句子。這樣就可以構造乙個直譯器,該直譯器通過解釋這些句子來解決該問題。的好處 當有乙個語言需要解...