溫馨提示×

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

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

web解釋器模式的動(dòng)機(jī)是什么

發(fā)布時(shí)間:2022-01-13 16:33:20 來(lái)源:億速云 閱讀:110 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“web解釋器模式的動(dòng)機(jī)是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“web解釋器模式的動(dòng)機(jī)是什么”吧!

意圖

根據(jù)語(yǔ)言的語(yǔ)法定義實(shí)現(xiàn)一個(gè)解釋器,用于解釋執(zhí)行該語(yǔ)言的語(yǔ)句。

動(dòng)機(jī)

一般來(lái)講,軟件解決問(wèn)題都是通過(guò)程序員編寫(xiě)程序?qū)崿F(xiàn)的。例如進(jìn)行計(jì)算,通信等。這種方式在大部分情況下是有效的,但是當(dāng)需求多變的時(shí)候,則存在不夠靈活的問(wèn)題。解決這個(gè)問(wèn)題的方法有很多種,例如為處理增加參數(shù),或通過(guò)處理的組合形成新處理等等。在某些情況下,如果可以將問(wèn)題歸納提煉得出某些簡(jiǎn)單的語(yǔ)句,就可以構(gòu)建一個(gè)解釋器來(lái)解釋并執(zhí)行。

數(shù)學(xué)計(jì)算就屬于這種情況,例如下面的表達(dá)式:

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

對(duì)于不同的表達(dá)式,輸入數(shù)據(jù)的個(gè)數(shù)、層級(jí)的構(gòu)成都會(huì)不同。這時(shí)相對(duì)現(xiàn)實(shí)的解決辦法就是定義一種規(guī)則,然后按照這個(gè)規(guī)則來(lái)實(shí)現(xiàn)一個(gè)解釋器并利用這個(gè)解釋器來(lái)解釋和執(zhí)行用戶的輸入。對(duì)于復(fù)合算式的例子來(lái)講,執(zhí)行就是計(jì)算出結(jié)果。首先我們來(lái)定義表達(dá)式的規(guī)則:

[1]Expr::= AdditiveExpr 

【::=】的含義是【定義為】。因此式[1]可以理解為表達(dá)式Expr定義為加法表達(dá)式AdditiveExpr。 

[2] AdditiveExpr::=MultiplicativeExpr ( ("+" | "-") MultiplicativeExpr )*

【|】的含義是【或者】,【*】的含義是【0到任意多個(gè)】。因此式[2]的含義就是加法表達(dá)式AdditiveExpr定義為一個(gè)乘法表達(dá)式MultiplicativeExpr后面跟著0到任意多個(gè)前面帶正號(hào)或負(fù)號(hào)的乘法表達(dá)式。換一種說(shuō)法就是若干個(gè)被正號(hào)或負(fù)號(hào)連接的乘法表達(dá)式。
 
[3]MultiplicativeExpr::= UnaryExpr ( ("*" | "/" | "%" ) UnaryExpr)*

式[3]的含義是乘法表達(dá)式MultiplicativeExpr定義為若干個(gè)由乘號(hào)或除號(hào)或取余符號(hào)連接的元表達(dá)式UnaryExpr構(gòu)成。
 
[4]UnaryExpr::=("-" | "+")?PrimaryExpr

【?】的含義是【有或者沒(méi)有】。式[4]的含義是元表達(dá)Unary式定義為前面帶或者不帶正負(fù)號(hào)的基本表達(dá)式PrimaryExpr。
 
[5]PrimaryExpr::= NumericLiteral | ParenthesizedExpr | FunctionCall

式[5]的含義為基本表達(dá)式PrimaryExpr可以是數(shù)值型字面值NumerLiteral、帶括號(hào)表達(dá)式ParemthesizedExpr、函數(shù)調(diào)用中的某一種。
 
[6]NumericLiteral::=IntegerLiteral | DecimalLiteral

數(shù)值型字面值定義為整數(shù)型字面值IntergerLiteral或者小數(shù)型字面值DecimalLiteral。
 
[7]ParenthesizedExpr::="(" Expr ")"

帶括號(hào)表達(dá)式定義為被小括號(hào)包圍的表達(dá)式。表達(dá)式又可以進(jìn)一步分解為加法表達(dá)式、乘法表達(dá)式等。
 
[8]FunctionCall::=FunctionName "(" (Expr(","Expr)*)? ")"

函數(shù)調(diào)用表達(dá)式FunctionCall由函數(shù)名FunctionName和包含在括號(hào)中的參數(shù)列表組成。參數(shù)列表由多個(gè)用逗號(hào)連接的表達(dá)式組成。
 
[9]IntegerLiteral ::=Digits

整數(shù)型字面值IntegerLiteral定義為數(shù)字Digits。
 
[10]DecimalLiteral ::=(("." Digits) | (Digits"."Digits)) 

小數(shù)型字面值DecimalLiteral有兩種形式。一種是小數(shù)點(diǎn)加數(shù)字,另一種是數(shù)字加小數(shù)點(diǎn)再加數(shù)字。
 
[11]Digits ::=[0-9]+

【+】的含義是【1到多個(gè)】,【[0-9]】表示數(shù)字0到9之間的某一個(gè)。因此式[11]的含義就是數(shù)字定義為1到多個(gè)字符0到字符9之間的字符。
 
[12] FunctionName=sin|cos|tan|asin|acos|atan|power|sqrt

式[12]定義可能的函數(shù)名。

到此,相信大家對(duì)“web解釋器模式的動(dòng)機(jī)是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(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