js設計模式之(直譯器模式)

2021-10-01 23:06:34 字數 1931 閱讀 9587

直譯器模式(interpreter pattern)提供了評估語言的語法或表示式的方式,它屬於行為型模式。這種模式實現了乙個表示式介面,該介面解釋乙個特定的上下文。這種模式被用在 sql 解析.符號處理引擎等。

給定乙個語言,定義它的文法表示,並定義乙個直譯器,這個直譯器使用該標識來解釋語言中的句子。

對於一些固定文法構建乙個解釋句子的直譯器。

如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為乙個簡單語言中的句子。這樣就可以構建乙個直譯器,該直譯器通過解釋這些句子來解決該問題。

構建語法樹,定義終結符與非終結符。

構建環境類,包含直譯器之外的一些全域性資訊,一般是 hashmap。

編譯器.運算表示式計算。

可擴充套件性比較好,靈活。

增加了新的解釋表示式的方式。

易於實現簡單文法。

可利用場景比較少。

對於複雜的文法比較難維護。

直譯器模式會引起類膨脹。

直譯器模式採用遞迴呼叫方法。

可以將乙個需要解釋執行的語言中的句子表示為乙個抽象語法樹。

一些重複出現的問題可以用一種簡單的語言來進行表達。

乙個簡單語法需要解釋的場景。

用直譯器模式為公司安排一場面試

abstractmethoderror.js

export default class abstractmethoderror extends error 

}

agecondition.js

import condition from "./condition";

export default class agecondition extends condition else ! 您年齡不滿足`);

return false;}}

}

andcondition.js

import condition from "./condition";

export default class andcondition extends condition

expression(user)

});if (pass) 恭喜您! 您很符合我們公司要求`);}}

}

condition.js

import abstractmethoderror from "./abstractmethoderror";

export default class condition

}

educondition.js

import condition from "./condition";

export default class educondition extends condition else ! 您學歷不滿足`);

return false;}}

}

測試demo:

import agecondition from "./src/agecondition";

import educondition from "./src/educondition";

import andcondition from "./src/andcondition";

export default ;

let user2 = ;

let user3 = ;

andcondition.expression(user1);

andcondition.expression(user2);

andcondition.expression(user3);

}};

參考:

設計模式之直譯器模式

直譯器模式是一種類行為型模式,它主要是用來解釋特定語言的特定文法表示,雖然這個在實際生產中不常用到,但是我們學習一下還是有幫助的。定義 給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。使用場景 當有乙個語言需要解釋執行,並且你可將該語言中的句子表示為乙...

設計模式之直譯器模式

直譯器模式 1.直譯器模式 給定乙個語言,定義它文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為乙個簡單語言中的句子。這樣就可以構建乙個直譯器,該直譯器通過解釋這些句子來解決該問題。比如 在字串中...

設計模式之直譯器模式

解析器模式是一種行為型設計模式。其思想是 給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,該直譯器使用該表示來解釋語言中的句子。解析器模式涉及4個角色 結構圖 於網路 下面提供乙個簡單例子。乙個簡易的控制台計算器,要求使用者輸入乙個表示式,如a b c,然後要求使用者輸入每個變數的具體值,如...