import org.simantics.scl.compiler.elaboration.chr.relations.CHRConstraint;
import org.simantics.scl.compiler.elaboration.expressions.Assignment;
import org.simantics.scl.compiler.elaboration.expressions.Case;
+import org.simantics.scl.compiler.elaboration.expressions.EAmbiguous;
import org.simantics.scl.compiler.elaboration.expressions.EApply;
import org.simantics.scl.compiler.elaboration.expressions.EApplyType;
import org.simantics.scl.compiler.elaboration.expressions.EAsPattern;
+import org.simantics.scl.compiler.elaboration.expressions.EBinary;
import org.simantics.scl.compiler.elaboration.expressions.EBind;
+import org.simantics.scl.compiler.elaboration.expressions.EBlock;
import org.simantics.scl.compiler.elaboration.expressions.ECHRRuleset;
+import org.simantics.scl.compiler.elaboration.expressions.ECHRRulesetConstructor;
+import org.simantics.scl.compiler.elaboration.expressions.ECHRSelect;
import org.simantics.scl.compiler.elaboration.expressions.EConstant;
import org.simantics.scl.compiler.elaboration.expressions.ECoveringBranchPoint;
import org.simantics.scl.compiler.elaboration.expressions.EEnforce;
import org.simantics.scl.compiler.elaboration.expressions.ELiteral;
import org.simantics.scl.compiler.elaboration.expressions.EMatch;
import org.simantics.scl.compiler.elaboration.expressions.EPlaceholder;
+import org.simantics.scl.compiler.elaboration.expressions.EPreLet;
+import org.simantics.scl.compiler.elaboration.expressions.ERange;
import org.simantics.scl.compiler.elaboration.expressions.ERealLiteral;
+import org.simantics.scl.compiler.elaboration.expressions.ERecord;
import org.simantics.scl.compiler.elaboration.expressions.ERuleset;
import org.simantics.scl.compiler.elaboration.expressions.ESelect;
import org.simantics.scl.compiler.elaboration.expressions.ESimpleLambda;
import org.simantics.scl.compiler.elaboration.expressions.ESimpleLet;
+import org.simantics.scl.compiler.elaboration.expressions.EStringLiteral;
import org.simantics.scl.compiler.elaboration.expressions.ETransformation;
import org.simantics.scl.compiler.elaboration.expressions.ETypeAnnotation;
+import org.simantics.scl.compiler.elaboration.expressions.EVar;
import org.simantics.scl.compiler.elaboration.expressions.EVariable;
import org.simantics.scl.compiler.elaboration.expressions.EViewPattern;
import org.simantics.scl.compiler.elaboration.expressions.EWhen;
public class ExpressionToStringVisitor implements ExpressionVisitor, QueryVisitor {
+ public static final boolean SHOW_EFFECTS = false;
+
StringBuilder b = new StringBuilder();
int indentation;
@Override
public void visit(EApply expression) {
showPar(expression.getFunction());
+ if(SHOW_EFFECTS)
+ b.append(" {" + expression.effect + "}");
for(Expression parameter : expression.getParameters()) {
b.append(' ');
showPar(parameter);
showPar(pat);
b.append(' ');
}
+ if(SHOW_EFFECTS)
+ b.append("{" + expression.effect + "} ");
b.append("-> ");
++indentation;
case_.value.accept(this);
public void visit(ESelect expression) {
b.append("ESelect");
}
-
+
+ @Override
+ public void visit(ECHRSelect expression) {
+ b.append("ECHRSelect");
+ }
+
@Override
public void visit(ESimpleLambda expression) {
b.append('\\');
b.append(' ');
show(expression.getParameter());
}
+ if(SHOW_EFFECTS)
+ b.append(" {" + expression.effect + "}");
b.append(" -> ");
expression.getValue().accept(this);
}
expression.getValue().accept(this);
}
+ @Override
+ public void visit(EVar expression) {
+ b.append(expression.name);
+ }
+
@Override
public void visit(EVariable expression) {
show(expression.getVariable());
}
@Override
- public void visit(EEquations eEquations) {
+ public void visit(EEquations expression) {
b.append("eq");
}
@Override
- public void visit(ECHRRuleset echrRuleset) {
- b.append("CHRRuleset");
+ public void visit(ECHRRuleset expression) {
+ b.append("ECHRRuleset");
+ }
+
+ @Override
+ public void visit(ECHRRulesetConstructor expression) {
+ b.append("ECHRRulesetConstructor");
}
public void visit(CHRRule rule) {
showPar(parameter);
}
}
+
+ @Override
+ public void visit(EBinary expression) {
+ b.append("<EBinary>");
+ }
+
+ @Override
+ public void visit(EBlock expression) {
+ b.append("<EBlock>");
+ }
+
+ @Override
+ public void visit(EPreLet expression) {
+ b.append("<EPreLet>");
+ }
+
+ @Override
+ public void visit(ERange expression) {
+ b.append('[');
+ expression.from.accept(this);
+ b.append("..");
+ expression.to.accept(this);
+ b.append(']');
+ }
+
+ @Override
+ public void visit(ERecord expression) {
+ b.append("<ERecord>");
+ }
+
+ @Override
+ public void visit(EStringLiteral expression) {
+ b.append('"');
+ for(int i=0;i<expression.strings.length;++i) {
+ b.append(expression.strings[i]);
+ if(i < expression.expressions.length) {
+ b.append("\\(");
+ expression.expressions[i].accept(this);
+ b.append(')');
+ }
+ }
+ b.append('"');
+ }
+
+ @Override
+ public void visit(EAmbiguous eAmbiguous) {
+ b.append("EAmbigious");
+ }
}