溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

web解釋器模式的知識(shí)點(diǎn)有哪些

發(fā)布時(shí)間:2022-01-13 16:34:52 來源:億速云 閱讀:126 作者:iii 欄目:大數(shù)據(jù)

本文小編為大家詳細(xì)介紹“web解釋器模式的知識(shí)點(diǎn)有哪些”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“web解釋器模式的知識(shí)點(diǎn)有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

語法建模

作為解釋器模式的標(biāo)準(zhǔn)做法,定義了語言的語法之后的步驟就是為每種語言要素準(zhǔn)備一個(gè)類。對(duì)于四則運(yùn)算的例子,其類結(jié)構(gòu)如下:

web解釋器模式的知識(shí)點(diǎn)有哪些

類圖稍微大了一些,下面以幾條規(guī)則為例進(jìn)行說明。

1. 泛化關(guān)系

示例:[5]PrimaryExpr::=NumericLiteral|ParenthesizedExpr| FunctionCall

式[5]的含義為基本表達(dá)式PrimaryExpr可以是數(shù)值型字面值NumerLiteral、帶括號(hào)表達(dá)式ParemthesizedExpr、函數(shù)調(diào)用中的某一種。轉(zhuǎn)化成類關(guān)系就是泛化關(guān)系。所有適用PrimaryExpr的地方都可以使用NumericLiteral、ParenthesizedExpr、FunctionCall中的一種來代替。

2.組合關(guān)系

[2]AdditiveExpr::=MultiplicativeExpr(("+">

當(dāng)AdditiveExpr由多個(gè)MultiplicativeExpr構(gòu)成時(shí),二者之間的關(guān)系又可以看作是組合關(guān)系。

當(dāng)只有一個(gè)MultiplicativeExpr的時(shí)候,式[2]可以退化為:

AdditiveExpr::=MultiplicativeExpr

這種情況可以認(rèn)為二者之間是簡(jiǎn)單的泛化關(guān)系。

3.簡(jiǎn)單組合關(guān)系

[7]ParenthesizedExpr::="(" Expr ")"

式[7]可以看作1對(duì)1的簡(jiǎn)單組合關(guān)系。
 

形成語法樹

回頭看一下前一篇文章中的表達(dá)式:

100.0 * sin(29 + (23 * 6)) + sqrt(cos(34 * 5))

這個(gè)表達(dá)式轉(zhuǎn)換成語法樹如下:

web解釋器模式的知識(shí)點(diǎn)有哪些

分析過程是沿著類圖由上而下進(jìn)行,直至找到適合的類型為止。例如最初的分析從AdditiveExpr開始,它的下級(jí)節(jié)點(diǎn)應(yīng)該是多個(gè)MultiplicativeExpr,但是右側(cè)不符合MultiplicativeExpr的條件,因此沿著類圖向下搜索直至找到符合條件的FuncitonCall為止。如此周而復(fù)始就可以得到整個(gè)語法樹。

讀到這里,這篇“web解釋器模式的知識(shí)點(diǎn)有哪些”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

web
AI