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

一个 EL语法二义性的问题

阅读更多
最近一直在琢磨着怎么扩展我的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)

都有道理,不知道改如何去做了。

分享到:
评论
4 楼 jindw 2009-02-04  
以前考虑过B和C两种模式,但是实现起来都挺麻烦的或者决的不够完美,所以干脆暂时就不支持了。

基于JSEL的模版引擎已经发布了:Lite

该模版引擎有如下特征:
1.基于数组结构的中间代码,可以同时运用于JS,Java,和python三种编程环境
2.默认支持一种XML的源代码格式,编程方式类似于EL+JSP Tag
3 楼 hax 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

即通过空格来区分。


2 楼 linliangyi2007 2008-12-25  
兄弟大牛,准备一个人做一门语言啊,佩服一下!

1 楼 solejava 2008-11-08  
虽然不是很懂可以关于EL方面在jsp的规范里涉及很多的,你可以读一下的!

相关推荐

    EL 表达式 EL-Java

    这里,`${user.name}`就是一个EL表达式,它会自动查找`user`对象并访问其`name`属性,如果`user`为null,EL会自动处理,不会抛出异常。 总结来说,EL是JSP中的一种强大工具,它简化了数据访问和对象操作,使得...

    jsp el表达式详解

    例如, `${users[0].name}` 可以访问用户列表的第一个元素的`name`属性。 **4. EL的函数库** EL提供了多个内建函数,如`fn:length()`可以获取集合的长度,`fn:escapeXml()`用于转义XML特殊字符。这些函数可以极大...

    el表达式说明.pdf

    通过引入一套预定义的对象和语法结构,EL使得开发者无需在JSP页面中频繁地插入Java代码片段(即脚本元素),从而提高了代码的可读性和维护性。 #### 二、EL表达式的语法结构与运算符 ##### 语法结构 EL表达式的...

    EL源代码 java实现

    EL(Expression Language)是Java EE中的一个核心组件,主要用于在JSP、JSF等Web应用程序中简化数据访问和表达式处理。它允许开发者通过简洁的语法来访问和操作Java对象的属性,而无需编写大量的Java脚本或者JSP标签...

    JSTL以及EL表达式所需jar包

    JSTL则是一个标准的JSP标签库,提供了许多预定义的标签,用于执行常见的JSP任务,如迭代、条件判断、XML处理、URL重写等。使用JSTL,开发者可以将业务逻辑从JSP页面转移到标签中,使得页面更加清晰,更符合MVC...

    EL JAR包.rar

    EL(Expression Language)是Java EE(现在称为Jakarta EE)平台中的一个重要组成部分,它是一种用于在JSP(JavaServer Pages)和其他支持EL的环境中表达和评估动态内容的简洁语法。EL提供了一种简单的方式来访问...

    el表达式EL表达式言语和JSTL

    这里的`user`是变量,`name`是该变量的一个属性。EL会自动寻找与`user`对应的JavaBean,并返回其`name`属性的值。EL支持的操作包括算术运算、比较运算、逻辑运算、数组和集合操作等。 **JSTL(JavaServer Pages ...

    JSP EL隐含对象

    out对象是`javax.servlet.jsp.JspWriter`的一个实例,用于输出内容到响应流。例如,`${out.println("Hello, World!")}`将在页面上打印“Hello, World!”。 7. **config对象** config对象提供了关于JSP页面的初始...

    JavaWeb-11 JSP&EL表达式

    1. 简洁性:EL语法简单明了,可以快速访问和操作JavaBean的属性。 2. 动态类型:EL自动处理数据类型的转换,无需显式指定类型。 3. 作用域支持:EL可以直接访问请求、会话、应用等不同级别的作用域。 4. 函数支持:...

    学生管理系统JSTL+EL.zip

    对于初学者来说,掌握一套简单易懂的Web项目框架至关重要,"学生管理系统JSTL+EL.zip" 就是一个很好的学习起点。这个项目运用了JSP(JavaServer Pages)、JSTL(JavaServer Pages Standard Tag Library)和EL...

    el&jstl.pdf

    这里`${bean.property}`就是一个EL表达式,用于获取名为`bean`的对象的`property`属性。 #### 二、JSTL (JavaServer Pages Standard Tag Library) 概述 **2.1 什么是JSTL** JSTL(JavaServer Pages Standard Tag ...

    EL表达式详解-----简单明了

    在这个例子中,`${sampleValue + 1}`是一个EL表达式,它会被JSP引擎解析并执行。假设`sampleValue`的值为整数类型,EL会自动将其转换为数字,并进行加法运算。 #### 二、EL表达式的默认变量 EL表达式中包含了多种...

    JSTL - EL表达式详解

    EL表达式的语法结构非常简洁,通常以`${}`包裹表达式内容。例如,在例1中,`${sampleValue + 1}`会计算`sampleValue`变量加1的结果,并在页面上显示。这个示例适用于支持JSP2.0规范的Web应用服务器。 EL提供的默认...

    JSP2.0-EL 全讲解 共25页

    JSP 2.0(JavaServer Pages 2.0)是Java Web开发中的一个关键组件,它引入了许多增强功能,提升了开发效率和代码的可维护性。EL(Expression Language,表达式语言)是JSP 2.0的一个核心特性,用于简化页面中的数据...

    JSTL & EL 学习笔记

    JSTL与EL是Java Web应用开发中不可或缺的一部分,它们简化了JSP页面的编程,提升了代码的可读性和维护性。 #### JSTL:JavaServer Pages 标准标签库 JSTL是一种用于JSP页面的标准标签库,它提供了一系列预定义的、...

    javascript加号"+"的二义性说明

    以上三种功能使得加号“+”在JavaScript中具有了二义性,因为在对表达式进行语法分析时,无法直接判断加号是用于字符串连接还是数值求和运算。二义性主要存在于字符串连接和数值求和这两种情况下,因为JavaScript...

    JSP 语法 手册 chm

    2. **JSP动作(Actions)**:它们控制JSP引擎执行特定的动作,如`<jsp:include>` 动作用于在编译时合并页面,`<jsp:forward>` 动作将请求转发到另一个资源,`<jsp:useBean>` 用于实例化或查找JavaBean。 3. **脚本...

    El表达式介绍

    **El表达式**是JavaServer Pages (JSP)技术中的一个重要组成部分,它是Expression Language的缩写,用于在JSP页面中简洁地访问和操作Java对象。El表达式旨在提高JSP页面的可读性和可维护性,通过简化对JavaBeans和...

    EL表达式和JSTL标签的应用实例

    在Java Web开发中,EL(Expression Language)表达式和JSTL(JavaServer Pages Standard Tag Library)标签是两个重要的组件,它们极大地简化了页面逻辑,提高了代码的可读性和维护性。下面将详细介绍这两个概念以及...

Global site tag (gtag.js) - Google Analytics