91精产品自偷自偷综合官网版下载-91精产品自偷自偷综合下-91精品-91精品91久久久-91精品成人-91精品成人www

網(wǎng)站建設(shè)資訊

NEWS

網(wǎng)站建設(shè)資訊

解釋器模式如何在Java項(xiàng)目中實(shí)現(xiàn)

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

創(chuàng)新互聯(lián)是專業(yè)的克井網(wǎng)站建設(shè)公司,克井接單;提供成都網(wǎng)站制作、成都做網(wǎng)站,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行克井網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

定義:給定一種語言,定義他的文法的一種表示,并定義一個(gè)解釋器,該解釋器使用該表示來解釋語言中句子。

類型:行為類模式

類圖:

解釋器模式如何在Java項(xiàng)目中實(shí)現(xiàn)

        解釋器模式是一個(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í)例,對(duì)應(yīng)不同的終結(jié)符。終結(jié)符一半是文法中的運(yùn)算單元,比如有一個(gè)簡單的公式R=R1+R2,在里面R1和R2就是終結(jié)符,對(duì)應(yīng)的解析R1和R2的解釋器就是終結(jié)符表達(dá)式。                                
     
  • 非終結(jié)符表達(dá)式:文法中的每條規(guī)則對(duì)應(yīng)于一個(gè)非終結(jié)符表達(dá)式,非終結(jié)符表達(dá)式一般是文法中的運(yùn)算符或者其他關(guān)鍵字,比如公式R=R1+R2中,+就是非終結(jié)符,解析+的解釋器就是一個(gè)非終結(jié)符表達(dá)式。非終結(jié)符表達(dá)式根據(jù)邏輯的復(fù)雜程度而增加,原則上每個(gè)文法規(guī)則都對(duì)應(yīng)一個(gè)非終結(jié)符表達(dá)式。
  • 環(huán)境角色:這個(gè)角色的任務(wù)一般是用來存放文法中各個(gè)終結(jié)符所對(duì)應(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

        文法遞歸的代碼部分需要根據(jù)具體的情況來實(shí)現(xiàn),因此在代碼中沒有體現(xiàn)。抽象表達(dá)式是生成語法集合的關(guān)鍵,每個(gè)非終結(jié)符表達(dá)式解釋一個(gè)最小的語法單元,然后通過遞歸的方式將這些語法單元組合成完整的文法,這就是解釋器模式。 

解釋器模式的優(yōu)缺點(diǎn)

        解釋器是一個(gè)簡單的語法分析工具,它最顯著的優(yōu)點(diǎn)就是擴(kuò)展性,修改語法規(guī)則只需要修改相應(yīng)的非終結(jié)符就可以了,若擴(kuò)展語法,只需要增加非終結(jié)符類就可以了。

        但是,解釋器模式會(huì)引起類的膨脹,每個(gè)語法都需要產(chǎn)生一個(gè)非終結(jié)符表達(dá)式,語法規(guī)則比較復(fù)雜時(shí),就可能產(chǎn)生大量的類文件,為維護(hù)帶來非常多的麻煩。同時(shí),由于采用遞歸調(diào)用方法,每個(gè)非終結(jié)符表達(dá)式只關(guān)心與自己相關(guān)的表達(dá)式,每個(gè)表達(dá)式需要知道最終的結(jié)果,必須通過遞歸方式,無論是面向?qū)ο蟮恼Z言還是面向過程的語言,遞歸都是一個(gè)不推薦的方式。由于使用了大量的循環(huán)和遞歸,效率是一個(gè)不容忽視的問題。特別是用于解釋一個(gè)解析復(fù)雜、冗長的語法時(shí),效率是難以忍受的。 

解釋器模式的適用場景

        在以下情況下可以使用解釋器模式:

  • 有一個(gè)簡單的語法規(guī)則,比如一個(gè)sql語句,如果我們需要根據(jù)sql語句進(jìn)行rm轉(zhuǎn)換,就可以使用解釋器模式來對(duì)語句進(jìn)行解釋。
  • 一些重復(fù)發(fā)生的問題,比如加減乘除四則運(yùn)算,但是公式每次都不同,有時(shí)是a+b-c*d,有時(shí)是a*b+c-d,等等等等個(gè),公式千變?nèi)f化,但是都是由加減乘除四個(gè)非終結(jié)符來連接的,這時(shí)我們就可以使用解釋器模式。

注意事項(xiàng)

       解釋器模式真的是一個(gè)比較少用的模式,因?yàn)閷?duì)它的維護(hù)實(shí)在是太麻煩了,想象一下,一坨一坨的非終結(jié)符解釋器,假如不是事先對(duì)文法的規(guī)則了如指掌,或者是文法特別簡單,則很難讀懂它的邏輯。解釋器模式在實(shí)際的系統(tǒng)開發(fā)中使用的很少,因?yàn)樗麜?huì)引起效率、性能以及維護(hù)等問題。

看完上述內(nèi)容,你們掌握解釋器模式如何在Java項(xiàng)目中實(shí)現(xiàn)的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


網(wǎng)頁標(biāo)題:解釋器模式如何在Java項(xiàng)目中實(shí)現(xiàn)
鏈接地址:http://www.yuzhuanjia.cn/article/jhoeep.html
主站蜘蛛池模板: 91婷婷精品国产综合久 | 一区二区国内视频精品 | 99久久久久久宅男 | av在线免费观看网站 | 97国产精品手机 | 91最新91精品91蝌蚪 | 91色老久久精品偷偷蜜臀 | 国产av福利久久精品can动漫 | 99久久99久久精品国产片果冻 | 国产91丝袜美腿在线观看 | 91国精产品秘一区二区三区有何不同 | 91久久嫩草影院免费看无卡顿 | 粉泬毛多水多30岁女人都是水 | 97久久天天综合色 | 国产爆乳无码一区二区三区 | 91精品国产兔费观看久久 | 日韩av片无码一区二区不卡电影 | 91中文字幕人妻无码专区 | 69精品偷拍在线中文字幕 | 91麻精品国产91久久久 | av免费观看性色 | 99久女女精品视 | 大片性播放器 | www在线观看一区二区三区 | 午夜激情 | 91麻豆va国产精品久久久久久 | 91精品麻豆日日躁夜夜躁 | 日韩av无码精品专区 | 国产av一区二区三区无码野 | www日| 91熟女一区二区三区蜜桃 | 成全世界免费高清观看 | 99精品视频在线观看免费播放 | 日韩av不卡一二三 | 国产aⅴ片 | 91精品综合国产在线观看 | 97久久久久久免费 | 91精品国产自产 | 变态调教一区二区三区男同 | 午夜无码久久不卡 | 韩国无码|