解釋器模式:給定一個語言,定義它的文法的一種表示,并定義一個解釋器,該解釋器使用該表示來解釋語言中的句子。
解釋器模式
AbstractExpression
AbstractExpression 抽象解釋器:具體的解釋任務由各個實現類完成,具體的解釋器分別由TerminalExpression和NonterminalExpression完成。
TerminalExpression
TerminalExpression終結符表達式:實現與文法中的元素相關聯的解釋操作,通常一個解釋器模式中只有一個終結符表達式,但有多個實例,對應不同的終結符。具體到我們例子就是VarExpression類,表達式中的每個終結符都在堆棧中產生了一個VarExpression對象。
NonterminalExpression
NonterminalExpression 非終結符表達式:文法中的每條規則對應于一個非終結表達式,具體到我們的例子就是加減法規則分別對應到AddExpression和SubExpression兩個類。非終結符表達式根據邏輯的復雜程度而增加,原則上每個文法規則都對應一個非終結符表達式。
解釋器模式的優點:解釋器是一個簡單語法分析工具,它最顯著的優點就是擴展性,修改語法規則只要修改相應的非終結符表達式就可以了,若擴展語法,則只要增加非終結符類就可以了。
解釋器模式的缺點:解釋器模式會引起類膨脹,每個語法都要產生一個非終結符表達式,語法規則比較復雜時,就可能產生大量的類文件,為維護帶來了非常多的麻煩。
解釋器模式使用的場景:重復發生的問題可以使用解釋器模式。例如,多個應用服務器,每天產生大量的日志,需要對日志文件進行分析處理,由于各個服務器的日志格式不同,但是數據要素是相同的,按照解釋器的說法就是終結符表達式都是相同的,但是非終結符表達式就需要制定了。在這種情況下,可以通過程序來一勞永逸地解決該問題。