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 literals = new ArrayList(); translate(context, isHead, literals); return new CHRQuery(literals.toArray(new CHRLiteral[literals.size()])); } protected abstract void translate(TranslationContext context, boolean isHead, ArrayList literals); public abstract void accept(CHRAstQueryVisitor visitor); }