Changeset 4823 for branches/SmalltalkExport/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Formatters
- Timestamp:
- 11/17/10 00:04:06 (14 years ago)
- Location:
- branches/SmalltalkExport/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Formatters/3.3
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/SmalltalkExport/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Formatters/3.3/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Formatters.csproj
r4822 r4823 1 <?xml version="1.0" encoding="utf-8"?>1 <?xml version="1.0" encoding="utf-8"?> 2 2 <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 3 3 <PropertyGroup> … … 59 59 <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath> 60 60 </Reference> 61 <Reference Include="HeuristicLab.Problems.DataAnalysis-3.3"> 62 <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis-3.3.dll</HintPath> 63 </Reference> 61 64 <Reference Include="Microsoft.Build.Conversion.v3.5" /> 62 65 <Reference Include="System" /> -
branches/SmalltalkExport/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Formatters/3.3/SymbolicExpressionTreeSmalltalkStringFormatter.cs
r4821 r4823 24 24 using HeuristicLab.Common; 25 25 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 26 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols; 27 using HeuristicLab.Problems.DataAnalysis.Symbolic.Symbols; 26 28 27 29 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Formatters { … … 31 33 public class SymbolicExpressionTreeSmalltalkStringFormatter : NamedItem, ISymbolicExpressionTreeStringFormatter { 32 34 33 public bool Indent { get; set; }34 35 35 [StorableConstructor] 36 36 protected SymbolicExpressionTreeSmalltalkStringFormatter(bool deserializing) : base(deserializing) { } 37 37 protected SymbolicExpressionTreeSmalltalkStringFormatter(SymbolicExpressionTreeSmalltalkStringFormatter original, Cloner cloner) : base(original, cloner) { } 38 public SymbolicExpressionTreeSmalltalkStringFormatter() 39 : base() { 40 Indent = true; 38 public SymbolicExpressionTreeSmalltalkStringFormatter() : base() { } 39 40 public string Format(SymbolicExpressionTree symbolicExpressionTree) { 41 return FormatRecursively(symbolicExpressionTree.Root); 41 42 } 42 43 43 public string Format(SymbolicExpressionTree symbolicExpressionTree) { 44 return FormatRecursively(symbolicExpressionTree.Root, 0); 45 } 44 private string FormatRecursively(SymbolicExpressionTreeNode node) { 45 StringBuilder stringBuilder = new StringBuilder(); 46 46 47 private string FormatRecursively(SymbolicExpressionTreeNode node, int indentLength) { 48 StringBuilder strBuilder = new StringBuilder(); 49 if (Indent) strBuilder.Append(' ', indentLength); 50 strBuilder.Append(".("); 51 // internal nodes or leaf nodes? 52 if (node.SubTrees.Count > 0) { 53 // symbol on same line as '(' 54 strBuilder.AppendLine(node.ToString()); 55 // each subtree expression on a new line 56 // and closing ')' also on new line 57 foreach (var subtree in node.SubTrees) { 58 strBuilder.AppendLine(FormatRecursively(subtree, indentLength + 2)); 47 Symbol symbol = node.Symbol; 48 if (symbol is Addition) { 49 for (int i = 0; i < node.SubTrees.Count; i++) { 50 if (i > 0) stringBuilder.Append("+"); 51 stringBuilder.Append("("); 52 stringBuilder.Append(FormatRecursively(node.SubTrees[i])); 53 stringBuilder.Append(")"); 59 54 } 60 if (Indent) strBuilder.Append(' ', indentLength); 61 strBuilder.Append(")"); 62 } else { 63 // symbol in the same line with as '(' and ')' 64 strBuilder.Append(node.ToString()); 65 strBuilder.Append(")"); 55 } else if (symbol is And) { 56 for (int i = 0; i < node.SubTrees.Count; i++) { 57 if (i > 0) stringBuilder.Append("&"); 58 stringBuilder.Append("("); 59 stringBuilder.Append(FormatRecursively(node.SubTrees[i])); 60 stringBuilder.Append(")"); 61 } 62 } else if (symbol is Average) { 63 stringBuilder.Append("(1/"); 64 stringBuilder.Append(node.SubTrees.Count); 65 stringBuilder.Append(")*("); 66 for (int i = 0; i < node.SubTrees.Count; i++) { 67 if (i > 0) stringBuilder.Append("+"); 68 stringBuilder.Append("("); 69 stringBuilder.Append(FormatRecursively(node.SubTrees[i])); 70 stringBuilder.Append(")"); 71 } 72 stringBuilder.Append(")"); 73 } else if (symbol is Constant) { 74 ConstantTreeNode constantTreeNode = node as ConstantTreeNode; 75 stringBuilder.Append(constantTreeNode.Value); 76 } else if (symbol is Cosine) { 77 stringBuilder.Append(FormatRecursively(node.SubTrees[0])); 78 stringBuilder.Append("cos"); 79 } else if (symbol is Division) { 80 for (int i = 0; i < node.SubTrees.Count; i++) { 81 if (i > 0) stringBuilder.Append("/"); 82 stringBuilder.Append("("); 83 stringBuilder.Append(FormatRecursively(node.SubTrees[i])); 84 stringBuilder.Append(")"); 85 } 86 } else if (symbol is Exponential) { 87 stringBuilder.Append("not yet implemented"); 88 } else if (symbol is GreaterThan) { 89 stringBuilder.Append("("); 90 stringBuilder.Append(FormatRecursively(node.SubTrees[0])); 91 stringBuilder.Append(">"); 92 stringBuilder.Append(FormatRecursively(node.SubTrees[1])); 93 stringBuilder.Append(")"); 94 } else if (symbol is IfThenElse) { 95 stringBuilder.Append("("); 96 stringBuilder.Append(FormatRecursively(node.SubTrees[0])); 97 stringBuilder.Append(" ifTrue: ["); 98 stringBuilder.Append(FormatRecursively(node.SubTrees[1])); 99 stringBuilder.Append("] ifFalse: ["); 100 stringBuilder.Append(FormatRecursively(node.SubTrees[2])); 101 stringBuilder.Append("] )"); 102 } else if (symbol is LaggedVariable) { 103 stringBuilder.Append("not implemented"); 104 } else if (symbol is LessThan) { 105 stringBuilder.Append("("); 106 stringBuilder.Append(FormatRecursively(node.SubTrees[0])); 107 stringBuilder.Append("<"); 108 stringBuilder.Append(FormatRecursively(node.SubTrees[1])); 109 stringBuilder.Append(")"); 110 } else if (symbol is Logarithm) { 111 stringBuilder.Append(FormatRecursively(node.SubTrees[0])); 112 stringBuilder.Append("log"); 113 } else if (symbol is Multiplication) { 114 for (int i = 0; i < node.SubTrees.Count; i++) { 115 if (i > 0) stringBuilder.Append("*"); 116 stringBuilder.Append("("); 117 stringBuilder.Append(FormatRecursively(node.SubTrees[i])); 118 stringBuilder.Append(")"); 119 } 120 } else if (symbol is Not) { 121 stringBuilder.Append("!"); 122 stringBuilder.Append(FormatRecursively(node.SubTrees[0])); 123 } else if (symbol is Or) { 124 for (int i = 0; i < node.SubTrees.Count; i++) { 125 if (i > 0) stringBuilder.Append("|"); 126 stringBuilder.Append("("); 127 stringBuilder.Append(FormatRecursively(node.SubTrees[i])); 128 stringBuilder.Append(")"); 129 } 130 } else if (symbol is Sine) { 131 stringBuilder.Append(FormatRecursively(node.SubTrees[0])); 132 stringBuilder.Append("sin"); 133 } else if (symbol is Subtraction) { 134 for (int i = 0; i < node.SubTrees.Count; i++) { 135 if (i > 0) stringBuilder.Append("-"); 136 stringBuilder.Append("("); 137 stringBuilder.Append(FormatRecursively(node.SubTrees[i])); 138 stringBuilder.Append(")"); 139 } 140 } else if (symbol is Tangent) { 141 stringBuilder.Append(FormatRecursively(node.SubTrees[0])); 142 stringBuilder.Append("tan"); 143 } else if (symbol is HeuristicLab.Problems.DataAnalysis.Symbolic.Symbols.Variable) { 144 stringBuilder.Append("not yet implemented"); 66 145 } 67 return strBuilder.ToString(); 146 147 else { 148 stringBuilder.Append("ERROR"); 149 } 150 151 return stringBuilder.ToString(); 68 152 } 69 153
Note: See TracChangeset
for help on using the changeset viewer.