]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/StandardExpressionVisitor.java
Merge "Remove unused import in DeleteHandler"
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / StandardExpressionVisitor.java
1 package org.simantics.scl.compiler.elaboration.expressions;\r
2 \r
3 import org.simantics.scl.compiler.elaboration.chr.CHRLiteral;\r
4 import org.simantics.scl.compiler.elaboration.chr.CHRRule;\r
5 import org.simantics.scl.compiler.elaboration.equation.EqBasic;\r
6 import org.simantics.scl.compiler.elaboration.equation.EqGuard;\r
7 import org.simantics.scl.compiler.elaboration.equation.Equation;\r
8 import org.simantics.scl.compiler.elaboration.equation.EquationVisitor;\r
9 import org.simantics.scl.compiler.elaboration.expressions.ERuleset.DatalogRule;\r
10 import org.simantics.scl.compiler.elaboration.expressions.accessor.ExpressionAccessor;\r
11 import org.simantics.scl.compiler.elaboration.expressions.accessor.FieldAccessor;\r
12 import org.simantics.scl.compiler.elaboration.expressions.accessor.FieldAccessorVisitor;\r
13 import org.simantics.scl.compiler.elaboration.expressions.accessor.IdAccessor;\r
14 import org.simantics.scl.compiler.elaboration.expressions.accessor.StringAccessor;\r
15 import org.simantics.scl.compiler.elaboration.expressions.list.ListAssignment;\r
16 import org.simantics.scl.compiler.elaboration.expressions.list.ListGenerator;\r
17 import org.simantics.scl.compiler.elaboration.expressions.list.ListGuard;\r
18 import org.simantics.scl.compiler.elaboration.expressions.list.ListQualifierVisitor;\r
19 import org.simantics.scl.compiler.elaboration.expressions.list.ListSeq;\r
20 import org.simantics.scl.compiler.elaboration.expressions.list.ListThen;\r
21 import org.simantics.scl.compiler.elaboration.query.QAlternative;\r
22 import org.simantics.scl.compiler.elaboration.query.QAtom;\r
23 import org.simantics.scl.compiler.elaboration.query.QConjunction;\r
24 import org.simantics.scl.compiler.elaboration.query.QDisjunction;\r
25 import org.simantics.scl.compiler.elaboration.query.QExists;\r
26 import org.simantics.scl.compiler.elaboration.query.QIf;\r
27 import org.simantics.scl.compiler.elaboration.query.QMapping;\r
28 import org.simantics.scl.compiler.elaboration.query.QNegation;\r
29 import org.simantics.scl.compiler.elaboration.query.Query;\r
30 import org.simantics.scl.compiler.elaboration.query.QueryVisitor;\r
31 \r
32 \r
33 public class StandardExpressionVisitor implements \r
34 ExpressionVisitor, QueryVisitor, FieldAccessorVisitor, ListQualifierVisitor,\r
35 EquationVisitor {\r
36 \r
37     @Override\r
38     public void visit(EApply expression) {\r
39         expression.function.accept(this);\r
40         for(Expression parameter : expression.parameters)\r
41             parameter.accept(this);\r
42     }\r
43 \r
44     @Override\r
45     public void visit(EApplyType expression) {\r
46         expression.expression.accept(this);\r
47     }\r
48 \r
49     @Override\r
50     public void visit(EAsPattern expression) {\r
51         expression.pattern.accept(this);\r
52     }\r
53     \r
54     @Override\r
55     public void visit(EBind expression) {\r
56         expression.pattern.accept(this);\r
57         expression.value.accept(this);\r
58         expression.in.accept(this);\r
59     }\r
60 \r
61     @Override\r
62     public void visit(EConstant expression) {\r
63     }\r
64 \r
65     @Override\r
66     public void visit(EEnforce expression) {\r
67         expression.query.accept(this);\r
68     }\r
69 \r
70     @Override\r
71     public void visit(EError expression) {\r
72     }\r
73 \r
74     @Override\r
75     public void visit(EExternalConstant expression) {\r
76     }\r
77 \r
78     @Override\r
79     public void visit(EFieldAccess expression) {\r
80         expression.parent.accept(this);\r
81         for(FieldAccessor accessor : expression.accessors)\r
82             accessor.accept(this);\r
83     }\r
84 \r
85     @Override\r
86     public void visit(EGetConstraint expression) {\r
87         if(expression.evidence != null)\r
88             expression.evidence.accept(this);\r
89     }\r
90 \r
91     @Override\r
92     public void visit(EIf expression) {\r
93         expression.condition.accept(this);\r
94         expression.then_.accept(this);\r
95         if(expression.else_ != null)\r
96             expression.else_.accept(this);\r
97     }\r
98 \r
99     @Override\r
100     public void visit(EIntegerLiteral expression) {\r
101         if(expression.constraint != null)\r
102             expression.constraint.accept(this);\r
103     }\r
104 \r
105     @Override\r
106     public void visit(ELambda expression) {\r
107         for(Case case_ : expression.cases)\r
108             visit(case_);\r
109     }\r
110     \r
111     @Override\r
112     public void visit(EViewPattern expression) {\r
113         expression.expression.accept(this);\r
114         expression.pattern.accept(this);\r
115     }\r
116 \r
117     public void visit(Case case_) {\r
118         for(Expression pattern : case_.patterns)\r
119             pattern.accept(this);\r
120         case_.value.accept(this);\r
121     }\r
122 \r
123     @Override\r
124     public void visit(ELambdaType expression) {\r
125         expression.value.accept(this);\r
126     }\r
127 \r
128     @Override\r
129     public void visit(ELet expression) {\r
130         for(Assignment assignment : expression.assignments)\r
131             visit(assignment);\r
132     }\r
133 \r
134     public void visit(Assignment assignment) {\r
135         assignment.pattern.accept(this);\r
136         assignment.value.accept(this);\r
137     }\r
138 \r
139     @Override\r
140     public void visit(EListComprehension expression) {\r
141         expression.head.accept(this);\r
142         expression.qualifier.accept(this);\r
143     }\r
144 \r
145     @Override\r
146     public void visit(EListLiteral expression) {\r
147         for(Expression component : expression.components)\r
148             component.accept(this);\r
149     }\r
150 \r
151     @Override\r
152     public void visit(ELiteral expression) {\r
153     }\r
154 \r
155     @Override\r
156     public void visit(EMatch expression) {\r
157         for(Expression s : expression.scrutinee)\r
158             s.accept(this);\r
159         for(Case case_ : expression.cases)\r
160             visit(case_);\r
161     }\r
162 \r
163     @Override\r
164     public void visit(EPlaceholder expression) {\r
165         expression.expression.accept(this);\r
166     }\r
167 \r
168     @Override\r
169     public void visit(ERealLiteral expression) {\r
170         if(expression.constraint != null)\r
171             expression.constraint.accept(this);\r
172     }\r
173 \r
174     @Override\r
175     public void visit(ERuleset expression) {\r
176         for(DatalogRule rule : expression.rules)\r
177             visit(rule);\r
178         expression.in.accept(this);\r
179     }\r
180 \r
181     public void visit(DatalogRule rule) {\r
182         for(Expression parameter : rule.headParameters)\r
183             parameter.accept(this);\r
184         rule.body.accept(this);\r
185     }\r
186 \r
187     @Override\r
188     public void visit(ESelect expression) {\r
189         expression.query.accept(this);\r
190         expression.expression.accept(this);\r
191     }\r
192 \r
193     @Override\r
194     public void visit(ESimpleLambda expression) {\r
195         expression.value.accept(this);\r
196     }\r
197 \r
198     @Override\r
199     public void visit(ESimpleLet expression) {\r
200         expression.value.accept(this);\r
201         expression.in.accept(this);\r
202     }\r
203 \r
204     @Override\r
205     public void visit(ETransformation expression) {\r
206         expression.seed.accept(this);\r
207     }\r
208     \r
209     @Override\r
210     public void visit(ETypeAnnotation expression) {\r
211         expression.value.accept(this);\r
212     }\r
213 \r
214     @Override\r
215     public void visit(EVariable expression) {\r
216     }\r
217 \r
218     @Override\r
219     public void visit(EWhen expression) {\r
220         expression.query.accept(this);\r
221         expression.action.accept(this);\r
222     }\r
223 \r
224     @Override\r
225     public void visit(GuardedExpressionGroup expression) {\r
226         for(GuardedExpression gexp : expression.expressions) {\r
227             for(Expression guard : gexp.guards)\r
228                 guard.accept(this);\r
229             gexp.value.accept(this);\r
230         }\r
231     }\r
232 \r
233     @Override\r
234     public void visit(QAlternative query) {\r
235         for(Query q : query.queries)\r
236             q.accept(this);\r
237     }\r
238 \r
239     @Override\r
240     public void visit(QAtom query) {\r
241         for(Expression parameter : query.parameters)\r
242             parameter.accept(this);\r
243     }\r
244     \r
245     @Override\r
246     public void visit(QMapping query) {\r
247         for(Expression parameter : query.parameters)\r
248             parameter.accept(this);\r
249     }\r
250 \r
251     @Override\r
252     public void visit(QConjunction query) {\r
253         for(Query q : query.queries)\r
254             q.accept(this);\r
255     }\r
256 \r
257     @Override\r
258     public void visit(QDisjunction query) {\r
259         for(Query q : query.queries)\r
260             q.accept(this);\r
261     }\r
262 \r
263     @Override\r
264     public void visit(QExists query) {\r
265         query.query.accept(this);\r
266     }\r
267 \r
268     @Override\r
269     public void visit(QNegation query) {\r
270         query.query.accept(this);\r
271     }\r
272 \r
273     @Override\r
274     public void visit(ExpressionAccessor accessor) {\r
275         accessor.fieldName.accept(this);\r
276     }\r
277 \r
278     @Override\r
279     public void visit(IdAccessor accessor) {\r
280     }\r
281 \r
282     @Override\r
283     public void visit(StringAccessor accessor) {\r
284     }\r
285 \r
286     @Override\r
287     public void visit(ListAssignment qualifier) {\r
288         qualifier.pattern.accept(this);\r
289         qualifier.value.accept(this);\r
290     }\r
291 \r
292     @Override\r
293     public void visit(ListGenerator qualifier) {\r
294         qualifier.pattern.accept(this);\r
295         qualifier.value.accept(this);\r
296     }\r
297 \r
298     @Override\r
299     public void visit(ListGuard qualifier) {\r
300         qualifier.condition.accept(this);\r
301     }\r
302 \r
303     @Override\r
304     public void visit(ListSeq qualifier) {\r
305         qualifier.a.accept(this);\r
306         qualifier.b.accept(this);\r
307     }\r
308 \r
309     @Override\r
310     public void visit(ListThen qualifier) {\r
311         qualifier.left.accept(this);\r
312         qualifier.transformer.accept(this);\r
313         if(qualifier.by != null)\r
314             qualifier.by.accept(this);\r
315     }\r
316 \r
317     @Override\r
318     public void visit(QIf query) {\r
319         query.condition.accept(this);\r
320         query.thenQuery.accept(this);\r
321         query.elseQuery.accept(this);\r
322     }\r
323 \r
324     @Override\r
325     public void visit(ECoveringBranchPoint expression) {\r
326         expression.expression.accept(this);\r
327     }\r
328 \r
329     @Override\r
330     public void visit(EqBasic equation) {\r
331         equation.left.accept(this);\r
332         equation.right.accept(this);\r
333     }\r
334 \r
335     @Override\r
336     public void visit(EqGuard equation) {\r
337         equation.guard.accept(this);\r
338     }\r
339 \r
340     @Override\r
341     public void visit(EEquations expression) {\r
342         for(Equation equation : expression.equations)\r
343             equation.accept(this);\r
344     }\r
345 \r
346     @Override\r
347     public void visit(ECHRRuleset ruleset) {\r
348         for(CHRRule rule : ruleset.ruleset.rules) {\r
349             for(CHRLiteral literal : rule.head.literals)\r
350                 for(Expression parameter : literal.parameters)\r
351                     parameter.accept(this);\r
352             for(CHRLiteral literal : rule.body.literals)\r
353                 for(Expression parameter : literal.parameters)\r
354                     parameter.accept(this);\r
355         }\r
356         ruleset.in.accept(this);\r
357     }\r
358 \r
359 }\r