- 浏览: 1704757 次
- 性别:
- 来自: 杭州699号
文章分类
最新评论
-
莫莫摸:
为什么不用dubbo
RCP数据传输模型回顾 -
大胡子爸爸:
String, Class 都实现了Serializable接 ...
RPC框架几行代码就够了 -
lss598018587:
谢谢大神分享,比起新手看复杂的dubbo框架还不如看大神的这一 ...
RPC框架几行代码就够了 -
15606915740:
你好,请问一下。<dubbo:consumer filt ...
Dubbo文档 -
joqk12345:
...
一些设计上的基本常识
CommonTemplate: http://www.commontemplate.org
问题来源:
http://javatar.iteye.com/blog/187669
解决方案:
在core包增加接口, 使外部构建树或表达式简化.
外部构建树或表达式通常分两种:
自顶向下: 也就是先创建父节点, 再压入子节点(通过栈的方式, 压入完所有子节点后弹出父节点).
自底向上: 也就是先创建子节点, 再创建父节点(在创建时将子节点传入).
基于这些, 提供了以下接口, 这些接口通过TemplateEngine和ExpressionEngine调用.
问题来源:
http://javatar.iteye.com/blog/187669
解决方案:
在core包增加接口, 使外部构建树或表达式简化.
外部构建树或表达式通常分两种:
自顶向下: 也就是先创建父节点, 再压入子节点(通过栈的方式, 压入完所有子节点后弹出父节点).
自底向上: 也就是先创建子节点, 再创建父节点(在创建时将子节点传入).
基于这些, 提供了以下接口, 这些接口通过TemplateEngine和ExpressionEngine调用.
package org.commontemplate.core; /** * 模板构建器, 为外部引擎或存储方式提供模板构建接口, 适合于自顶向下的构建方式. * (非线程安全) * * @author liangfei0201@163.com * */ public interface TemplateBudiler { /** * 获取构建结果模板 * * @return 模板 */ public Template getTemplate(); /** * 开始模板 * * @param templateName 模板名称 */ public void beginTemplate(String templateName); /** * 结束模板 */ public void endTemplate(); /** * 开始块指令 * * @param directiveName 指令名 * @param expression 指令表达式 */ public void beginBlockDirective(String directiveName, Expression expression); /** * 结束块指令 */ public void endBlockDirective(); /** * 添加指令 * * @param directiveName 指令名 * @param expression 指令表达式 */ public void addDirective(String directiveName, Expression expression); /** * 添加文本 * * @param text 文本内容 */ public void addText(String text); /** * 添加注释内容 * * @param comment 注释内容 */ public void addComment(String comment); }
package org.commontemplate.core; import java.util.List; /** * 模板元素工厂, 为外部引擎或存储方式提供模板组装元素, 适合于自底向上的构建方式. * * @author liangfei0201@163.com * */ public interface ElementFactory { /** * 创建注释 * * @param comment 注释内容 * @return 注释 */ public Comment createComment(String comment); /** * 创建文本 * * @param text 文本内容 * @return 文本 */ public Text createText(String text); /** * 创建行指令 * * @param name 指令名 * @param expression 指令表达式 * @return 行指令 */ public Directive createDirective(String name, Expression expression); /** * 创建块指令 * * @param name 指令名 * @param expression 指令表达式 * @param elements 块指令内部元素 * @return 块指令 */ public BlockDirective createBlockDirective(String name, Expression expression, List elements); }
package org.commontemplate.core; /** * 表达式 构建器, 为外部引擎或存储方式提供自顶向下的构建方式. * (非线程安全) * * @author liangfei0201@163.com * */ public interface ExpressionBuilder { /** * 获取表达式结果 * * @return 表达式 */ public Expression getExpression(); /** * 添加一元操作符, 将把紧随其后添加表达式(包括操作符,变量,常量)作为参数. * * @param operatorName 操作符名 */ public void addUnaryOperator(String operatorName); /** * 添加二元操作符, 将把紧随其后添加的两个表达式(包括操作符,变量,常量)作为参数. * * @param operatorName 操作符名 */ public void addBinaryOperator(String operatorName); /** * 添加变量 * * @param variableName 变量名 */ public void addVariable(String variableName); /** * 添加常量 * * @param value 常量值 */ public void addConstant(Object value); }
package org.commontemplate.core; /** * 表达式组件工厂, 为外部引擎或存储方式提供表达式组装元素, 适合于自底向上的构建方式. * * @author liangfei0201@163.com * */ public interface ExpressionFactory { /** * 创建常量 * * @param constantValue 常量值 * @return 常量表达式 */ public Constant createConstant(Object constantValue); /** * 创建变量 * * @param variableName 变量名 * @return 变量表达式 */ public Variable createVariable(String variableName); /** * 创建一元操作符 * * @param operatorName 操作符名 * @param operand 操作数 * @return 一元操作符表达式 */ public UnaryOperator createUnaryOperator(String operatorName, Expression operand); /** * 创建二元操作符 * * @param operatorName 操作符名 * @param leftOperand 左操作数 * @param rightOperand 右操作数 * @return 二元操作符表达式 */ public BinaryOperator createBinaryOperator(String operatorName, Expression leftOperand, Expression rightOperand); }
发表评论
-
以HTTL为例讲讲模块分包&领域模型&扩展框架
2011-10-09 20:08 16816注:该博客内容已加入 ... -
CommonTemplate增加HTML标签版语法外套
2008-09-09 10:33 2980CommonTemplate(http://www.commo ... -
CommonTemplate访问者设计思考
2008-09-03 10:45 1809经过多个版本的调整, CommonTemplate(http: ... -
CommonTemplate发布0.8.6版本
2008-08-26 20:49 1810CommonTemplate发布0.8.6版本 ... -
CommonTemplate发布0.8.5版本
2008-08-04 13:23 1910CommonTemplate发布0.8.5版本(2008-08 ... -
CommonTemplate加入代码生成器
2008-07-21 13:15 2256模板引擎经常被用于做代码生成, 为此, CommonTempl ... -
加入对YAML数据格式的支持
2008-07-01 12:41 4013CommonTemplate(http://www.commo ... -
嵌套注释语法思考
2008-06-29 14:40 4040主流的C/C++/Java/C#等语言,都将注释语法设计成不可 ... -
转:开源协议
2008-06-10 17:23 2247来源:网络 (1)Contrib ... -
CommonTemplate完成查看器Viewer.exe(及安装程序)
2008-06-04 15:12 1886完成查看器初始版本. 实现功能: 双击*.ctl文件, 自动读 ... -
CommonTemplate异常国际化完成
2008-05-26 11:48 1936周未把一个累活给干了, 就是异常信息的国际化. 总共有220多 ... -
CommonTemplate加入对无穷数的支持.
2008-05-23 11:07 2752用"*"号表示无穷数, 常在下标号中使用, ... -
CommonTemplate导出模板所需变量结构
2008-05-12 18:28 2270在velocity的邮件列表中收到下面的邮件: Simon G ... -
CommonTemplate完成$snatch指令
2008-05-06 09:20 1915CommonTemplate(http://www.commo ... -
关于CTE当前API无法支持从非引擎方式构建模板树
2008-04-28 17:20 1804因隐藏了模板树的实现, 现在CommonTemplate(ht ... -
CommonTemplate完成DEBUG单步调试
2008-04-21 09:56 2541CommonTemplate(http://www.commo ... -
CommonTemplate准备加入$breakpoint指令
2008-04-19 10:30 2227准备在CommonTemplate( http://www.c ... -
很高兴桂林兄加入CommonTemplate的开发
2008-04-05 20:49 2942桂林的blog: http://jasongreen.itey ... -
展开式序列实现
2008-03-31 22:47 2127现在CommonTemplate(http://www.com ... -
CommonTemplate 0.8.3 版本发布
2008-03-31 15:05 2219项目地址: http://www.commontemplat ...
相关推荐
通过构建表达式树,解析器可以逐层遍历树,每一步都对应于执行一个操作或计算一个值。这种方法允许解析器按顺序处理表达式,无需考虑复杂的嵌套和优先级问题,从而简化了脚本的执行逻辑。 在编译器中,表达式树的...
POJ2014考研试题表达式·表达式树·表达式求值答案
构建表达式树时,通常从左到右读取表达式,遇到运算符时创建新节点,遇到操作数时添加为子节点。 表达式树的遍历有三种常见方式:前序遍历、中序遍历和后序遍历。这些遍历方法对于计算表达式的值、打印表达式或执行...
总结来说,中缀表达式转后缀表达式是编译原理中的基本操作,它涉及到了栈数据结构、运算符优先级以及表达式树的构建。通过这种方法,我们可以更高效地计算和解析数学表达式,这对于计算机程序设计,尤其是编译器和...
Expression表达式树缓存 Expression表达式树序列化
2. 自定义编译器或解释器:构建表达式树后,可以遍历并执行它们,实现自定义的代码执行逻辑。 3. AOP(面向切面编程):在方法调用前后插入自定义的行为,如日志记录或性能监控。 4. 代码分析和优化:对表达式树进行...
(2) 初始化表达式树; (3) 生成表达式树; (4) 输出表达式树的各种遍历的结果; (5) 打印表达式树; (6) 删除表达式树; (7) 设计相应的“菜单”,通过键盘输入选择,完成实验要求的测试。 [选作内容] ...
在计算机科学中,数据结构是组织、存储和检索数据的方式,而表达式树是一种特定类型的数据结构,用于表示数学或逻辑表达式。这种树状结构的每个内部节点代表一个操作符,而叶节点则代表操作数。表达式树提供了一种...
在控制台中画出表达式树通常涉及到文本艺术,使用ASCII字符来构建树的形状。这可以帮助可视化表达式的结构,但实现起来可能会有些复杂,需要考虑如何以文本方式呈现树的层次结构。 总结来说,中缀表达式转后缀...
- **重新构建**:根据修改后的节点重新构建表达式树。 **4.2 示例代码** ```csharp public class MyExpressionVisitor : ExpressionVisitor { protected override Expression VisitBinary(BinaryExpression node)...
- 若运算符被括号包围,则先简化括号内的表达式,再构建树。 2. **处理表达式的合法性和不合法性**: - 不合法情况包括:表达式首为“+”、“*”、“/”等,尾为“+”、“-”、“*”、“/”等运算符或括号。 - ...
将简单的中缀表达式转换成表达式树,然后利用表达式树对中缀表达式进行求值。
给定一个表达式,输出其中缀表达式,利用了栈和二叉树,是理解数据结构很好的资料
2. **构建映射表达式**:在接口的实现中,使用`Expression`类构建表示映射逻辑的表达式树。 3. **编译表达式**:使用`Compile`方法将表达式树编译为可执行的委托。 4. **缓存映射**:使用泛型Dictionary或其他缓存...
"Expression表达式树动态查询.zip"中的内容显然是关于如何使用C#表达式树来构建动态查询的示例或教程。 表达式树(Expression Tree)是将代码表示为树形结构,其中每个节点都是代码的一部分,如变量、操作符、方法...
此外,为了构建表达式树,可能还需要一个辅助函数,如`parseExpression`,它接收一个字符串形式的表达式,然后返回一个根节点。这个函数会使用栈来处理括号,解析运算符和操作数,并创建相应的`ExprNode`实例。 ...
2. **求值引擎**:完成解析后,求值引擎会遍历表达式树,对每个节点进行运算,最终得出表达式的值。这个过程可能涉及变量查找、函数调用、条件判断等操作。 3. **类型系统**:动态计算表达式需要支持不同类型的值,...
此外,还需要自定义一个二叉树节点类来构建表达式的抽象语法树(AST)。二叉树的每个节点代表一个运算符或操作数,左子节点和右子节点分别代表运算符的操作数。通过遍历二叉树,我们可以生成后缀表达式。 在...
4. 将处理后的后缀表达式构建为影子树。 5. 使用DFS或BFS遍历影子树并打印,以展示表达式的结构。 在这个实验中,你将深化对数据结构和算法的理解,特别是栈的使用以及如何将抽象的数学概念转化为计算机可以理解的...
二叉表达式树,也称为运算符树或语法树,是一种数据结构,它在计算机科学中用于表示数学或逻辑表达式。这种树形结构能够直观地展现表达式的运算顺序和结构,使得计算变得简单,同时也方便了编译器进行解析和优化。在...