1 package org.simantics.spreadsheet.graph;
3 import java.util.HashSet;
6 import org.simantics.spreadsheet.Range;
7 import org.simantics.spreadsheet.graph.parser.ast.AstApply;
8 import org.simantics.spreadsheet.graph.parser.ast.AstArgList;
9 import org.simantics.spreadsheet.graph.parser.ast.AstArithmeticExpression;
10 import org.simantics.spreadsheet.graph.parser.ast.AstArray;
11 import org.simantics.spreadsheet.graph.parser.ast.AstArrayFormulaReference;
12 import org.simantics.spreadsheet.graph.parser.ast.AstBoolean;
13 import org.simantics.spreadsheet.graph.parser.ast.AstDouble;
14 import org.simantics.spreadsheet.graph.parser.ast.AstFactor;
15 import org.simantics.spreadsheet.graph.parser.ast.AstIdentifier;
16 import org.simantics.spreadsheet.graph.parser.ast.AstInteger;
17 import org.simantics.spreadsheet.graph.parser.ast.AstNothing;
18 import org.simantics.spreadsheet.graph.parser.ast.AstNull;
19 import org.simantics.spreadsheet.graph.parser.ast.AstRange;
20 import org.simantics.spreadsheet.graph.parser.ast.AstRelation;
21 import org.simantics.spreadsheet.graph.parser.ast.AstString;
22 import org.simantics.spreadsheet.graph.parser.ast.AstTerm;
23 import org.simantics.spreadsheet.graph.parser.ast.AstValue;
24 import org.simantics.spreadsheet.graph.parser.ast.AstValueVisitor;
25 import org.simantics.spreadsheet.util.SpreadsheetUtils;
27 public class PrintVisitor implements AstValueVisitor<String> {
30 public String visit(AstBoolean astBoolean) {
31 return "" + astBoolean.value;
35 public String visit(AstDouble astFloat) {
36 return "" + astFloat.value;
40 public String visit(AstInteger astInteger) {
41 return "" + astInteger.value;
45 public String visit(AstNull astNull) {
50 public String visit(AstString astString) {
51 return "\"" + astString.value + "\"";
55 public String visit(AstRange astRange) {
56 if(astRange.isCell()) {
57 return astRange.first;
59 return astRange.first + ":" + astRange.second;
64 public String visit(AstArgList astArgList) {
65 StringBuilder b = new StringBuilder();
66 for(int i=0;i<astArgList.values.size();i++) {
67 if(i > 0) b.append(";");
68 b.append(astArgList.values.get(i).accept(this));
74 public String visit(AstApply astApply) {
75 if(astApply.args == null) {
76 return astApply.value + "()";
78 return astApply.value + "(" + astApply.args.accept(this) + ")";
83 public String visit(AstRelation astRelation) {
85 StringBuilder b = new StringBuilder();
86 b.append(astRelation.left.accept(this));
87 b.append(astRelation.op.trim());
88 b.append(astRelation.right.accept(this));
94 public String visit(AstArithmeticExpression exp) {
96 StringBuilder b = new StringBuilder();
97 if(exp.prefix != null) b.append(exp.prefix);
99 b.append(exp.left.accept(this));
101 for(int i=0;i<exp.rightCount();i++) {
102 String op = exp.rightOp(i);
104 AstValue value = exp.rightValue(i);
105 b.append(value.accept(this));
113 public String visit(AstTerm exp) {
115 StringBuilder b = new StringBuilder();
117 b.append(exp.left.accept(this));
119 for(int i=0;i<exp.rightCount();i++) {
120 String op = exp.rightOp(i);
122 AstValue value = exp.rightValue(i);
123 b.append(value.accept(this));
131 public String visit(AstFactor exp) {
133 StringBuilder b = new StringBuilder();
135 b.append(exp.left.accept(this));
137 for(int i=0;i<exp.rightCount();i++) {
138 String op = exp.rightOp(i);
140 AstValue value = exp.rightValue(i);
141 b.append(value.accept(this));
149 public String visit(AstIdentifier id) {
150 return "AstIdentifier";
154 public String visit(AstArray array) {
155 StringBuilder b = new StringBuilder();
156 for(int i=0;i<array.values.size();i++) {
157 if(i > 0) b.append(";");
158 b.append(array.values.get(i).accept(this));
164 public String visit(AstNothing array) {
169 public String visit(AstArrayFormulaReference ref) {
170 return "{" + ref.value.accept(this) + "}";