浏览 2622 次
锁定老帖子 主题:一个 EL语法二义性的问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-03
最后修改:2008-11-04
JSEL语法。想去支持静态函数调用。想到JSP EL中的函数定义方法。
最近一直在琢磨着怎么扩展我的JSP中可以给一批函数,定义在一个命名空间中。调用语法如下。 fn:substr('1234',1,1)//返回'3' 但是JSEL中我已经打算支持直接的全局函数调用,比如我可以直接支持JS中的parseInt,isNaN等全局函数。 如此一来,我需要同时支持两种语法。 parseInt()。 myfn:parseInt()。 如此一来,问题出来了: xxx ? fn:method1() + fn:method(2) 如何解释呢? 语义一: xxx ? fn: method1() + fn:method(2) 语义二: xxx ? fn:method1() + fn :method(2) 都有道理,不知道改如何去做了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-11-08
虽然不是很懂可以关于EL方面在jsp的规范里涉及很多的,你可以读一下的!
|
|
返回顶楼 | |
发表时间:2008-12-25
兄弟大牛,准备一个人做一门语言啊,佩服一下!
|
|
返回顶楼 | |
发表时间:2009-02-04
显然,冒号的overuse是个问题。
有以下几种解决方法: A. 不支持 ? : 运算符 —— JSP就是如此 这个三目运算符其实并不是必须的,去掉它可以大大降低parser的难度。你可以支持if else表达式作为替代,例如: a ? b : c 改为 if(a) b else c B. 将 : 换成 :: —— ES4处理namespace就是如此 但是这改变了JSP用户的习惯 C. 优先按照 ? : 的方式解析,如果需要在 ? : 表达式中使用namespace则要求用括号,否则编译不通过或者扔warning。 即: xxx ? fn:method1() + fn:method(2) 严格模式:编译不通过或者扔运行时异常 宽松模式: 解释为 xxx ? fn : (method1() + fn:method(2)) 要在?:中表示fn:method1,则用户必须写作: xxx ? (fn:method1()) + fn : method(2) D. 严格限制namespace的格式,符合格式的,优先解释为namespace a:b做namespace时,“:”左右不能有空格,并且a、b必须只能是标识符。 E. 假如能支持编译时类型推断,则可以放宽a、b的格式。编译器或解释器预先判断a是否为namespace,假如是namespace则总是按照namespace来处理。一般而言,namespace是静态的,所以可以这样处置,如果你要支持运行时namespace,例如: var my = debug?mock_ns:prod_ns my:method() 则可以要求这个罕见的特例必须写成: var my = debug ? mock_ns : prod_ns 即通过空格来区分。 |
|
返回顶楼 | |
发表时间:2009-02-04
以前考虑过B和C两种模式,但是实现起来都挺麻烦的或者决的不够完美,所以干脆暂时就不支持了。
基于JSEL的模版引擎已经发布了:Lite 该模版引擎有如下特征: 1.基于数组结构的中间代码,可以同时运用于JS,Java,和python三种编程环境 2.默认支持一种XML的源代码格式,编程方式类似于EL+JSP Tag |
|
返回顶楼 | |