設(shè)計(jì)模式之解釋器模式(Interpreter Pattern)

概述

The Interpreter pattern defines a representation for the grammar of a language and provides the ability to interpret sentences of that language.?

解釋器模式是指檐束,為多個(gè)句子定義一種語(yǔ)法埠居,并且這個(gè)解釋器還可以通過(guò)語(yǔ)法解析這些句子妻味。

解釋器(Interpreter)模式的定義:給分析對(duì)象定義一個(gè)語(yǔ)言,并定義該語(yǔ)言的文法表示着撩,再設(shè)計(jì)一個(gè)解析器來(lái)解釋語(yǔ)言中的句子。也就是說(shuō)妆偏,用編譯語(yǔ)言的方式來(lái)分析應(yīng)用中的實(shí)例刨肃。這種模式實(shí)現(xiàn)了文法表達(dá)式處理的接口古拴,該接口解釋一個(gè)特定的上下文。

解釋器模式包含以下主要角色

抽象表達(dá)式(Abstract Expression)角色:定義解釋器的接口真友,約定解釋器的解釋操作黄痪,主要包含解釋方法 interpret()。

終結(jié)符表達(dá)式(Terminal??? Expression)角色:是抽象表達(dá)式的子類盔然,用來(lái)實(shí)現(xiàn)文法中與終結(jié)符相關(guān)的操作桅打,文法中的每一個(gè)終結(jié)符都有一個(gè)具體終結(jié)表達(dá)式與之相對(duì)應(yīng)。

非終結(jié)符表達(dá)式(Nonterminal Expression)角色:也是抽象表達(dá)式的子類轻纪,用來(lái)實(shí)現(xiàn)文法中與非終結(jié)符相關(guān)的操作油额,文法中的每條規(guī)則都對(duì)應(yīng)于一個(gè)非終結(jié)符表達(dá)式。

環(huán)境(Context)角色:通常包含各個(gè)解釋器需要的數(shù)據(jù)或是公共的功能刻帚,一般用來(lái)傳遞被所有解釋器共享的數(shù)據(jù)潦嘶,后面的解釋器可以從這里獲取這些值。

客戶端(Client):主要任務(wù)是將需要分析的句子或表達(dá)式轉(zhuǎn)換成使用解釋器對(duì)象描述的抽象語(yǔ)法樹(shù)崇众,然后調(diào)用解釋器的解釋方法掂僵,當(dāng)然也可以通過(guò)環(huán)境角色間接訪問(wèn)解釋器的解釋方法。

本文類圖

實(shí)際上就是Context利用終結(jié)表達(dá)式(TerminalExpression)和非終結(jié)表達(dá)式(AndExperssion)組成的語(yǔ)義來(lái)解析句子顷歌。

本文類圖

本文主要代碼

表達(dá)式實(shí)際上就是定義的語(yǔ)義
非終結(jié)符最終會(huì)轉(zhuǎn)為終結(jié)符
提供具體的語(yǔ)義數(shù)據(jù)和解析入口

測(cè)試結(jié)果

使用解析器解析句子獲得結(jié)果

參考文檔

解析器模式锰蓬,解析器代碼參考本代碼GitHub地址

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末眯漩,一起剝皮案震驚了整個(gè)濱河市芹扭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赦抖,老刑警劉巖舱卡,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異队萤,居然都是意外死亡轮锥,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門要尔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)舍杜,“玉大人,你說(shuō)我怎么就攤上這事赵辕〖燃ǎ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵匆帚,是天一觀的道長(zhǎng)熬词。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么互拾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任歪今,我火速辦了婚禮,結(jié)果婚禮上颜矿,老公的妹妹穿的比我還像新娘寄猩。我一直安慰自己,他們只是感情好骑疆,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布田篇。 她就那樣靜靜地躺著,像睡著了一般箍铭。 火紅的嫁衣襯著肌膚如雪泊柬。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天诈火,我揣著相機(jī)與錄音兽赁,去河邊找鬼。 笑死冷守,一個(gè)胖子當(dāng)著我的面吹牛刀崖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拍摇,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼亮钦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了充活?” 一聲冷哼從身側(cè)響起蜂莉,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎混卵,沒(méi)想到半個(gè)月后巡语,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡淮菠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荤堪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片合陵。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖澄阳,靈堂內(nèi)的尸體忽然破棺而出拥知,到底是詐尸還是另有隱情,我是刑警寧澤碎赢,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布低剔,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏襟齿。R本人自食惡果不足惜姻锁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望猜欺。 院中可真熱鬧位隶,春花似錦、人聲如沸开皿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赋荆。三九已至笋妥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間窄潭,已是汗流浹背春宣。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狈孔,地道東北人信认。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像均抽,于是被迫代替她去往敵國(guó)和親嫁赏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359