view src/lite/MacroSolver.java @ 107:30e74062f06c continuation-removal

*** empty log message ***
author kono
date Sun, 20 Jan 2008 18:22:55 +0900
parents ec609dbb13a7
children
line wrap: on
line source

package lite;

import java.util.LinkedList;

import parser.Command;
import parser.MacroNodeParserInterface;



public class MacroSolver extends ITLSolver {


	private ITLSolver predicate;
	private String body;
	private MacroNodeParserInterface<ITLSolver> parser;
	private Command<ITLSolver> command;

	public MacroSolver(ITLSolver macro, String body, int order,
			Command<ITLSolver> command,
			MacroNodeParserInterface<ITLSolver> parser) {
		this.predicate = macro;
		this.body = body;
		this.parser = parser;
		this.command = command;
		this.order = order;
	}



	@Override
	public String toString() {
		return predicate.toString();
	}

	

	@Override
	public boolean isMacro() {
		return true;
	}
	
	@Override
	public LinkedList<? extends ITLSolver> arguments() {
		return predicate.arguments();
	}

	/* 
	 * Macro Expansion
	 *      locally define parameters by given arguments
	 */
	@Override
	public ITLSolver eval(LinkedList<ITLSolver> args) {
		ITLSolver value = parser.eval(args, predicate, body,predicate.arguments());
		if (command!=null) {
			return command.exec(predicate,value, args);
		}
		return value;
	}
	
	@Override
	public int order() {
		return order;
	}

	@Override
	public ITLSolver sat(ITLSatisfier sat, Next next) throws Backtrack {
		return null;
	}

}