`
javatar
  • 浏览: 1704680 次
  • 性别: Icon_minigender_1
  • 来自: 杭州699号
社区版块
存档分类
最新评论

CommonTemplate完成外部构建树或表达式接口

    博客分类:
  • HTTL
阅读更多
CommonTemplate: http://www.commontemplate.org
问题来源:
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);

}
分享到:
评论

相关推荐

    表达式解析之表达式树的建立

    通过构建表达式树,解析器可以逐层遍历树,每一步都对应于执行一个操作或计算一个值。这种方法允许解析器按顺序处理表达式,无需考虑复杂的嵌套和优先级问题,从而简化了脚本的执行逻辑。 在编译器中,表达式树的...

    POJ2014考研试题表达式·表达式树·表达式求值答案

    POJ2014考研试题表达式·表达式树·表达式求值答案

    二叉树(C语言)以及构建表达式树

    构建表达式树时,通常从左到右读取表达式,遇到运算符时创建新节点,遇到操作数时添加为子节点。 表达式树的遍历有三种常见方式:前序遍历、中序遍历和后序遍历。这些遍历方法对于计算表达式的值、打印表达式或执行...

    表达式树 中缀表达式转后缀

    总结来说,中缀表达式转后缀表达式是编译原理中的基本操作,它涉及到了栈数据结构、运算符优先级以及表达式树的构建。通过这种方法,我们可以更高效地计算和解析数学表达式,这对于计算机程序设计,尤其是编译器和...

    Expression表达式树缓存 Expression表达式树序列化

    Expression表达式树缓存 Expression表达式树序列化

    C#表达式树教程

    2. 自定义编译器或解释器:构建表达式树后,可以遍历并执行它们,实现自定义的代码执行逻辑。 3. AOP(面向切面编程):在方法调用前后插入自定义的行为,如日志记录或性能监控。 4. 代码分析和优化:对表达式树进行...

    四则混合运算表达式树处理

    (2) 初始化表达式树; (3) 生成表达式树; (4) 输出表达式树的各种遍历的结果; (5) 打印表达式树; (6) 删除表达式树; (7) 设计相应的“菜单”,通过键盘输入选择,完成实验要求的测试。 [选作内容] ...

    c++ 数据结构 表达式树算法

    在计算机科学中,数据结构是组织、存储和检索数据的方式,而表达式树是一种特定类型的数据结构,用于表示数学或逻辑表达式。这种树状结构的每个内部节点代表一个操作符,而叶节点则代表操作数。表达式树提供了一种...

    中缀表达式转后缀表达式树

    在控制台中画出表达式树通常涉及到文本艺术,使用ASCII字符来构建树的形状。这可以帮助可视化表达式的结构,但实现起来可能会有些复杂,需要考虑如何以文本方式呈现树的层次结构。 总结来说,中缀表达式转后缀...

    表达式树的应用

    - **重新构建**:根据修改后的节点重新构建表达式树。 **4.2 示例代码** ```csharp public class MyExpressionVisitor : ExpressionVisitor { protected override Expression VisitBinary(BinaryExpression node)...

    表达式求值,用二叉树

    - 若运算符被括号包围,则先简化括号内的表达式,再构建树。 2. **处理表达式的合法性和不合法性**: - 不合法情况包括:表达式首为“+”、“*”、“/”等,尾为“+”、“-”、“*”、“/”等运算符或括号。 - ...

    中缀表达式树以及利用中缀表达式树求值

    将简单的中缀表达式转换成表达式树,然后利用表达式树对中缀表达式进行求值。

    用表达式树输出中缀表达式

    给定一个表达式,输出其中缀表达式,利用了栈和二叉树,是理解数据结构很好的资料

    表达式树和泛型缓存完成Mapper效果

    2. **构建映射表达式**:在接口的实现中,使用`Expression`类构建表示映射逻辑的表达式树。 3. **编译表达式**:使用`Compile`方法将表达式树编译为可执行的委托。 4. **缓存映射**:使用泛型Dictionary或其他缓存...

    Expression表达式树动态查询.zip

    "Expression表达式树动态查询.zip"中的内容显然是关于如何使用C#表达式树来构建动态查询的示例或教程。 表达式树(Expression Tree)是将代码表示为树形结构,其中每个节点都是代码的一部分,如变量、操作符、方法...

    面向对象的方式表达式树实现

    此外,为了构建表达式树,可能还需要一个辅助函数,如`parseExpression`,它接收一个字符串形式的表达式,然后返回一个根节点。这个函数会使用栈来处理括号,解析运算符和操作数,并创建相应的`ExprNode`实例。 ...

    动态计算表达式

    2. **求值引擎**:完成解析后,求值引擎会遍历表达式树,对每个节点进行运算,最终得出表达式的值。这个过程可能涉及变量查找、函数调用、条件判断等操作。 3. **类型系统**:动态计算表达式需要支持不同类型的值,...

    c++ 计算表达式结果(二叉树、后缀表达式)

    此外,还需要自定义一个二叉树节点类来构建表达式的抽象语法树(AST)。二叉树的每个节点代表一个运算符或操作数,左子节点和右子节点分别代表运算符的操作数。通过遍历二叉树,我们可以生成后缀表达式。 在...

    中缀表达式转换成后缀表达式,影子树打印

    4. 将处理后的后缀表达式构建为影子树。 5. 使用DFS或BFS遍历影子树并打印,以展示表达式的结构。 在这个实验中,你将深化对数据结构和算法的理解,特别是栈的使用以及如何将抽象的数学概念转化为计算机可以理解的...

    二叉表达式树

    二叉表达式树,也称为运算符树或语法树,是一种数据结构,它在计算机科学中用于表示数学或逻辑表达式。这种树形结构能够直观地展现表达式的运算顺序和结构,使得计算变得简单,同时也方便了编译器进行解析和优化。在...

Global site tag (gtag.js) - Google Analytics