五行通天地 八卦定乾坤--打算按照先天八卦的形制重构Lite模版引擎的指令集...
周末對 XML Lite 的源碼做了一些重構(gòu),做著做著一個更大一點的想法出來了,現(xiàn)在那些指令集,用先天八卦的方式重新組織一下,一定有點意思。先吧想法寫下來,順便整理一下思路。
?
這里說的是Lite的指令集,不是Lite XML的用法。當需要設(shè)計自己的模版語法時需要了解的內(nèi)容。
?
?
五行通天地:處理表達式邏輯
?
?
表達式指令分兩部分:數(shù)據(jù)指令和運算指令
數(shù)據(jù)指令分以下五種類別
- 變量類型:
表達式渲染時傳入的對象的屬性(或者map的鍵值),都可以映射到模版的變量中。
- 常量類型:
表達式中的字面量 - 延遲節(jié)點:
對于一些需要短路運算的操作(與或短路,三目運算),需要引入延遲計算的節(jié)點,來支持這類運算。 - 新數(shù)組節(jié)點:
用于創(chuàng)建一個新數(shù)組,或者函數(shù)調(diào)用參數(shù)列表(JS中的數(shù)組對象),這種類型可以歸為操作類,但是JSEL將其提升為數(shù)據(jù)類型。 - 新鍵值集合節(jié)點:
用于構(gòu)造一個新Map對象,類似JS中的object對象。
例如:
${[1,var1,2,3,"end"]}
涉及到的數(shù)據(jù)指令有:
新數(shù)組指令,變量指令(var1),常量指令(1,2,3,"end")
運算指令分按優(yōu)先級分九重
(九組二十三條指令)。
?
- 指令編碼設(shè)計:
操作符指令分三斷:
000 1000 1
組內(nèi)編號|優(yōu)先級編號|操作元素個數(shù)標記 - 操作元素個數(shù)標記:
二元操作符號為1,一元運算符為0 - 優(yōu)先級編號
安高低順序重8-0共有9個等級 - 組內(nèi)編號
最前面若干位表示該運算符所在的組內(nèi)編號,確保唯一。
表達式解析過程和內(nèi)部表示方法
表達式解析時,按照逆波蘭式解析成單棧數(shù)據(jù),每個數(shù)據(jù)項可以是上述五種基本數(shù)據(jù)元素或者哪九組操作符號。
運算過程,無須考慮優(yōu)先級,且保持單棧的運算模型
?
?
八卦定乾坤:處理模版指令集合
?
天地定位:
乾南坤北,天居上,地居下,南北對峙,上下相對。
乾是三陽爻組成,對應數(shù)字為:111=7;
坤是三陰爻組成,對應數(shù)字為:000=0;
坤卦對應的模版指令類別為:EL 表達式。
這是模版的基礎(chǔ),所有的動態(tài)數(shù)據(jù)都是通過EL獲取的。
乾卦對應的模版指令類別為 :ADDON( 插件)。
當其他模版指令無法支持你需要的功能時,考慮使用,但是高處不勝寒,少用為妙。
山澤相離:
艮為山居西北,兌為澤居東南。
艮是一陽爻在上,二陰爻在下,對應數(shù)字為:001=1;
兌是一陰爻在上,二陽爻在下,對應數(shù)字為:110=6;
艮卦對應的指令類別:if 。
兌卦對應的指令類別:else 。
雷風相薄:
震為雷居東北,巽為風居西南。
震是二陰爻在上,一陽爻在下,對應數(shù)字為:100=4;
巽是二陽爻在上,一陰爻在下,對應數(shù)字為:011=3;
震卦對應的指令類別:XML屬性表達式 XML_TEXT 。
巽卦對應的指令類別: XML文本表達式 XML_ATTR 。
這是專門為XML語法設(shè)置的模版指令,
這些指令根據(jù)原始數(shù)據(jù)和XML語法約束,可以比較智能的輸出期望數(shù)據(jù)(如屬性輸出時的自動判斷)。
自動化的編碼處理,避免一些用戶粗心而導致的XSS漏洞。
水火不融:
離為日居東,坎為月居西;離為火,坎為水。
離是上下為陽爻,中間為陰爻,對應數(shù)字為:101=5;
坎是上下為陰爻,中間為陽爻,對應數(shù)字為:010=2;
坎卦對應的指令類別:for 。
坎卦對應的指令類別:break 。
水可滅火,當你需喲跳出循環(huán),那就break吧。
兩個編外元素:
變量申明(1000=8)內(nèi)容捕捉(1001=9)
兩者都可以在運行時產(chǎn)生變量數(shù)據(jù),提供給其他模版指令使用,就把他們放在八卦中央吧。
總結(jié)
以上是生活随笔為你收集整理的五行通天地 八卦定乾坤--打算按照先天八卦的形制重构Lite模版引擎的指令集...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WINDOWS系统进程查询
- 下一篇: java实现断点续播_vue-video