]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.spreadsheet/src/org/simantics/spreadsheet/solver/formula/PrintVisitor.java
Adopt spreadsheet changes made in Balas development
[simantics/platform.git] / bundles / org.simantics.spreadsheet / src / org / simantics / spreadsheet / solver / formula / PrintVisitor.java
diff --git a/bundles/org.simantics.spreadsheet/src/org/simantics/spreadsheet/solver/formula/PrintVisitor.java b/bundles/org.simantics.spreadsheet/src/org/simantics/spreadsheet/solver/formula/PrintVisitor.java
new file mode 100644 (file)
index 0000000..1738feb
--- /dev/null
@@ -0,0 +1,168 @@
+package org.simantics.spreadsheet.solver.formula;
+
+import org.simantics.spreadsheet.solver.formula.parser.ast.AstApply;
+import org.simantics.spreadsheet.solver.formula.parser.ast.AstArgList;
+import org.simantics.spreadsheet.solver.formula.parser.ast.AstArithmeticExpression;
+import org.simantics.spreadsheet.solver.formula.parser.ast.AstArray;
+import org.simantics.spreadsheet.solver.formula.parser.ast.AstArrayFormulaReference;
+import org.simantics.spreadsheet.solver.formula.parser.ast.AstBoolean;
+import org.simantics.spreadsheet.solver.formula.parser.ast.AstDouble;
+import org.simantics.spreadsheet.solver.formula.parser.ast.AstFactor;
+import org.simantics.spreadsheet.solver.formula.parser.ast.AstIdentifier;
+import org.simantics.spreadsheet.solver.formula.parser.ast.AstInteger;
+import org.simantics.spreadsheet.solver.formula.parser.ast.AstNothing;
+import org.simantics.spreadsheet.solver.formula.parser.ast.AstNull;
+import org.simantics.spreadsheet.solver.formula.parser.ast.AstRange;
+import org.simantics.spreadsheet.solver.formula.parser.ast.AstRelation;
+import org.simantics.spreadsheet.solver.formula.parser.ast.AstString;
+import org.simantics.spreadsheet.solver.formula.parser.ast.AstTerm;
+import org.simantics.spreadsheet.solver.formula.parser.ast.AstValue;
+import org.simantics.spreadsheet.solver.formula.parser.ast.AstValueVisitor;
+
+public class PrintVisitor implements AstValueVisitor<String> {
+
+    @Override
+    public String visit(AstBoolean astBoolean) {
+        return "" + astBoolean.value;
+    }
+
+    @Override
+    public String visit(AstDouble astFloat) {
+        return "" + astFloat.value;
+    }
+
+    @Override
+    public String visit(AstInteger astInteger) {
+        return "" + astInteger.value;
+    }
+
+    @Override
+    public String visit(AstNull astNull) {
+        return "AstNull";
+    }
+
+    @Override
+    public String visit(AstString astString) {
+        return "\"" + astString.value + "\"";  
+    }
+
+    @Override
+    public String visit(AstRange astRange) {
+        if(astRange.isCell()) {
+            return astRange.first;
+        } else {
+            return astRange.first + ":" + astRange.second;
+        }
+    }
+
+    @Override
+    public String visit(AstArgList astArgList) {
+        StringBuilder b = new StringBuilder();
+        for(int i=0;i<astArgList.values.size();i++) {
+            if(i > 0) b.append(";");
+            b.append(astArgList.values.get(i).accept(this));
+        }
+        return b.toString();
+    }
+
+    @Override
+    public String visit(AstApply astApply) {
+        if(astApply.args == null) {
+            return astApply.value + "()";
+        } else {
+            return astApply.value + "(" + astApply.args.accept(this) + ")";
+        }
+    }
+
+    @Override
+    public String visit(AstRelation astRelation) {
+
+        StringBuilder b = new StringBuilder();
+        b.append(astRelation.left.accept(this));
+        b.append(astRelation.op.trim());
+        b.append(astRelation.right.accept(this));
+        return b.toString();
+
+    }
+
+    @Override
+    public String visit(AstArithmeticExpression exp) {
+
+        StringBuilder b = new StringBuilder();
+        if(exp.prefix != null) b.append(exp.prefix);
+
+        b.append(exp.left.accept(this));
+
+        for(int i=0;i<exp.rightCount();i++) {
+            String op = exp.rightOp(i);
+            b.append(op);
+            AstValue value = exp.rightValue(i);
+            b.append(value.accept(this));
+        }
+
+        return b.toString();
+
+    }
+
+    @Override
+    public String visit(AstTerm exp) {
+
+        StringBuilder b = new StringBuilder();
+
+        b.append(exp.left.accept(this));
+
+        for(int i=0;i<exp.rightCount();i++) {
+            String op = exp.rightOp(i);
+            b.append(op);
+            AstValue value = exp.rightValue(i);
+            b.append(value.accept(this));
+        }
+
+        return b.toString();
+
+    }
+
+    @Override
+    public String visit(AstFactor exp) {
+
+        StringBuilder b = new StringBuilder();
+
+        b.append(exp.left.accept(this));
+
+        for(int i=0;i<exp.rightCount();i++) {
+            String op = exp.rightOp(i);
+            b.append(op);
+            AstValue value = exp.rightValue(i);
+            b.append(value.accept(this));
+        }
+
+        return b.toString();
+
+    }
+
+    @Override
+    public String visit(AstIdentifier id) {
+        return "AstIdentifier";
+    }
+
+    @Override
+    public String visit(AstArray array) {
+        StringBuilder b = new StringBuilder();
+        for(int i=0;i<array.values.size();i++) {
+            if(i > 0) b.append(";");
+            b.append(array.values.get(i).accept(this));
+        }
+        return b.toString();
+    }
+
+    @Override
+    public String visit(AstNothing array) {
+        return "AstNothing";
+    }
+
+    @Override
+    public String visit(AstArrayFormulaReference ref) {
+        return "{" + ref.value.accept(this) + "}";
+    }
+
+}