]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/StandardExpressionVisitor.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / StandardExpressionVisitor.java
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/StandardExpressionVisitor.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/StandardExpressionVisitor.java
new file mode 100644 (file)
index 0000000..93ddf6f
--- /dev/null
@@ -0,0 +1,337 @@
+package org.simantics.scl.compiler.elaboration.expressions;\r
+\r
+import org.simantics.scl.compiler.elaboration.equation.EqBasic;\r
+import org.simantics.scl.compiler.elaboration.equation.EqGuard;\r
+import org.simantics.scl.compiler.elaboration.equation.Equation;\r
+import org.simantics.scl.compiler.elaboration.equation.EquationVisitor;\r
+import org.simantics.scl.compiler.elaboration.expressions.ERuleset.DatalogRule;\r
+import org.simantics.scl.compiler.elaboration.expressions.accessor.ExpressionAccessor;\r
+import org.simantics.scl.compiler.elaboration.expressions.accessor.FieldAccessor;\r
+import org.simantics.scl.compiler.elaboration.expressions.accessor.FieldAccessorVisitor;\r
+import org.simantics.scl.compiler.elaboration.expressions.accessor.IdAccessor;\r
+import org.simantics.scl.compiler.elaboration.expressions.accessor.StringAccessor;\r
+import org.simantics.scl.compiler.elaboration.expressions.list.ListAssignment;\r
+import org.simantics.scl.compiler.elaboration.expressions.list.ListGenerator;\r
+import org.simantics.scl.compiler.elaboration.expressions.list.ListGuard;\r
+import org.simantics.scl.compiler.elaboration.expressions.list.ListQualifierVisitor;\r
+import org.simantics.scl.compiler.elaboration.expressions.list.ListSeq;\r
+import org.simantics.scl.compiler.elaboration.expressions.list.ListThen;\r
+import org.simantics.scl.compiler.elaboration.query.QAlternative;\r
+import org.simantics.scl.compiler.elaboration.query.QAtom;\r
+import org.simantics.scl.compiler.elaboration.query.QConjunction;\r
+import org.simantics.scl.compiler.elaboration.query.QDisjunction;\r
+import org.simantics.scl.compiler.elaboration.query.QExists;\r
+import org.simantics.scl.compiler.elaboration.query.QIf;\r
+import org.simantics.scl.compiler.elaboration.query.QMapping;\r
+import org.simantics.scl.compiler.elaboration.query.QNegation;\r
+import org.simantics.scl.compiler.elaboration.query.Query;\r
+import org.simantics.scl.compiler.elaboration.query.QueryVisitor;\r
+\r
+\r
+public class StandardExpressionVisitor implements \r
+ExpressionVisitor, QueryVisitor, FieldAccessorVisitor, ListQualifierVisitor,\r
+EquationVisitor {\r
+\r
+    @Override\r
+    public void visit(EApply expression) {\r
+        expression.function.accept(this);\r
+        for(Expression parameter : expression.parameters)\r
+            parameter.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(EApplyType expression) {\r
+        expression.expression.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(EAsPattern expression) {\r
+        expression.pattern.accept(this);\r
+    }\r
+    \r
+    @Override\r
+    public void visit(EBind expression) {\r
+        expression.pattern.accept(this);\r
+        expression.value.accept(this);\r
+        expression.in.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(EConstant expression) {\r
+    }\r
+\r
+    @Override\r
+    public void visit(EEnforce expression) {\r
+        expression.query.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(EError expression) {\r
+    }\r
+\r
+    @Override\r
+    public void visit(EExternalConstant expression) {\r
+    }\r
+\r
+    @Override\r
+    public void visit(EFieldAccess expression) {\r
+        expression.parent.accept(this);\r
+        for(FieldAccessor accessor : expression.accessors)\r
+            accessor.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(EGetConstraint expression) {\r
+        if(expression.evidence != null)\r
+            expression.evidence.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(EIf expression) {\r
+        expression.condition.accept(this);\r
+        expression.then_.accept(this);\r
+        expression.else_.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(EIntegerLiteral expression) {\r
+        if(expression.constraint != null)\r
+            expression.constraint.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(ELambda expression) {\r
+        for(Case case_ : expression.cases)\r
+            visit(case_);\r
+    }\r
+\r
+    public void visit(Case case_) {\r
+        for(Expression pattern : case_.patterns)\r
+            pattern.accept(this);\r
+        case_.value.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(ELambdaType expression) {\r
+        expression.value.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(ELet expression) {\r
+        for(Assignment assignment : expression.assignments)\r
+            visit(assignment);\r
+    }\r
+\r
+    public void visit(Assignment assignment) {\r
+        assignment.pattern.accept(this);\r
+        assignment.value.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(EListComprehension expression) {\r
+        expression.head.accept(this);\r
+        expression.qualifier.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(EListLiteral expression) {\r
+        for(Expression component : expression.components)\r
+            component.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(ELiteral expression) {\r
+    }\r
+\r
+    @Override\r
+    public void visit(EMatch expression) {\r
+        for(Expression s : expression.scrutinee)\r
+            s.accept(this);\r
+        for(Case case_ : expression.cases)\r
+            visit(case_);\r
+    }\r
+\r
+    @Override\r
+    public void visit(EPlaceholder expression) {\r
+        expression.expression.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(ERealLiteral expression) {\r
+        if(expression.constraint != null)\r
+            expression.constraint.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(ERuleset expression) {\r
+        for(DatalogRule rule : expression.rules)\r
+            visit(rule);\r
+        expression.in.accept(this);\r
+    }\r
+\r
+    public void visit(DatalogRule rule) {\r
+        for(Expression parameter : rule.headParameters)\r
+            parameter.accept(this);\r
+        rule.body.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(ESelect expression) {\r
+        expression.query.accept(this);\r
+        expression.expression.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(ESimpleLambda expression) {\r
+        expression.value.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(ESimpleLet expression) {\r
+        expression.value.accept(this);\r
+        expression.in.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(ETransformation expression) {\r
+        expression.seed.accept(this);\r
+    }\r
+    \r
+    @Override\r
+    public void visit(ETypeAnnotation expression) {\r
+        expression.value.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(EVariable expression) {\r
+    }\r
+\r
+    @Override\r
+    public void visit(EWhen expression) {\r
+        expression.query.accept(this);\r
+        expression.action.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(GuardedExpressionGroup expression) {\r
+        for(GuardedExpression gexp : expression.expressions) {\r
+            for(Expression guard : gexp.guards)\r
+                guard.accept(this);\r
+            gexp.value.accept(this);\r
+        }\r
+    }\r
+\r
+    @Override\r
+    public void visit(QAlternative query) {\r
+        for(Query q : query.queries)\r
+            q.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(QAtom query) {\r
+        for(Expression parameter : query.parameters)\r
+            parameter.accept(this);\r
+    }\r
+    \r
+    @Override\r
+    public void visit(QMapping query) {\r
+        for(Expression parameter : query.parameters)\r
+            parameter.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(QConjunction query) {\r
+        for(Query q : query.queries)\r
+            q.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(QDisjunction query) {\r
+        for(Query q : query.queries)\r
+            q.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(QExists query) {\r
+        query.query.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(QNegation query) {\r
+        query.query.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(ExpressionAccessor accessor) {\r
+        accessor.fieldName.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(IdAccessor accessor) {\r
+    }\r
+\r
+    @Override\r
+    public void visit(StringAccessor accessor) {\r
+    }\r
+\r
+    @Override\r
+    public void visit(ListAssignment qualifier) {\r
+        qualifier.pattern.accept(this);\r
+        qualifier.value.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(ListGenerator qualifier) {\r
+        qualifier.pattern.accept(this);\r
+        qualifier.value.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(ListGuard qualifier) {\r
+        qualifier.condition.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(ListSeq qualifier) {\r
+        qualifier.a.accept(this);\r
+        qualifier.b.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(ListThen qualifier) {\r
+        qualifier.left.accept(this);\r
+        qualifier.transformer.accept(this);\r
+        if(qualifier.by != null)\r
+            qualifier.by.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(QIf query) {\r
+        query.condition.accept(this);\r
+        query.thenQuery.accept(this);\r
+        query.elseQuery.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(ECoveringBranchPoint expression) {\r
+        expression.expression.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(EqBasic equation) {\r
+        equation.left.accept(this);\r
+        equation.right.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(EqGuard equation) {\r
+        equation.guard.accept(this);\r
+    }\r
+\r
+    @Override\r
+    public void visit(EEquations expression) {\r
+        for(Equation equation : expression.equations)\r
+            equation.accept(this);\r
+    }\r
+\r
+}\r