逻辑表达式解析器

逻辑表达式解析器今日38,百竿子打不找的干系,居然有点郁闷,k!无聊,写点东西以备急需之用,出发点为jsp权限标签使用。 逻辑表达式解析器 Author: zfzheng  2008-03-08 作用:         用于内嵌逻辑表达式,如             JSP标签:                1)分页信息                     x:page footable=”p

大家好,欢迎来到IT知识分享网。

今日38,百竿子打不找的干系,居然有点郁闷,k!

无聊,写点东西以备急需之用,出发点为jsp权限标签使用。 

逻辑表达式解析器
逻辑表达式解析器 
逻辑表达式解析器Author: zfzheng  2008-03-08
逻辑表达式解析器
逻辑表达式解析器 作用:
逻辑表达式解析器         用于内嵌逻辑表达式,如
逻辑表达式解析器             JSP标签:
逻辑表达式解析器                1)分页信息
逻辑表达式解析器                     

<
x:page 
footable
=”pageCount>0″
>

</
x:page
>

逻辑表达式解析器                 2)权限值大于普通用户,且不是管理员。
逻辑表达式解析器                     

<
x:auth 
role
=”user>normal&&user!=admin”
>

</
x:auth
>

逻辑表达式解析器 
逻辑表达式解析器 操作数及操作类型:
逻辑表达式解析器        1)数值(整型、浮点型): == > >= 

<
 <= <
>
/!=
逻辑表达式解析器        2)boolean: && || !
逻辑表达式解析器        java对象:Express、boolean、String、int/float
逻辑表达式解析器 
逻辑表达式解析器 逻辑表达式文法:
逻辑表达式解析器      expx -> exp {op expx}
逻辑表达式解析器         exp ->  tag | “(” expx “)” | op expx
逻辑表达式解析器         op -> == | > | >= | 

<
 | <= | <
>
 | != | && | || | !
逻辑表达式解析器         tag -> boolean | number | {text}+
逻辑表达式解析器      boolean -> true | false
逻辑表达式解析器      number -> [0-9]+(.[0-9]+)? 
逻辑表达式解析器      text -> charset
逻辑表达式解析器  
逻辑表达式解析器  expx与exp使用同一java对象,文法抽出来的原因:1)支持连续表达式 2)避免左递归 
逻辑表达式解析器  
逻辑表达式解析器【代码注解】
逻辑表达式解析器分析器:Lexer、ExpressParser
逻辑表达式解析器语法树对象:Express、Operation
逻辑表达式解析器执行辅助类:EvalCommand、ValueProvider
逻辑表达式解析器
逻辑表达式解析器1.ExpressParser:按文法描述编写
逻辑表达式解析器2.Express:
逻辑表达式解析器    二目操作,单目(!)操作左操作数为空。
逻辑表达式解析器    (expx)表达式根节点,只有左操作树,op、右操作数为空。
逻辑表达式解析器    求值遍历顺序:    采用LTR(左中右),注意左节点的值,先递归再参与运算。遇到聚合节点,即刮号表达式根节点,则断开当前递归优先求值。
逻辑表达式解析器    提供eval求指方法。
逻辑表达式解析器3.Operation:操作符对象,使用单子模式,操作数延迟到方法参数,节约内存。
逻辑表达式解析器4.EvalCommand:求值命令,Express#eval中创建,Operation#eval中执行。
逻辑表达式解析器    该类作用:延迟求值,避免不必要的计算,如true||exp,则exp不求值。
逻辑表达式解析器5.ValueProvider:变量提供者,方便集成使用。
逻辑表达式解析器
    
public
 
void
 testLogic() 
throws
 Exception {

        ExpressParser ep 

=
 
new
 ExpressParser();
        String s 

=
 

user>normal&&user!=admin

;
        Express e 

=
 ep.parse(s);
        StaticValueProvider vp 

=
 
new
 StaticValueProvider();
        vp.setValue(


admin


10
);
        vp.setValue(


normal


1
);

        vp.setValue(

user


5
);
        Object ret 

=
 e.eval(vp);
        assertEquals(

true
, ret);

        vp.setValue(

user


10
);
        ret 

=
 e.eval(vp);
        assertEquals(

false
, ret);
    }

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/22610.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信