1 package org.simantics.spreadsheet.solver.formula;
3 import org.simantics.spreadsheet.solver.formula.parser.ast.AstApply;
4 import org.simantics.spreadsheet.solver.formula.parser.ast.AstArgList;
5 import org.simantics.spreadsheet.solver.formula.parser.ast.AstArithmeticExpression;
6 import org.simantics.spreadsheet.solver.formula.parser.ast.AstArray;
7 import org.simantics.spreadsheet.solver.formula.parser.ast.AstArrayFormulaReference;
8 import org.simantics.spreadsheet.solver.formula.parser.ast.AstBoolean;
9 import org.simantics.spreadsheet.solver.formula.parser.ast.AstDouble;
10 import org.simantics.spreadsheet.solver.formula.parser.ast.AstFactor;
11 import org.simantics.spreadsheet.solver.formula.parser.ast.AstIdentifier;
12 import org.simantics.spreadsheet.solver.formula.parser.ast.AstInteger;
13 import org.simantics.spreadsheet.solver.formula.parser.ast.AstNothing;
14 import org.simantics.spreadsheet.solver.formula.parser.ast.AstNull;
15 import org.simantics.spreadsheet.solver.formula.parser.ast.AstRange;
16 import org.simantics.spreadsheet.solver.formula.parser.ast.AstRelation;
17 import org.simantics.spreadsheet.solver.formula.parser.ast.AstString;
18 import org.simantics.spreadsheet.solver.formula.parser.ast.AstTerm;
19 import org.simantics.spreadsheet.solver.formula.parser.ast.AstValue;
20 import org.simantics.spreadsheet.solver.formula.parser.ast.AstValueVisitor;
22 public class PrintVisitor implements AstValueVisitor<String> {
25 public String visit(AstBoolean astBoolean) {
26 return "" + astBoolean.value;
30 public String visit(AstDouble astFloat) {
31 return "" + astFloat.value;
35 public String visit(AstInteger astInteger) {
36 return "" + astInteger.value;
40 public String visit(AstNull astNull) {
45 public String visit(AstString astString) {
46 return "\"" + astString.value + "\"";
50 public String visit(AstRange astRange) {
51 if(astRange.isCell()) {
52 return astRange.first;
54 return astRange.first + ":" + astRange.second;
59 public String visit(AstArgList astArgList) {
60 StringBuilder b = new StringBuilder();
61 for(int i=0;i<astArgList.values.size();i++) {
62 if(i > 0) b.append(";");
63 b.append(astArgList.values.get(i).accept(this));
69 public String visit(AstApply astApply) {
70 if(astApply.args == null) {
71 return astApply.value + "()";
73 return astApply.value + "(" + astApply.args.accept(this) + ")";
78 public String visit(AstRelation astRelation) {
80 StringBuilder b = new StringBuilder();
81 b.append(astRelation.left.accept(this));
82 b.append(astRelation.op.trim());
83 b.append(astRelation.right.accept(this));
89 public String visit(AstArithmeticExpression exp) {
91 StringBuilder b = new StringBuilder();
92 if(exp.prefix != null) b.append(exp.prefix);
94 b.append(exp.left.accept(this));
96 for(int i=0;i<exp.rightCount();i++) {
97 String op = exp.rightOp(i);
99 AstValue value = exp.rightValue(i);
100 b.append(value.accept(this));
108 public String visit(AstTerm exp) {
110 StringBuilder b = new StringBuilder();
112 b.append(exp.left.accept(this));
114 for(int i=0;i<exp.rightCount();i++) {
115 String op = exp.rightOp(i);
117 AstValue value = exp.rightValue(i);
118 b.append(value.accept(this));
126 public String visit(AstFactor exp) {
128 StringBuilder b = new StringBuilder();
130 b.append(exp.left.accept(this));
132 for(int i=0;i<exp.rightCount();i++) {
133 String op = exp.rightOp(i);
135 AstValue value = exp.rightValue(i);
136 b.append(value.accept(this));
144 public String visit(AstIdentifier id) {
145 return "AstIdentifier";
149 public String visit(AstArray array) {
150 StringBuilder b = new StringBuilder();
151 for(int i=0;i<array.values.size();i++) {
152 if(i > 0) b.append(";");
153 b.append(array.values.get(i).accept(this));
159 public String visit(AstNothing array) {
164 public String visit(AstArrayFormulaReference ref) {
165 return "{" + ref.value.accept(this) + "}";