解釋器模式:給定一個(gè)語(yǔ)言页滚,定義它的文法的一種表示萤彩,并定義一個(gè)解釋器村视,該解釋器使用該表示來(lái)解釋語(yǔ)言中的句子。
AbstractExpression 抽象解釋器:具體的解釋任務(wù)由各個(gè)實(shí)現(xiàn)類完成盛正,具體的解釋器分別由TerminalExpression和NonterminalExpression完成删咱。
TerminalExpression終結(jié)符表達(dá)式:實(shí)現(xiàn)與文法中的元素相關(guān)聯(lián)的解釋操作,通常一個(gè)解釋器模式中只有一個(gè)終結(jié)符表達(dá)式豪筝,但有多個(gè)實(shí)例痰滋,對(duì)應(yīng)不同的終結(jié)符摘能。具體到我們例子就是VarExpression類,表達(dá)式中的每個(gè)終結(jié)符都在堆棧中產(chǎn)生了一個(gè)VarExpression對(duì)象敲街。
NonterminalExpression 非終結(jié)符表達(dá)式:文法中的每條規(guī)則對(duì)應(yīng)于一個(gè)非終結(jié)表達(dá)式团搞,具體到我們的例子就是加減法規(guī)則分別對(duì)應(yīng)到AddExpression和SubExpression兩個(gè)類。非終結(jié)符表達(dá)式根據(jù)邏輯的復(fù)雜程度而增加多艇,原則上每個(gè)文法規(guī)則都對(duì)應(yīng)一個(gè)非終結(jié)符表達(dá)式逻恐。
解釋器模式的優(yōu)點(diǎn):解釋器是一個(gè)簡(jiǎn)單語(yǔ)法分析工具,它最顯著的優(yōu)點(diǎn)就是擴(kuò)展性峻黍,修改語(yǔ)法規(guī)則只要修改相應(yīng)的非終結(jié)符表達(dá)式就可以了复隆,若擴(kuò)展語(yǔ)法,則只要增加非終結(jié)符類就可以了姆涩。
解釋器模式的缺點(diǎn):解釋器模式會(huì)引起類膨脹挽拂,每個(gè)語(yǔ)法都要產(chǎn)生一個(gè)非終結(jié)符表達(dá)式,語(yǔ)法規(guī)則比較復(fù)雜時(shí)骨饿,就可能產(chǎn)生大量的類文件亏栈,為維護(hù)帶來(lái)了非常多的麻煩。
解釋器模式使用的場(chǎng)景:重復(fù)發(fā)生的問(wèn)題可以使用解釋器模式样刷。例如仑扑,多個(gè)應(yīng)用服務(wù)器,每天產(chǎn)生大量的日志置鼻,需要對(duì)日志文件進(jìn)行分析處理,由于各個(gè)服務(wù)器的日志格式不同蜓竹,但是數(shù)據(jù)要素是相同的箕母,按照解釋器的說(shuō)法就是終結(jié)符表達(dá)式都是相同的,但是非終結(jié)符表達(dá)式就需要制定了俱济。在這種情況下嘶是,可以通過(guò)程序來(lái)一勞永逸地解決該問(wèn)題。