那曲檬骨新材料有限公司

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

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

3天內不再提示

DSL模板怎么動起來的?

汽車電子技術 ? 來源:程序猿搬磚 ? 作者:壞人 ? 2023-03-03 10:17 ? 次閱讀

一、為什么要使用到編譯器前端技術?

跨平臺模板需要根據不同的規則得到不同的展示結果,這就需要對數據進行運算。

一開始是考慮使用一門腳本語言來實現數據的運算,如javascript通過嵌入的js引擎如QuickJS來執行JS腳本語言達到數據運算的結果。

但考慮到運算表達式的要求沒有那么復雜,加之以前對編譯器前端技術的了解也沒有一個合適的場景去落地。剛好有這么一個契機,就打算自己實現一個DSL來運算模板中的動態數據。

二、思路與原理

實現一個DSL有幾個步驟:

第一步: 詞法分析

第二步: 語法分析

第三步: 語義分析

在詞法分析的時候,需要用到一種叫 有限自動機 的一個計算機模型。

它通過在不同狀態之間的遷移變換分析我們給定的字符串中的詞語(Token),將字符串按我們指定的規則切分成多個Token。

詞法分析完成之后,開始進行語法分析。與詞法分析一樣,按我們指定的規則將一個或多個Token組合在一起形成一個一個的表達式。

比如加減乘除表達未,比較表達未,三目運算表達式。通過指定運算符之前的優先級與左右結合優先級,最后生成一個樹,我們叫它抽象語法樹(AST). 通過對AST進行深度優先遍歷,得到最終表達式的結果。

當前的DSL并不是一個完整的腳本語言,我們按需要實現特定的運算功能即可。、

有了這些表達式,我們就可以實現數據的動態計算綁定,但這還不夠。最基礎的版本至少還需要實現類似vue或者微信小程序中的for與if語句。

最終我們將呈現如下的DSL模板語言:

<View>
  <Label id="label1" text="{{ a * b > 100 ? "a * b比100大" : "a * b比100小"  }}">class="hljs-keyword"Label>
  <Label id="label2" if="{{ a > b }}">class="hljs-keyword"Label>
  <Label id="label3" for="item in items" text="item.name">class="hljs-keyword"Label>
class="hljs-keyword"View>

通過這個布局模板我們要得到什么樣的結果呢?

1.label1 標簽中的text運算得到最終顯示的結果,而a 與 b則是我們上下文中給定的變量或者是字典中的key

2.label2 通過計算if中的表達式得到此Label是否需要顯示

3.label3 則通過循環items得到多個標簽

通過自定義DSL我們可以按我們自己的指定的規則來計算出想要的各種表達式了。

接下來,我們就從第一步詞法分析開始吧。

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

    關注

    8

    文章

    7139

    瀏覽量

    89573
  • JS
    JS
    +關注

    關注

    0

    文章

    78

    瀏覽量

    18176
  • javascript
    +關注

    關注

    0

    文章

    525

    瀏覽量

    53945
收藏 人收藏

    評論

    相關推薦

    讓PMSM簡單的動起來的話,需要調用哪些頭文件?

    讓PMSM簡單的動起來的話,需要調用那些頭文件,最好解釋下作用。手頭有控制器,但代碼太多是在看不明白。先謝過各位大佬了
    發表于 04-26 07:34

    如何用STM32F051把開關磁阻電機驅動起來啊?

    什么樣的PWM波形呢?有沒有大神指導一下啊~只要動起來就行,不需要閉環什么的呢,求程序啊啊啊
    發表于 05-07 06:32

    請問怎么使無刷電機動起來,就單單動起來

    本人是51單片機學習者,剛剛接觸無刷電機,但是連怎么讓它動起來都搞不明白,各位可以分享一下嗎?不勝感激啊,我現在就想讓它動起來先而已
    發表于 04-24 00:55

    【Landzo C1試用體驗】+第二篇 :動起來,生活才更精彩!

    經過不懈努力,終于完善了組裝,現在可以上機器人小車動起來了,動起來,才有美感家成就感。下面上圖,本來要上傳視頻的,但是不怎么到怎么弄,要先傳到優酷,在鏈接網址好像。下次有空再搞視頻上傳。在這里說兩個
    發表于 06-02 18:55

    怎么把自定義時間像時鐘一樣動起來

    自定義之后的時間就停在定的時間那 不會像時鐘一樣動起來 怎么加循環讓它動起來
    發表于 09-06 16:48

    如何讓智能小車動起來?怎樣去編寫其程序?

    如何讓智能小車動起來?怎樣去編寫其程序?怎樣去選擇智能小車的硬件?智能小車的硬件是如何進行連接的?如何從零開始用51單片機去實現智能小車的控制?
    發表于 07-14 06:48

    如何讓無刷直流電動機動起來

    如何安排PWM序列極對數是4的電機的定轉子磁極排布式如何的呢?如何讓無刷直流電動機動起來?有哪些步驟?
    發表于 08-03 06:48

    如何從零開始制作51單片機控制的智能小車讓它動起來

    如何從零開始制作51單片機控制的智能小車讓它動起來
    發表于 10-21 07:43

    Debian69系統啟動起來有點卡怎么解決?

    Debian 69系統啟動起來有點卡
    發表于 09-12 07:50

    蘋果新機拉貨PCB軟板雙雄動起來

    蘋果新機預計9月上市,相關供應鏈已經開始動起來,PCB軟板雙雄臻鼎-KY、臺郡一致表示,隨著大客戶新機拉貨,營運自7月起增溫,并可望一路旺到11月左右,但仍需關注美中貿易戰對客戶拉貨與終端市場買氣的影響。
    的頭像 發表于 07-11 17:17 ?3166次閱讀

    讓汽車儀表組上的指針動起來

    讓汽車儀表組上的指針動起來
    發表于 10-31 08:23 ?0次下載
    讓汽車儀表組上的指針<b class='flag-5'>動起來</b>

    你知道操作系統是如何啟動起來的嗎

    操作系統被稱為“第一個程序”,the first programme,原因很簡單,只有當操作系統啟動起來后才能運行我們編寫的程序,那么你有沒有想過這個問題:操作系統是怎樣啟動起來的呢? 實際上這個過程就像發射火箭一樣有趣 ,看完這篇你就明白啦。
    的頭像 發表于 03-31 15:45 ?849次閱讀
    你知道操作系統是如何啟<b class='flag-5'>動起來</b>的嗎

    BeagleBone AI-64、Servo Cape和讓電機動起來

    電子發燒友網站提供《BeagleBone AI-64、Servo Cape和讓電機動起來.zip》資料免費下載
    發表于 07-12 10:51 ?0次下載
    BeagleBone AI-64、Servo Cape和讓電機<b class='flag-5'>動起來</b>

    步進電機如何讓動起來?步進電機轉動原理

    42步進電機的步距角為1.8°,是由定子和轉子的齒數共同決定的,定子有48齒,轉子有50齒,具體是怎么算的,感興趣的同學可以自行學習,今天的重點是讓步進電機如何讓動起來
    發表于 04-01 10:40 ?2724次閱讀
    步進電機如何讓<b class='flag-5'>動起來</b>?步進電機轉動原理

    e絡盟互動社區發起“動起來”設計大賽

    安富利旗下全球電子元器件產品與解決方案分銷商e絡盟發起了“Start a Movement動起來”設計挑戰賽,將選出 20 名工程師構建包含運動組件的自選項目。20名挑戰者將獲得由Analog
    的頭像 發表于 09-23 10:30 ?367次閱讀
    e絡盟互動社區發起“<b class='flag-5'>動起來</b>”設計大賽
    百家乐官网平注法到656| 新邵县| 皇冠现金网怎么样| 大发888大发娱乐场| 威尼斯人娱乐场积分| 迪士尼百家乐的玩法技巧和规则 | 一直对百家乐很感兴趣.zibo太阳城娱乐城 | 本溪市| 百家乐官网信誉平台开户| 百家乐官网路单网下载| 网上百家乐官网有假的吗| 真人百家乐官网试玩账号| 百家乐官网實戰後二穩賺| 百家乐官网机械图片| 百家乐官网缩水| 百家乐开户送8彩金| 百家乐长庄投注| 大发888娱乐城充值| 圣淘沙娱乐| 灵寿县| 百家乐官网赌法| 找真人百家乐官网的玩法技巧和规则 | 什么是百家乐的大路| 战神百家乐的玩法技巧和规则 | 百家乐官网的庄闲概率| 百家乐倍投| 合乐娱乐| 澳门百家乐官网娱乐城注册 | 大发888娱乐城动态| 梅州市| 百家乐官网游戏网上投注| 百家乐冯耕耘打法| 百家乐唯一能长期赢钱的方法| 百利宫娱乐城官方网| 澳门百家乐官网赢技巧| 苹果百家乐官网的玩法技巧和规则| 哪里有百家乐赌博网站| 大发888娱乐城亚付宝| 百家乐官网如何计牌| 互博百家乐官网的玩法技巧和规则| 百家乐折叠桌|