如何实现语法动作

1.什么是语法动作?

    在动态模型编程中动作模型是最基本的可执行的元素,因此需要使用动作模型来实现其它编程语言中的if/else、while、do、try/catch、for等等语法,而这些动作则习惯上称为语法类的动作。

2.语法动作的实现方法

2.1.变量上下文中的流程状态

    语法动作的实现需要通过变量上下文的状态,ActionContext的相关代码如下。

public class ActionContext implements Map<String, Object>{
	/** 正常的运行状态 */
	public static final int RUNNING = 0;

	/** 返回值的状态,返回到动作被初始调用的地方 */
	public static final int RETURN = 1;

	/** 取消的状态,取消当前的动作执行 */
	public static final int CANCEL = 2;

	/** 打断状态,一般返回到上一个循环处 */
	public static final int BREAK = 3;

	/** 继续从循环处执行 */
	public static final int CONTINUE = 4;

	/** 抛出异常的状态,一般到异常处理处结束 */
	public static final int EXCEPTION = 5;

	/**
	 * 设置动作的执行状态。
	 * 
	 * @param status  执行状态
	 */
	public void setStatus(int status) {
	}

	/**
	 * 返回动作执行的状态。
	 * 
	 * @return 动作的执行状态
	 */
	public int getStatus() {
	}
}

2.2.可以控制流程状态的动作示例

2.2.1.Break

    如Break的实现代码如下。

public static void run(ActionContext context){	    
    context.setStatus(ActionContext.BREAK);
}	

2.2.2.While

    While动作的流程控制代码如下。

        while(IfCreator.checkCondition(self, actionContext)){
        	Thing childActions = self.getThing("ChildAction@0"); 
        	for (Thing child : childActions.getChilds()) {
				Action action = world.getAction(child);
				if (action != null) {
					result = action.run(actionContext, null, true);
				}

				int sint = actionContext.getStatus();
				if (sint != ActionContext.RUNNING) {
					break;
				}
			}

			//判断循环的状态
			if (actionContext.getStatus() == ActionContext.BREAK) {
				actionContext.setStatus(ActionContext.RUNNING);
				break;
			} else if (actionContext.getStatus() == ActionContext.CONTINUE) {
				actionContext.setStatus(ActionContext.RUNNING);
				continue;
			} else if (actionContext.getStatus() != ActionContext.RUNNING) {
				break;
			}
        }

 

Copyright ©  2007-2019 XWorker.org  版权所有  沪ICP备08000575号