CIVLCommandFactory.java

package edu.udel.cis.vsl.civl.run.common;

import java.util.Collection;

import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.ParseTreeWalker;

import edu.udel.cis.vsl.civl.run.IF.CommandLine;
import edu.udel.cis.vsl.civl.run.IF.CommandLine.CommandLineKind;
import edu.udel.cis.vsl.gmc.Option;

public class CIVLCommandFactory {

	private static String args2Command(String... args) {
		String cmd = "";

		for (String arg : args) {
			cmd = cmd + arg + " ";
		}
		cmd = cmd + "\n";
		return cmd;
	}

	public static CommandLine parseCommand(Collection<Option> options,
			String... args) {
		String command = args2Command(args);
		ANTLRInputStream input = new ANTLRInputStream(command);
		// System.out.println("create lexer...");
		CommandLexer lexer = new CommandLexer(input);
		// System.out.println("create token stream...");
		CommonTokenStream tokens = new CommonTokenStream(lexer);
		// System.out.println("create parser...");
		CommandParser parser = new CommandParser(tokens);
		// System.out.println("create parser tree...");
		ParseTree tree = parser.start();
		ParseTreeWalker walker = new ParseTreeWalker();
		CIVLCommandListener translator = new CIVLCommandListener(command,
				options);

		// System.out.println("walking through CIVL command listener...");
		walker.walk(translator, tree);
		if (translator.kind == CommandLineKind.NORMAL)
			return translator.normalCmd;
		else
			return translator.compareCmd;
	}
}