]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/ast/CHRAstQuery.java
bd708e69051b1ea044a91fe73e00e7d937dd8d3b
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / chr / ast / CHRAstQuery.java
1 package org.simantics.scl.compiler.elaboration.chr.ast;
2
3 import java.util.ArrayList;
4
5 import org.simantics.scl.compiler.elaboration.chr.CHRLiteral;
6 import org.simantics.scl.compiler.elaboration.chr.CHRQuery;
7 import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
8 import org.simantics.scl.compiler.internal.parsing.Symbol;
9
10 public abstract class CHRAstQuery extends Symbol {
11     public CHRQuery translateAsHead(TranslationContext context) {
12         return translate(context, true);
13     }
14     
15     public CHRQuery translateAsBody(TranslationContext context) {
16         return translate(context, false);
17     }
18
19     private CHRQuery translate(TranslationContext context, boolean isHead) {
20         ArrayList<CHRLiteral> literals = new ArrayList<CHRLiteral>(); 
21         translate(context, isHead, literals);
22         return new CHRQuery(literals.toArray(new CHRLiteral[literals.size()]));
23     }
24
25     protected abstract void translate(TranslationContext context, boolean isHead, ArrayList<CHRLiteral> literals);
26
27     public abstract void accept(CHRAstQueryVisitor visitor);
28 }