]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.spreadsheet.solver.formula;
2
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;
21
22 public class PrintVisitor implements AstValueVisitor<String> {
23
24     @Override
25     public String visit(AstBoolean astBoolean) {
26         return "" + astBoolean.value;
27     }
28
29     @Override
30     public String visit(AstDouble astFloat) {
31         return "" + astFloat.value;
32     }
33
34     @Override
35     public String visit(AstInteger astInteger) {
36         return "" + astInteger.value;
37     }
38
39     @Override
40     public String visit(AstNull astNull) {
41         return "AstNull";
42     }
43
44     @Override
45     public String visit(AstString astString) {
46         return "\"" + astString.value + "\"";  
47     }
48
49     @Override
50     public String visit(AstRange astRange) {
51         if(astRange.isCell()) {
52             return astRange.first;
53         } else {
54             return astRange.first + ":" + astRange.second;
55         }
56     }
57
58     @Override
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));
64         }
65         return b.toString();
66     }
67
68     @Override
69     public String visit(AstApply astApply) {
70         if(astApply.args == null) {
71             return astApply.value + "()";
72         } else {
73             return astApply.value + "(" + astApply.args.accept(this) + ")";
74         }
75     }
76
77     @Override
78     public String visit(AstRelation astRelation) {
79
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));
84         return b.toString();
85
86     }
87
88     @Override
89     public String visit(AstArithmeticExpression exp) {
90
91         StringBuilder b = new StringBuilder();
92         if(exp.prefix != null) b.append(exp.prefix);
93
94         b.append(exp.left.accept(this));
95
96         for(int i=0;i<exp.rightCount();i++) {
97             String op = exp.rightOp(i);
98             b.append(op);
99             AstValue value = exp.rightValue(i);
100             b.append(value.accept(this));
101         }
102
103         return b.toString();
104
105     }
106
107     @Override
108     public String visit(AstTerm exp) {
109
110         StringBuilder b = new StringBuilder();
111
112         b.append(exp.left.accept(this));
113
114         for(int i=0;i<exp.rightCount();i++) {
115             String op = exp.rightOp(i);
116             b.append(op);
117             AstValue value = exp.rightValue(i);
118             b.append(value.accept(this));
119         }
120
121         return b.toString();
122
123     }
124
125     @Override
126     public String visit(AstFactor exp) {
127
128         StringBuilder b = new StringBuilder();
129
130         b.append(exp.left.accept(this));
131
132         for(int i=0;i<exp.rightCount();i++) {
133             String op = exp.rightOp(i);
134             b.append(op);
135             AstValue value = exp.rightValue(i);
136             b.append(value.accept(this));
137         }
138
139         return b.toString();
140
141     }
142
143     @Override
144     public String visit(AstIdentifier id) {
145         return "AstIdentifier";
146     }
147
148     @Override
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));
154         }
155         return b.toString();
156     }
157
158     @Override
159     public String visit(AstNothing array) {
160         return "AstNothing";
161     }
162
163     @Override
164     public String visit(AstArrayFormulaReference ref) {
165         return "{" + ref.value.accept(this) + "}";
166     }
167
168 }