package eis.iilang; /** * Takes an IILElement and yields its Prolog-representation. * * @author tristanbehrens * */ public class PrologVisitor implements IILObjectVisitor { @Override public Object visit(Action element, Object object) { String ret = ""; ret += element.name + "("; for ( Parameter p : element.getParameters() ) { ret += p.accept(this,null); if ( element.getParameters().indexOf(p) != element.getParameters().size() - 1 ) ret += ","; } ret += ")"; return ret; } @Override public Object visit(DataContainer element, Object object) { return "UNKNOWN"; } @Override public Object visit(Function element, Object object) { String ret = ""; ret += element.getName() + "("; int count = 0; for ( Parameter p : element.getParameters() ) { ret += p.accept(this,null); //if ( element.getParameters().indexOf(p) != element.getParameters().size() - 1 ) // ret += ","; if ( count < element.getParameters().size() - 1 ) ret += ","; count ++; } ret += ")"; return ret; } @Override public Object visit(Identifier element, Object object) { return element.getValue(); } @Override public Object visit(IILElement element, Object object) { return "UNKNOWN"; } @Override public Object visit(Numeral element, Object object) { return element.getValue(); } @Override public Object visit(Parameter element, Object object) { return "UNKNOWN"; } @Override public Object visit(ParameterList element, Object object) { String ret = ""; ret += "["; for ( Parameter p : element ) { ret += p.accept(this,null); if ( element.indexOf(p) != element.size() - 1 ) ret += ","; } ret += "]"; return ret; } @Override public Object visit(Percept element, Object object) { String ret = ""; ret += element.name + "("; for ( Parameter p : element.getParameters() ) { ret += p.accept(this,null); if ( element.getParameters().indexOf(p) != element.getParameters().size() - 1 ) ret += ","; } ret += ")"; return ret; } @Override public Object visit(TruthValue element, Object object) { return element.getValue(); } /** * Can be used for convenience's sake. Instantiates a visitor and visits the element. * @param element * @return */ public static String staticVisit(IILElement element) { PrologVisitor visitor = new PrologVisitor(); return (String) element.accept(visitor,""); } }