在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

DSL模板怎么動(dòng)起來(lái)的?

汽車(chē)電子技術(shù) ? 來(lái)源:程序猿搬磚 ? 作者:壞人 ? 2023-03-03 10:17 ? 次閱讀

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

跨平臺(tái)模板需要根據(jù)不同的規(guī)則得到不同的展示結(jié)果,這就需要對(duì)數(shù)據(jù)進(jìn)行運(yùn)算。

一開(kāi)始是考慮使用一門(mén)腳本語(yǔ)言來(lái)實(shí)現(xiàn)數(shù)據(jù)的運(yùn)算,如javascript通過(guò)嵌入的js引擎如QuickJS來(lái)執(zhí)行JS腳本語(yǔ)言達(dá)到數(shù)據(jù)運(yùn)算的結(jié)果。

但考慮到運(yùn)算表達(dá)式的要求沒(méi)有那么復(fù)雜,加之以前對(duì)編譯器前端技術(shù)的了解也沒(méi)有一個(gè)合適的場(chǎng)景去落地。剛好有這么一個(gè)契機(jī),就打算自己實(shí)現(xiàn)一個(gè)DSL來(lái)運(yùn)算模板中的動(dòng)態(tài)數(shù)據(jù)。

二、思路與原理

實(shí)現(xiàn)一個(gè)DSL有幾個(gè)步驟:

第一步: 詞法分析

第二步: 語(yǔ)法分析

第三步: 語(yǔ)義分析

在詞法分析的時(shí)候,需要用到一種叫 有限自動(dòng)機(jī) 的一個(gè)計(jì)算機(jī)模型。

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

詞法分析完成之后,開(kāi)始進(jìn)行語(yǔ)法分析。與詞法分析一樣,按我們指定的規(guī)則將一個(gè)或多個(gè)Token組合在一起形成一個(gè)一個(gè)的表達(dá)式。

比如加減乘除表達(dá)未,比較表達(dá)未,三目運(yùn)算表達(dá)式。通過(guò)指定運(yùn)算符之前的優(yōu)先級(jí)與左右結(jié)合優(yōu)先級(jí),最后生成一個(gè)樹(shù),我們叫它抽象語(yǔ)法樹(shù)(AST). 通過(guò)對(duì)AST進(jìn)行深度優(yōu)先遍歷,得到最終表達(dá)式的結(jié)果。

當(dāng)前的DSL并不是一個(gè)完整的腳本語(yǔ)言,我們按需要實(shí)現(xiàn)特定的運(yùn)算功能即可。、

有了這些表達(dá)式,我們就可以實(shí)現(xiàn)數(shù)據(jù)的動(dòng)態(tài)計(jì)算綁定,但這還不夠。最基礎(chǔ)的版本至少還需要實(shí)現(xiàn)類(lèi)似vue或者微信小程序中的for與if語(yǔ)句。

最終我們將呈現(xiàn)如下的DSL模板語(yǔ)言:

<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>

通過(guò)這個(gè)布局模板我們要得到什么樣的結(jié)果呢?

1.label1 標(biāo)簽中的text運(yùn)算得到最終顯示的結(jié)果,而a 與 b則是我們上下文中給定的變量或者是字典中的key

2.label2 通過(guò)計(jì)算if中的表達(dá)式得到此Label是否需要顯示

3.label3 則通過(guò)循環(huán)items得到多個(gè)標(biāo)簽

通過(guò)自定義DSL我們可以按我們自己的指定的規(guī)則來(lái)計(jì)算出想要的各種表達(dá)式了。

接下來(lái),我們就從第一步詞法分析開(kāi)始吧。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7241

    瀏覽量

    91023
  • JS
    JS
    +關(guān)注

    關(guān)注

    0

    文章

    78

    瀏覽量

    18399
  • javascript
    +關(guān)注

    關(guān)注

    0

    文章

    525

    瀏覽量

    54511
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    讓PMSM簡(jiǎn)單的動(dòng)起來(lái)的話,需要調(diào)用哪些頭文件?

    讓PMSM簡(jiǎn)單的動(dòng)起來(lái)的話,需要調(diào)用那些頭文件,最好解釋下作用。手頭有控制器,但代碼太多是在看不明白。先謝過(guò)各位大佬了
    發(fā)表于 04-26 07:34

    如何用STM32F051把開(kāi)關(guān)磁阻電機(jī)驅(qū)動(dòng)起來(lái)?。?/a>

    什么樣的PWM波形呢?有沒(méi)有大神指導(dǎo)一下啊~只要動(dòng)起來(lái)就行,不需要閉環(huán)什么的呢,求程序啊啊啊
    發(fā)表于 05-07 06:32

    請(qǐng)問(wèn)怎么使無(wú)刷電機(jī)動(dòng)起來(lái),就單單動(dòng)起來(lái)

    本人是51單片機(jī)學(xué)習(xí)者,剛剛接觸無(wú)刷電機(jī),但是連怎么讓它動(dòng)起來(lái)都搞不明白,各位可以分享一下嗎?不勝感激啊,我現(xiàn)在就想讓它動(dòng)起來(lái)先而已
    發(fā)表于 04-24 00:55

    【Landzo C1試用體驗(yàn)】+第二篇 :動(dòng)起來(lái),生活才更精彩!

    經(jīng)過(guò)不懈努力,終于完善了組裝,現(xiàn)在可以上機(jī)器人小車(chē)動(dòng)起來(lái)了,動(dòng)起來(lái),才有美感家成就感。下面上圖,本來(lái)要上傳視頻的,但是不怎么到怎么弄,要先傳到優(yōu)酷,在鏈接網(wǎng)址好像。下次有空再搞視頻上傳。在這里說(shuō)兩個(gè)
    發(fā)表于 06-02 18:55

    怎么把自定義時(shí)間像時(shí)鐘一樣動(dòng)起來(lái)

    自定義之后的時(shí)間就停在定的時(shí)間那 不會(huì)像時(shí)鐘一樣動(dòng)起來(lái) 怎么加循環(huán)讓它動(dòng)起來(lái)
    發(fā)表于 09-06 16:48

    如何讓智能小車(chē)動(dòng)起來(lái)?怎樣去編寫(xiě)其程序?

    如何讓智能小車(chē)動(dòng)起來(lái)?怎樣去編寫(xiě)其程序?怎樣去選擇智能小車(chē)的硬件?智能小車(chē)的硬件是如何進(jìn)行連接的?如何從零開(kāi)始用51單片機(jī)去實(shí)現(xiàn)智能小車(chē)的控制?
    發(fā)表于 07-14 06:48

    如何讓無(wú)刷直流電動(dòng)機(jī)動(dòng)起來(lái)

    如何安排PWM序列極對(duì)數(shù)是4的電機(jī)的定轉(zhuǎn)子磁極排布式如何的呢?如何讓無(wú)刷直流電動(dòng)機(jī)動(dòng)起來(lái)?有哪些步驟?
    發(fā)表于 08-03 06:48

    如何從零開(kāi)始制作51單片機(jī)控制的智能小車(chē)讓它動(dòng)起來(lái)?

    如何從零開(kāi)始制作51單片機(jī)控制的智能小車(chē)讓它動(dòng)起來(lái)
    發(fā)表于 10-21 07:43

    Debian69系統(tǒng)啟動(dòng)起來(lái)有點(diǎn)卡怎么解決?

    Debian 69系統(tǒng)啟動(dòng)起來(lái)有點(diǎn)卡
    發(fā)表于 09-12 07:50

    蘋(píng)果新機(jī)拉貨PCB軟板雙雄動(dòng)起來(lái)

    蘋(píng)果新機(jī)預(yù)計(jì)9月上市,相關(guān)供應(yīng)鏈已經(jīng)開(kāi)始動(dòng)起來(lái),PCB軟板雙雄臻鼎-KY、臺(tái)郡一致表示,隨著大客戶新機(jī)拉貨,營(yíng)運(yùn)自7月起增溫,并可望一路旺到11月左右,但仍需關(guān)注美中貿(mào)易戰(zhàn)對(duì)客戶拉貨與終端市場(chǎng)買(mǎi)氣的影響。
    的頭像 發(fā)表于 07-11 17:17 ?3270次閱讀

    讓汽車(chē)儀表組上的指針動(dòng)起來(lái)

    讓汽車(chē)儀表組上的指針動(dòng)起來(lái)
    發(fā)表于 10-31 08:23 ?0次下載
    讓汽車(chē)儀表組上的指針<b class='flag-5'>動(dòng)起來(lái)</b>

    你知道操作系統(tǒng)是如何啟動(dòng)起來(lái)的嗎

    操作系統(tǒng)被稱為“第一個(gè)程序”,the first programme,原因很簡(jiǎn)單,只有當(dāng)操作系統(tǒng)啟動(dòng)起來(lái)后才能運(yùn)行我們編寫(xiě)的程序,那么你有沒(méi)有想過(guò)這個(gè)問(wèn)題:操作系統(tǒng)是怎樣啟動(dòng)起來(lái)的呢? 實(shí)際上這個(gè)過(guò)程就像發(fā)射火箭一樣有趣 ,看完這篇你就明白啦。
    的頭像 發(fā)表于 03-31 15:45 ?1045次閱讀
    你知道操作系統(tǒng)是如何啟<b class='flag-5'>動(dòng)起來(lái)</b>的嗎

    BeagleBone AI-64、Servo Cape和讓電機(jī)動(dòng)起來(lái)

    電子發(fā)燒友網(wǎng)站提供《BeagleBone AI-64、Servo Cape和讓電機(jī)動(dòng)起來(lái).zip》資料免費(fèi)下載
    發(fā)表于 07-12 10:51 ?0次下載
    BeagleBone AI-64、Servo Cape和讓電機(jī)<b class='flag-5'>動(dòng)起來(lái)</b>

    步進(jìn)電機(jī)如何讓動(dòng)起來(lái)?步進(jìn)電機(jī)轉(zhuǎn)動(dòng)原理

    42步進(jìn)電機(jī)的步距角為1.8°,是由定子和轉(zhuǎn)子的齒數(shù)共同決定的,定子有48齒,轉(zhuǎn)子有50齒,具體是怎么算的,感興趣的同學(xué)可以自行學(xué)習(xí),今天的重點(diǎn)是讓步進(jìn)電機(jī)如何讓動(dòng)起來(lái)。
    發(fā)表于 04-01 10:40 ?3776次閱讀
    步進(jìn)電機(jī)如何讓<b class='flag-5'>動(dòng)起來(lái)</b>?步進(jìn)電機(jī)轉(zhuǎn)動(dòng)原理

    e絡(luò)盟互動(dòng)社區(qū)發(fā)起“動(dòng)起來(lái)”設(shè)計(jì)大賽

    安富利旗下全球電子元器件產(chǎn)品與解決方案分銷(xiāo)商e絡(luò)盟發(fā)起了“Start a Movement動(dòng)起來(lái)”設(shè)計(jì)挑戰(zhàn)賽,將選出 20 名工程師構(gòu)建包含運(yùn)動(dòng)組件的自選項(xiàng)目。20名挑戰(zhàn)者將獲得由Analog
    的頭像 發(fā)表于 09-23 10:30 ?506次閱讀
    e絡(luò)盟互動(dòng)社區(qū)發(fā)起“<b class='flag-5'>動(dòng)起來(lái)</b>”設(shè)計(jì)大賽
    主站蜘蛛池模板: 国产黄色在线网站 | 岛国毛片 | susu成人影院 | 亚洲日本视频 | 曰本女人色黄网站 | 综合色久七七综合七七蜜芽 | 黄色国产| 欧美日韩不卡码一区二区三区 | 亚洲成在人线影视天堂网 | 好大好硬好爽免费视频 | 免费福利片2022潦草影视午夜 | 永久免费看mv网站入口 | 高清午夜线观看免费 | 午夜影院免费观看视频 | 亚洲成年人在线 | 免费在线看黄色 | 午夜爽爽| 操碰视频在线 | 国产亚洲一区二区三区在线 | 免费日韩三级 | 人人爱天天做夜夜爽毛片 | 国产在线播放你懂的 | 亚洲一在线 | 四虎影院视频在线观看 | 日本三级午夜 | 一色屋免费视频 | 四虎永久免费地址 | 国产一区二区三区影院 | 国产一级特黄特色aa毛片 | 欧美性一区 | 一级黄色录像视频 | 欧美黄色成人 | 午夜影院免费视频 | 国产精品臀控福利在线观看 | 手机看片福利视频 | 天天搞夜夜爽 | 国产欧美日韩综合精品一区二区 | 侵犯希崎中文字幕在线 | 日韩一卡2卡三卡4卡无卡网站 | 丁香花在线观看免费观看 | 午夜在线看片 |