解釋器模式如何在Java項(xiàng)目中實(shí)現(xiàn)?相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

創(chuàng)新互聯(lián)網(wǎng)絡(luò)公司擁有10余年的成都網(wǎng)站開發(fā)建設(shè)經(jīng)驗(yàn),近1000家客戶的共同信賴。提供做網(wǎng)站、
成都網(wǎng)站建設(shè)、網(wǎng)站開發(fā)、網(wǎng)站定制、
友情鏈接、建網(wǎng)站、網(wǎng)站搭建、
成都響應(yīng)式網(wǎng)站建設(shè)公司、網(wǎng)頁設(shè)計(jì)師打造企業(yè)風(fēng)格,提供周到的售前咨詢和貼心的售后服務(wù)
定義:給定一種語言,定義他的文法的一種表示,并定義一個(gè)解釋器,該解釋器使用該表示來解釋語言中句子。
類型:行為類模式
類圖:

解釋器模式是一個(gè)比較少用的模式,本人之前也沒有用過這個(gè)模式。下面我們就來一起看一下解釋器模式。
解釋器模式的結(jié)構(gòu)
- 抽象解釋器:聲明一個(gè)所有具體表達(dá)式都要實(shí)現(xiàn)的抽象接口(或者抽象類),接口中主要是一個(gè)interpret()方法,稱為解釋操作。具體解釋任務(wù)由它的各個(gè)實(shí)現(xiàn)類來完成,具體的解釋器分別由終結(jié)符解釋器TerminalExpression和非終結(jié)符解釋器NonterminalExpression完成。
- 終結(jié)符表達(dá)式:實(shí)現(xiàn)與文法中的元素相關(guān)聯(lián)的解釋操作,通常一個(gè)解釋器模式中只有一個(gè)終結(jié)符表達(dá)式,但有多個(gè)實(shí)例,對應(yīng)不同的終結(jié)符。終結(jié)符一半是文法中的運(yùn)算單元,比如有一個(gè)簡單的公式R=R1+R2,在里面R1和R2就是終結(jié)符,對應(yīng)的解析R1和R2的解釋器就是終結(jié)符表達(dá)式。
- 非終結(jié)符表達(dá)式:文法中的每條規(guī)則對應(yīng)于一個(gè)非終結(jié)符表達(dá)式,非終結(jié)符表達(dá)式一般是文法中的運(yùn)算符或者其他關(guān)鍵字,比如公式R=R1+R2中,+就是非終結(jié)符,解析+的解釋器就是一個(gè)非終結(jié)符表達(dá)式。非終結(jié)符表達(dá)式根據(jù)邏輯的復(fù)雜程度而增加,原則上每個(gè)文法規(guī)則都對應(yīng)一個(gè)非終結(jié)符表達(dá)式。
- 環(huán)境角色:這個(gè)角色的任務(wù)一般是用來存放文法中各個(gè)終結(jié)符所對應(yīng)的具體值,比如R=R1+R2,我們給R1賦值100,給R2賦值200。這些信息需要存放到環(huán)境角色中,很多情況下我們使用Map來充當(dāng)環(huán)境角色就足夠了。
代碼實(shí)現(xiàn)
class Context {}
abstract class Expression {
public abstract Object interpreter(Context ctx);
}
class TerminalExpression extends Expression {
public Object interpreter(Context ctx){
return null;
}
}
class NonterminalExpression extends Expression {
public NonterminalExpression(Expression...expressions){
}
public Object interpreter(Context ctx){
return null;
}
}
public class Client {
public static void main(String[] args){
String expression = "";
char[] charArray = expression.toCharArray();
Context ctx = new Context();
Stack stack = new Stack();
for(int i=0;i
當(dāng)前名稱:解釋器模式如何在Java項(xiàng)目中實(shí)現(xiàn)-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://weahome.cn/article/djocds.html