直譯器模式

2021-10-05 06:03:19 字數 2048 閱讀 9620

直譯器模式:給定一門語言,定義它的文法的一種表示,並定義乙個直譯器,該直譯器使用該表示來解釋語言中的句子。(不常用)

角色:1.abstractrxpression抽象直譯器:具體點的解釋任務由各個實現類完成。

2.terminalexpression終結符表示式:實現與文法中的元素相關聯的解釋操作。

3.nonterminalexpression非終結符表示式:文法中的每條規則對應於乙個非終結表示式。

4.context環境角色

適用場景:重**生的問題。

具體實現:先輸入乙個公式,再給公式中的字元賦值,輸出結果

通用實現

1.建立抽象表示式類

/**

* 抽象表示式類

* 抽象直譯器

*/public

abstract

class

expression

2.建立變數解析器

/**

* 變數解析器

* 終結符表示式角色

*/public

class

varexpression

extends

expression

//從map中取之

public

intinterpreter

(hashmap

var)

}

3.建立抽象運算符號解析器

/**

* 抽象的運算符號解析器

* 抽象的非終結符表示式

*/public

abstract

class

symbolexpression

extends

expression

}

4.建立加法解析器和減法解析器

/**

* 加法解析器

* 具體的非終結符表示式

*/public

class

addexpression

extends

symbolexpression

//把左右兩個表示式運算的結果加起來

public

intinterpreter

(hashmap

var)

}

/**

* 減法解析器

* 具體的非終結符表示式

*/public

class

subexpression

extends

symbolexpression

//把左右兩個表示式運算的結果相減

public

intinterpreter

(hashmap

var)

}

5.建立解析器封裝類

/**

* 解析器封裝類

*/public

class

calculator

}//把運算結果丟擲來

this

.expression = stack.

pop();

}//開始運算

public

intrun

(hashmap

var)

}

6.建立場景測試類

/**

* 場景測試類

*/public

class

client

//獲得表示式

public

static string getexpstr()

throws ioexception

//獲得值對映

public

static hashmap

getvalue

(string exprstr)

throws ioexception }}

return map;

}}

直譯器模式

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

直譯器模式

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

直譯器模式

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