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