直譯器模式

2021-08-21 00:27:38 字數 1527 閱讀 4287

定義:

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

設計類圖:

直譯器模式中的角色:

示例**:

public

abstract

class

expression

public

class

numexpression

extends

expression

@override

public

intinterpret(context context)

public

intgetvalue()

}

public

class

addexpression

extends

expression

@override

public

intinterpret(context context)

}

public

class

subexpression

extends

expression

@override

public

intinterpret(context context)

}

public

class

context

}

public

class

calculator

public

intcalculate(string expression)

}return mexpressionstack.pop().interpret(mcontext);}}

public

class

client

}

輸出結果:

上面示例**是簡單的模擬了加減算術操作,其中numexpression就屬於terminal expression,是乙個終結符表示式,而addexpression和subexpression就是乙個nonterminal expression非終結符表示式, 在calculator類中模擬解析運算表示式,將解析結果不斷壓棧,最後出棧得到運算結果。

直譯器模式是用的比較少的乙個模式,它可以用來解釋執行固定語法規則的文字。當語法規則比較複雜時,會產生大量的非終結符表示式類檔案,因為每乙個語法都對應乙個類。另外由於直譯器內部使用大量的遞迴呼叫,這給效能效率和除錯會帶來很**煩。因此直譯器只適用於語法規則比較簡單的文字。

參考:

直譯器模式

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

直譯器模式

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

直譯器模式

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