解釋器模式如何在Java項目中實現(xiàn)?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(chuàng)新互聯(lián)是專業(yè)的克井網(wǎng)站建設公司,克井接單;提供成都網(wǎng)站制作、成都做網(wǎng)站,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行克井網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
定義:給定一種語言,定義他的文法的一種表示,并定義一個解釋器,該解釋器使用該表示來解釋語言中句子。
類型:行為類模式
類圖:
解釋器模式是一個比較少用的模式,本人之前也沒有用過這個模式。下面我們就來一起看一下解釋器模式。
解釋器模式的結(jié)構(gòu)
代碼實現(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<Expression> stack = new Stack<Expression>(); for(int i=0;i<charArray.length;i++){ //進行語法判斷,遞歸調(diào)用 } Expression exp = stack.pop(); exp.interpreter(ctx); } }
文法遞歸的代碼部分需要根據(jù)具體的情況來實現(xiàn),因此在代碼中沒有體現(xiàn)。抽象表達式是生成語法集合的關鍵,每個非終結(jié)符表達式解釋一個最小的語法單元,然后通過遞歸的方式將這些語法單元組合成完整的文法,這就是解釋器模式。
解釋器模式的優(yōu)缺點
解釋器是一個簡單的語法分析工具,它最顯著的優(yōu)點就是擴展性,修改語法規(guī)則只需要修改相應的非終結(jié)符就可以了,若擴展語法,只需要增加非終結(jié)符類就可以了。
但是,解釋器模式會引起類的膨脹,每個語法都需要產(chǎn)生一個非終結(jié)符表達式,語法規(guī)則比較復雜時,就可能產(chǎn)生大量的類文件,為維護帶來非常多的麻煩。同時,由于采用遞歸調(diào)用方法,每個非終結(jié)符表達式只關心與自己相關的表達式,每個表達式需要知道最終的結(jié)果,必須通過遞歸方式,無論是面向?qū)ο蟮恼Z言還是面向過程的語言,遞歸都是一個不推薦的方式。由于使用了大量的循環(huán)和遞歸,效率是一個不容忽視的問題。特別是用于解釋一個解析復雜、冗長的語法時,效率是難以忍受的。
解釋器模式的適用場景
在以下情況下可以使用解釋器模式:
注意事項
解釋器模式真的是一個比較少用的模式,因為對它的維護實在是太麻煩了,想象一下,一坨一坨的非終結(jié)符解釋器,假如不是事先對文法的規(guī)則了如指掌,或者是文法特別簡單,則很難讀懂它的邏輯。解釋器模式在實際的系統(tǒng)開發(fā)中使用的很少,因為他會引起效率、性能以及維護等問題。
看完上述內(nèi)容,你們掌握解釋器模式如何在Java項目中實現(xiàn)的方法了嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
文章名稱:解釋器模式如何在Java項目中實現(xiàn)
分享URL:http://www.ekvhdxd.cn/article48/jhoeep.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供Google、服務器托管、營銷型網(wǎng)站建設、做網(wǎng)站、網(wǎng)站收錄、網(wǎng)站設計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)