日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

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

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

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

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

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

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

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

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

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

4)目標(biāo)代碼生成:將這些包含語(yǔ)義,格式規(guī)范化的對(duì)象進(jìn)行操作,生成出目標(biāo)代碼;

?

?

例如這樣的一個(gè)文法:

while 布爾表達(dá)式 then 代碼塊 end;

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

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

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

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

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

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

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

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

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

?

?

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

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

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

目標(biāo)代碼生成 :https://blog.csdn.net/superSmart_Dong/article/details/79187150

總結(jié)

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

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