--- /dev/null
+package org.simantics.scl.compiler.elaboration.chr.ast;
+
+import java.util.ArrayList;
+
+import org.simantics.scl.compiler.elaboration.chr.CHRLiteral;
+import org.simantics.scl.compiler.elaboration.chr.CHRQuery;
+import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
+import org.simantics.scl.compiler.internal.parsing.Symbol;
+
+public abstract class CHRAstQuery extends Symbol {
+ public CHRQuery translateAsHead(TranslationContext context) {
+ return translate(context, true);
+ }
+
+ public CHRQuery translateAsBody(TranslationContext context) {
+ return translate(context, false);
+ }
+
+ private CHRQuery translate(TranslationContext context, boolean isHead) {
+ ArrayList<CHRLiteral> literals = new ArrayList<CHRLiteral>();
+ translate(context, isHead, literals);
+ return new CHRQuery(literals.toArray(new CHRLiteral[literals.size()]));
+ }
+
+ protected abstract void translate(TranslationContext context, boolean isHead, ArrayList<CHRLiteral> literals);
+
+ public abstract void accept(CHRAstQueryVisitor visitor);
+}