直譯器模式

2021-09-26 10:19:34 字數 1142 閱讀 5554

基本介紹

1) 在編譯原理中,乙個算術表示式通過詞法分析器形成詞法單元,而後這些詞法單元再通過語法分析器構建語法 分析樹,最終形成一顆抽象的語法分析樹。這裡的詞法分析器和語法分析器都可以看做是直譯器

2) 直譯器模式(interpreter pattern):是指給定乙個語言(表示式),定義它的文法的一種表示,並定義乙個直譯器, 使用該直譯器來解釋語言中的句子(表示式)

3) 應用場景 -應用可以將乙個需要解釋執行的語言中的句子表示為乙個抽象語法樹 -一些重複出現的問題可以用一種簡單的語言來表達乙個簡單語法需要解釋的場景

4) 這樣的例子還有,比如編譯器、運算表示式計算、正規表示式、機械人等

類圖

在直譯器模式結構圖中包含如下幾個角色:

abstractexpression(抽象表示式):在抽象表示式中宣告了抽象的解釋操作,它是所有終結符表示式和非終

結符表示式的公共父類。

聯的解釋操作,在句子中的每乙個終結符都是該類的乙個例項。通常在乙個直譯器模式中只有少數幾個終結符表達

式類,它們的例項可以通過非終結符表示式組成較為複雜的句子。

nonterminalexpression(非終結符表示式):非終結符表示式也是抽象表示式的子類,它實現了文法中非終

結符的解釋操作,由於在非終結符表示式中可以包含終結符表示式,也可以繼續包含非終結符表示式,因此其解釋

操作一般通過遞迴的方式來完成。

context(環境類):環境類又稱為上下文類,它用於儲存直譯器之外的一些全域性資訊,通常它臨時儲存了需要

解釋的語句。

直譯器模式的注意事項和細節

1) 當有乙個語言需要解釋執行,可將該語言中的句子表示為乙個抽象語法樹,就可以考慮使用直譯器模式,讓程

序具有良好的擴充套件性

2) 應用場景:編譯器、運算表示式計算、正規表示式、機械人等

3) 使用直譯器可能帶來的問題:直譯器模式會引起類膨脹、直譯器模式採用遞迴呼叫方法,將會導致除錯非常復

雜、效率可能降低.

spring 框架中 spelexpressionparser 就使用到直譯器模

直譯器模式

include include include include include using namespace std 直譯器模式 給定一種語言,定義它的文法的一種表示,並定義乙個直譯器 該直譯器使用該表示來解釋語言中的句子 類似於程式語言或者指令碼 假設情景是乙個指令碼控制系統 wasd上下左右方...

直譯器模式

1 模式定義 直譯器模式 interpreter pattern 定義語言的文法,並且建立乙個直譯器來解釋該語言中的句子,這裡的 語言 意思是使用規定格式和語法的 它是一種類行為型模式。2 模式結構 直譯器模式包含如下角色 abstractexpression 抽象表示式 terminalexpre...

直譯器模式

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