精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

解釋器模式需要安裝的軟件、工具包

lhl545545 ? 來源:LabVIEW的編程之道 ? 作者:LabVIEW的編程之道 ? 2022-09-19 14:59 ? 次閱讀

解釋器模式本質:為某一款軟件設計一種腳本語言,序列化軟件中的方法,以便通過腳本來操作軟件。最典型的例子就是Windows的Powershell,據說作者當年結果很悲催,利用空閑時間開發,還被微軟認定為不務正業,做降薪降級處理。

本文目錄

一、解釋器模式簡介

??????????????????????二、解釋器模式范例

三、需要安裝的軟件、工具包

四、共享代碼

一、解釋器模式簡介

解釋器模式解決的實際問題:

在軟件開發中,會遇到有些問題多次重復出現,而且有一定的相似性和規律性。如果自己設計一個簡單的腳本語言,就可以靈活的處理問題,遇到特殊需求可以在軟件頂層自定義和擴展功能。使用解釋器模式是比較好選著。

解釋器模式的定義:

解釋器(Interpreter)模式的定義:給分析對象定義一個語言,并定義該語言的文法表示,再設計一個解析器來解釋語言中的句子。——維基百科


解釋器模式的優點如下:

1、擴展性好。由于在解釋器模式中使用類來表示語言的文法規則,因此可以通過繼承擴展功能,符合開閉原則。

2、容易實現。在語法樹中的每個表達式節點類都是相似的,所以實現其擴展較為容易。

3、組合復用。可以通過組合復用已有的功能實現新的功能(在性能要求不高的前提下)。


解釋器模式的缺點如下:

1、比正常的生成的代碼執行效率低。解釋器模式中通常使用大量的循環和遞歸調用,當要解釋的句子較復雜時,其調用效率低,適當約束使用范圍,不要將其完全當通用編程語言使用,限制遞歸調用次數,使系統邏輯清晰,更容易調試。

2、會增加很多類。解釋器模式中的每條規則至少需要定義一個類,當系統包含的規則越多,類的個數就越多,會導致類級數膨脹,盡量使用當前功能組合,除非特別強調性能才新添語法規則。

解釋器模式包含以下主要角色:

1、AbstractExpression(抽象表達式):在抽象表達式中聲明了抽象的解釋操作,它是所有終結符表達式和非終結符表達式的公共父類。(抽象編程下可以一直遞歸下去主要包含解釋方法 )

2、終結符表達式(Terminal Expression)角色:是抽象表達式的子類,用來實現文法中與終結符相關的操作,文法中的每一個終結符都有一個具體終結表達式與之相對應。(不可以遞歸的點的節點,直接得到結果)

3、非終結符表達式(Nonterminal Expression)角色:也是抽象表達式的子類,用來實現文法中與非終結符相關的操作,文法中的每條規則都對應于一個非終結符表達式。(作為一個語法轉折點,可以持續遞歸,和抽象表達式相通)

4、Context(環境類):環境類又稱為上下文類,保存中間變量等功能。

解釋器的UML關系圖如下:

e2236edc-3733-11ed-ba43-dac502259ad0.png

二、解釋器模式范例

我們以計算為例來寫一個解釋器模式,具體UML關系如下圖:

e252fc24-3733-11ed-ba43-dac502259ad0.png

1、終結符:Variant T:

1.1、Variant T:Double T、String T;

2、非終結符:Calc T、System T兩類。

2.1、Calc T:Add 、Sub

2.2、System:Show Variable。

計算的文法規則為FUN,V1,V3,V3,......:其中首個字符串FUN為表達式名稱,V1,V2,V3....為變量,輸入輸出為FUN規定,其中用逗號隔開,為了方便使用中英文逗號均可。

例子:SUB,a,b,c含義為a+b=c =>ADD,第一個字符串為表達式名稱,a,b類型為變量或常數,c為變量或空字符,為變量時保存數據,為空字符不保存結果,變量不能以數字開頭。

下邊開始編程。

1、創建三個類AbstractExpression、Noterminal Expression和Terminal Expression,其中Noterminal Expression和Terminal Expression繼承至AbstractExpression。當前類關系如下圖:

e269c88c-3733-11ed-ba43-dac502259ad0.png

2、創建一個類命名為Context。

3、在AbstractExpression添加兩個動態VI Interpert(Info)和Tostring()提供給子類重寫。

e27789d6-3733-11ed-ba43-dac502259ad0.png

e2987358-3733-11ed-ba43-dac502259ad0.png

4、創建類Variant T、Calc T、System T繼承至Terminal Expression,當前類關系如下圖:

e2a929d2-3733-11ed-ba43-dac502259ad0.png

5、創建類Double T、String T繼承至Variant T,當前類關系如下圖:

e2ba147c-3733-11ed-ba43-dac502259ad0.png

6、創建類ADD Sub繼承至Calc T,當前類關系如下圖:

e2c9351a-3733-11ed-ba43-dac502259ad0.png

7、創建類Show Variable繼承至System T,當前類關系如下圖:

e2d61a00-3733-11ed-ba43-dac502259ad0.png

8、為Context添加私有屬性和方法。

8.1、添加一個數據引用,值類型為變體,命名為Variable Map;

8.2、添加字符串引用并命名為Log ref,創建其數據成員訪問;

8.3、添加靜態VI命名為Get Variabe,用于獲取數據中的表達式。

e2ecc174-3733-11ed-ba43-dac502259ad0.png

e302c46a-3733-11ed-ba43-dac502259ad0.png

8.4、添加靜態VI命名為Set Variabe,用于保存數據中的表達式。

e31cb53c-3733-11ed-ba43-dac502259ad0.png

e33dd762-3733-11ed-ba43-dac502259ad0.png

8.5、添加一個靜態VI命名為Do Interpert,用于執行文本表達式,其工作方式是先獲取表達式,然后執行Interpert()動態方法。

e34a5d3e-3733-11ed-ba43-dac502259ad0.png

e363157c-3733-11ed-ba43-dac502259ad0.png

8.6、創建Write Log方法,用于打印執行各種狀態。

e3759436-3733-11ed-ba43-dac502259ad0.png

e38c88da-3733-11ed-ba43-dac502259ad0.png

8.7、創建Initial Variable方法,初始化數據引用。

e3af66e8-3733-11ed-ba43-dac502259ad0.png

8.8、創建Dispose Variable方法,銷毀其數據引用。

e3d52b94-3733-11ed-ba43-dac502259ad0.png

先創建終結表達式的成員方法:

9、在Double T中添加數值控件并創建其數據成員訪問、重寫Double T父類方法Interpert(Info)和Tostring(),先在表達式尋找是否存在,如果存在則為變量,不存在則為常量。

e3f5513a-3733-11ed-ba43-dac502259ad0.png

e415942c-3733-11ed-ba43-dac502259ad0.png

e433e576-3733-11ed-ba43-dac502259ad0.png

10、在String T中添加字符控件并創建其數據成員訪問、重寫Double T父類方法Interpert(Info)和Tostring()。

e454a374-3733-11ed-ba43-dac502259ad0.png

e465ad40-3733-11ed-ba43-dac502259ad0.png

e485bc8e-3733-11ed-ba43-dac502259ad0.png

11、在ADD的私有數據中添加三個AbstractExpression命名為x,y,Result并創建其數據成員訪問,三個數據分別表示計算輸入和輸出結果。然后重寫Interpert(Info)和Tostring()。

e497e4b8-3733-11ed-ba43-dac502259ad0.png

e4abbd26-3733-11ed-ba43-dac502259ad0.png

11、在SUB的私有數據中添加三個AbstractExpression命名為x,y,Result并創建其數據成員訪問,三個數據分別表示計算輸入和輸出結果。然后重寫Interpert(Info)和Tostring()。

e4d13f2e-3733-11ed-ba43-dac502259ad0.png

e4e93606-3733-11ed-ba43-dac502259ad0.png

12、重寫Show Variable的動態方法,如果是變量就對變量執行Tostring操作然后顯示,如果不是就直接顯示。

e5142bea-3733-11ed-ba43-dac502259ad0.png

e5352bc4-3733-11ed-ba43-dac502259ad0.png

下邊使用使用上邊的類編寫運行代碼:

13、創建一個VI命名為Example,放置Context、double T、String T、ADD、SUB、Show Variable。如下圖連線,其中a、b、c為double T。e55a3dd8-3733-11ed-ba43-dac502259ad0.png

14、創建一個字符串顯示控件,創建其引用設置到Context中,在后端添加Do Interpert和文本表達式后,在前后添加創建和銷毀引用方法。文本注釋:

ADD,100,10,a//a=100+10

Show,ADD//顯示ADD的計算過程

Show,a//顯示參數a的值

SUB,a,b,c//c=a+b

Show,SUB//顯示SUB的計算過程

Show,c//顯示參數c的值

e572fba2-3733-11ed-ba43-dac502259ad0.png

15、下邊圖片是輸出結果:

e583eee4-3733-11ed-ba43-dac502259ad0.png

小結:上面的代碼完全實現了開始的設想,運行時將文本表達式翻譯成代碼執行結果,將結果保存到定義的變量中。

上面代碼還存在一些問題:

1、當函數輸入錯誤時的處理;

2、參數輸入錯誤的處理,參數的表達式定義;

3、邏輯控制 if for call SubContext。

本文是自動化測試架構的核心內容,本來想放到Pro里講解,但是覺得沒意義,直接在這里寫完,Pro里會有部分優秀的設計加進去完善部分功能,這個也是我寫文章的核心宗旨:寫一些有用的設計,而且可以幫助讀者實際工作中應用,不會只講大道理。

審核編輯:彭靜

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 軟件
    +關注

    關注

    69

    文章

    4799

    瀏覽量

    87175
  • 腳本語言
    +關注

    關注

    0

    文章

    48

    瀏覽量

    8211
  • 工具包
    +關注

    關注

    0

    文章

    46

    瀏覽量

    9525
  • 解釋器
    +關注

    關注

    0

    文章

    103

    瀏覽量

    6499

原文標題:LabVIEW的編程之道—解釋器模式

文章出處:【微信號:LabVIEW的編程之道,微信公眾號:LabVIEW的編程之道】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    請教高手LabSQL工具包如何安裝

    請教高手LabSQL工具包如何安裝
    發表于 11-15 19:35

    報表生成與數據存儲是包含幾個工具包

    這個報表生成與數據存儲工具包需要把數據庫連接工具包,因特網工具包還有報告生成工具包安裝上嗎
    發表于 03-26 11:29

    labview工具包安裝問題

    新手一枚,請教一下下完了工具包具體安裝到哪里,如何使用?
    發表于 08-29 21:55

    2012工具包安裝問題

    安裝了控制設計與仿真工具包然后用注冊機激活了為何在控件中還是顯示空白?
    發表于 11-04 20:18

    labview做報表,工具包安裝問題

    `本人剛接觸labview報表。我的labview2012紅圈部分沒有,是不是就是沒有安裝這個報表生成工具包造成的啊?`
    發表于 05-04 17:34

    labview DSC工具包無法安裝

    labview DSC工具包無法安裝,提示我沒有安裝labview,我已經正確安裝并激活了的呀。求解呀無法
    發表于 06-05 17:17

    如何訪問已與eIQ工具包一起安裝的python版本?

    我正在嘗試在遠程 SSH 板上安裝 eIQ 工具包,DEBIX Model A 板具有 I.MX 8M Plus EdgeVerse 處理和 Ubuntu 20.04。 我下載了 eIQ
    發表于 06-07 06:46

    固件工具包

    固件工具包 修改工具包 高興向大家公布這個信息! 首先介紹一下這個工具地用途: 1、修改固件 - 通過此工具能夠修改固件中絕大多數地信息及配置。 2、...
    發表于 03-16 14:49 ?71次下載

    MATLAB 2016a 工具包中-英對照

    MATLAB 2016a 工具包中-英對照 方便安裝MATLAB的時候選擇需要工具,以節省安裝所需的磁盤大小
    發表于 04-20 08:58 ?42次下載

    LTC2937-軟件開發工具包

    LTC2937-軟件開發工具包
    發表于 05-31 20:57 ?6次下載
    LTC2937-<b class='flag-5'>軟件開發工具包</b>

    如何在arduino IDE上安裝STM32的開發板工具包

    如何在arduino IDE上安裝STM32的開發板工具包
    發表于 11-01 17:51 ?3次下載

    LabVIEW AI視覺工具包(非NI Vision)下載與安裝教程

    LabVIEW AI視覺工具包(非NI Vision)下載與安裝教程
    的頭像 發表于 02-20 18:21 ?3753次閱讀
    LabVIEW AI視覺<b class='flag-5'>工具包</b>(非NI Vision)下載與<b class='flag-5'>安裝</b>教程

    iSCSI驅動工具包

    電子發燒友網站提供《iSCSI驅動工具包.exe》資料免費下載
    發表于 08-01 14:43 ?0次下載
    iSCSI驅動<b class='flag-5'>器</b><b class='flag-5'>工具包</b>

    OneInstall工具包

    電子發燒友網站提供《OneInstall工具包.exe》資料免費下載
    發表于 08-18 14:54 ?0次下載
    OneInstall<b class='flag-5'>工具包</b>

    OneCore存儲軟件開發工具包(SDK)

    電子發燒友網站提供《OneCore存儲軟件開發工具包(SDK).pdf》資料免費下載
    發表于 08-22 14:53 ?0次下載
    OneCore存儲<b class='flag-5'>軟件開發工具包</b>(SDK)