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