`
jindw
  • 浏览: 500786 次
  • 性别: Icon_minigender_1
  • 来自: 初到北京
社区版块
存档分类
最新评论

五行通天地 八卦定乾坤--打算按照先天八卦的形制重构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)
两者都可以在运行时产生变量数据,提供给其他模版指令使用,就把他们放在八卦中央吧。

  • 大小: 16.3 KB
  • 大小: 12.7 KB
12
1
分享到:
评论
13 楼 javatar 2011-04-24  
我觉得从通用语言去思考可能更有意思,满足八封其实就是一个完备集,类似于图灵完备:

(语法)天地定位:expression(地/坤/下/000=0),instruction(天/乾/上/111=7)

(分支)山泽相离:if(山/艮/西北/001=1),else(泽/兑/东南/110=6)

(读写)雷风相薄:set(雷/震/东北/100=4),get(风/巽/西南/011=3)

(循环)水火不融:for(火/离/东/101=5),break(水/坎/西/010=2)
12 楼 seaprince 2009-02-16  
的确非常诡异。先收藏再慢慢研究。
11 楼 8_bit 2009-02-09  
我懂易经 也懂程序,,,以前也有过你的想法,,但是经验少,,还没有将它们融合到一起去,,,其实天下所有知识都是相同的 我的MSN 8_bit@live.cn
10 楼 Ghostbb 2009-02-09  
楼主能解释下八卦和十六卦的区别吗?还有为什么叫先天八卦?十六卦是先天的还是后天的?
9 楼 ylzyd12345 2009-02-09  
牛人看到了!!!
8 楼 jindw 2009-02-09  
kjj 写道

楼主你是我目前见到的最诡异的程序员 ,你的出世必将在程序界引起极大争论,必将引起西方程序界的恐慌!


你已经说的我诚惶诚恐了:(
我还有那么可怕的一面啊 ^_^
7 楼 kjj 2009-02-09  
可以认识你吗,我的    msn:qujiakang@hotmail.com
6 楼 kjj 2009-02-09  
楼主你是我目前见到的最诡异的程序员 ,你的出世必将在程序界引起极大争论,必将引起西方程序界的恐慌!
5 楼 gurudk 2009-02-09  
图片是百度上的,je传图片我觉得也很方便啊
4 楼 bei-jin-520 2009-02-08  
太有才了
3 楼 andot 2009-02-08  
有了图看上去明白多了,哈哈
2 楼 jindw 2009-02-08  
刚传上去。呵呵
1 楼 andot 2009-02-08  
太有意思了,不过图片看不到呢

相关推荐

Global site tag (gtag.js) - Google Analytics