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