日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

设计模式的理解:解释器模式 Interpreter

發(fā)布時間:2024/10/14 157 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式的理解:解释器模式 Interpreter 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

解釋器模式(Interpreter Pattern)提供了評估語言的語法或表達式的方式,它屬于行為型模式。這種模式實現(xiàn)了一個表達式接口,該接口解釋一個特定的上下文。這種模式被用在 SQL 解析、符號處理引擎等。

這種模式的難點主要是文法解析算法的設(shè)計,需要了解些編譯原理的知識。

所謂終結(jié)符,就是文法中不可再細分的字符,例如關(guān)鍵字,變量,運算符,結(jié)束符,常量等。? 非終結(jié)符就是還可以再劃分的東西,例如 條件表達式,算術(shù)表達式,代碼塊等

編譯的步驟分為四大步驟:

1)詞法分析 : 把輸入的字符串拆分成單詞,判斷出哪些單詞是 運算符,介詞(關(guān)鍵字),數(shù)字,變量名。創(chuàng)建單詞對象

2)語法分析 : 語法分析有自上而下和自下而上兩種分析方法,用來判斷語法是否規(guī)范。

3)語義分析 :用來判斷在語法正確的情況下是否符合語義,將輸入的表達式變成一種規(guī)范的格式。

4)目標代碼生成:將這些包含語義,格式規(guī)范化的對象進行操作,生成出目標代碼;

?

?

例如這樣的一個文法:

while 布爾表達式 then 代碼塊 end;

其中 while ,then,end 就是終結(jié)符? ,? 布爾表達式 和代碼塊就是非終結(jié)符。非終結(jié)符可以再劃分,例如

//B代表布爾表達式,C代表代碼塊則,i代表常量和變量 C->%C% //最開始的文法表達式 C->B //代碼塊可以是一個 布爾表達式 C->B ;C //代碼塊可以是一個 布爾表達式 ; 代碼塊 B-> i //布爾表達式可以是單個變量或常量 B-> i >i //布爾表達式可以是 單個常/變量 > 單個常/變量 B-> i < i //布爾表達式可以是 單個常/變量 < 單個常/變量 B-> i == i //布爾表達式可以是 單個常/變量 == 單個常/變量 B-> B && B //布爾表達式可以是 布爾表達式 && 布爾表達式 B-> B || B //布爾表達式可以是 布爾表達式 || 布爾表達式 B-> !B //布爾表達式可以是 !布爾表達式

例如我輸入? ?mynum >8 && mynum < 20 ;

首先第一步,給輸入的表達式的加上開始符,"%mynum >8 && mynum < 20%";之后將要拆分單詞,判斷出 mynum 是變量 , “>” 是一個終結(jié)符, “8”是一個常量 ,“&&”是一個非終結(jié)符,mynum 是變量, “<” 是一個終結(jié)符, “20”是一個常量

第二步就是到了代碼”穩(wěn)定”的部分: 根據(jù)輸入的單詞對象,判斷能不能反推回最開始的文法:

"%mynum >8 && mynum < 20%"? 將變量和常量替換成i “% i >i && i<I%”,之后反推回 “%B && B%”;在反推回 “%B%”,再反推回 “%C%”,再反推成最開始的表達式“C” 。能推出開始表達式說明語法分析通過

第三步也是代碼”穩(wěn)定”的部分,語義分析:要對每個終結(jié)符進行相應(yīng)的判斷操作 例如? <? ?,> ,==,&&的操作邏輯,將操作的邏輯,結(jié)果用對象進行封裝。通常采用三元式表示或者四元式表示的方法。

第四步目標代碼生成:就是解析三元式或者四元式,生成出代碼。

當然第四步在編譯原理中是為了代碼生成,而在解析器場景中一般是為了得出一個結(jié)果。

?

?

具體的案例可以參考(沒用模式,寫的很爛)

詞法分析:https://blog.csdn.net/superSmart_Dong/article/details/79164260

語法/語義分析 :https://blog.csdn.net/superSmart_Dong/article/details/79169332

目標代碼生成 :https://blog.csdn.net/superSmart_Dong/article/details/79187150

總結(jié)

以上是生活随笔為你收集整理的设计模式的理解:解释器模式 Interpreter的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。