Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/20/10 01:58:43 (14 years ago)
Author:
swinkler
Message:

Added first complete version of Smalltalk formatter. (#1270)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DataAnalysis.Extensions/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Formatters/SymbolicExpressionTreeSmalltalkStringFormatter.cs

    r4861 r4868  
    4646
    4747    private string FormatRecursively(SymbolicExpressionTreeNode node) {
     48
     49      Symbol symbol = node.Symbol;
     50
     51      if (symbol is ProgramRootSymbol || symbol is StartSymbol)
     52        return FormatRecursively(node.SubTrees[0]);
     53
    4854      StringBuilder stringBuilder = new StringBuilder();
    4955
    50       Symbol symbol = node.Symbol;
     56      stringBuilder.Append("(");
     57
    5158      if (symbol is Addition) {
    5259        for (int i = 0; i < node.SubTrees.Count; i++) {
     
    5764        }
    5865      } else if (symbol is And) {
     66        stringBuilder.Append("(");
    5967        for (int i = 0; i < node.SubTrees.Count; i++) {
    6068          if (i > 0) stringBuilder.Append("&");
    61           stringBuilder.Append("(");
     69          stringBuilder.Append("((");
    6270          stringBuilder.Append(FormatRecursively(node.SubTrees[i]));
    63           stringBuilder.Append(")");
     71          stringBuilder.Append(")>=0)");
    6472        }
     73        stringBuilder.Append(") ifTrue:[1] ifFalse:[-1]");
    6574      } else if (symbol is Average) {
    6675        stringBuilder.Append("(1/");
     
    7988      } else if (symbol is Cosine) {
    8089        stringBuilder.Append(FormatRecursively(node.SubTrees[0]));
    81         stringBuilder.Append("cos");
     90        stringBuilder.Append(" cos");
    8291      } else if (symbol is Division) {
    83         for (int i = 0; i < node.SubTrees.Count; i++) {
    84           if (i > 0) stringBuilder.Append("/");
    85           stringBuilder.Append("(");
    86           stringBuilder.Append(FormatRecursively(node.SubTrees[i]));
     92        if (node.SubTrees.Count == 1) {
     93          stringBuilder.Append("1/");
     94          stringBuilder.Append(FormatRecursively(node.SubTrees[0]));
     95        } else {
     96          stringBuilder.Append(FormatRecursively(node.SubTrees[0]));
     97          stringBuilder.Append("/(");
     98          for (int i = 1; i < node.SubTrees.Count; i++) {
     99            if (i > 1) stringBuilder.Append("*");
     100            stringBuilder.Append(FormatRecursively(node.SubTrees[i]));
     101          }
    87102          stringBuilder.Append(")");
    88103        }
    89104      } else if (symbol is Exponential) {
    90         stringBuilder.Append("not yet implemented");
     105        stringBuilder.Append(FormatRecursively(node.SubTrees[0]));
     106        stringBuilder.Append(" exp");
    91107      } else if (symbol is GreaterThan) {
    92108        stringBuilder.Append("(");
    93109        stringBuilder.Append(FormatRecursively(node.SubTrees[0]));
    94         stringBuilder.Append(">");
     110        stringBuilder.Append(" > ");
    95111        stringBuilder.Append(FormatRecursively(node.SubTrees[1]));
    96         stringBuilder.Append(")");
     112        stringBuilder.Append(") ifTrue: [1] ifFalse: [-1]");
    97113      } else if (symbol is IfThenElse) {
    98114        stringBuilder.Append("(");
    99115        stringBuilder.Append(FormatRecursively(node.SubTrees[0]));
    100         stringBuilder.Append(" ifTrue: [");
     116        stringBuilder.Append(" > 0) ifTrue: [");
    101117        stringBuilder.Append(FormatRecursively(node.SubTrees[1]));
    102118        stringBuilder.Append("] ifFalse: [");
     
    108124        stringBuilder.Append("(");
    109125        stringBuilder.Append(FormatRecursively(node.SubTrees[0]));
    110         stringBuilder.Append("<");
     126        stringBuilder.Append(" < ");
    111127        stringBuilder.Append(FormatRecursively(node.SubTrees[1]));
    112         stringBuilder.Append(")");
     128        stringBuilder.Append(") ifTrue: [1] ifFalse: [-1]");
    113129      } else if (symbol is Logarithm) {
    114130        stringBuilder.Append(FormatRecursively(node.SubTrees[0]));
    115         stringBuilder.Append("log");
     131        stringBuilder.Append("ln");
    116132      } else if (symbol is Multiplication) {
    117133        for (int i = 0; i < node.SubTrees.Count; i++) {
    118134          if (i > 0) stringBuilder.Append("*");
    119           stringBuilder.Append("(");
    120135          stringBuilder.Append(FormatRecursively(node.SubTrees[i]));
    121           stringBuilder.Append(")");
    122136        }
    123137      } else if (symbol is Not) {
    124         stringBuilder.Append("!");
     138        stringBuilder.Append("-");
    125139        stringBuilder.Append(FormatRecursively(node.SubTrees[0]));
    126140      } else if (symbol is Or) {
     141        stringBuilder.Append("(");
    127142        for (int i = 0; i < node.SubTrees.Count; i++) {
    128143          if (i > 0) stringBuilder.Append("|");
    129           stringBuilder.Append("(");
     144          stringBuilder.Append("((");
    130145          stringBuilder.Append(FormatRecursively(node.SubTrees[i]));
    131           stringBuilder.Append(")");
     146          stringBuilder.Append(")>=0)");
    132147        }
     148        stringBuilder.Append(") ifTrue:[1] ifFalse:[-1]");
    133149      } else if (symbol is Sine) {
    134150        stringBuilder.Append(FormatRecursively(node.SubTrees[0]));
    135         stringBuilder.Append("sin");
     151        stringBuilder.Append(" sin");
    136152      } else if (symbol is Subtraction) {
    137         for (int i = 0; i < node.SubTrees.Count; i++) {
    138           if (i > 0) stringBuilder.Append("-");
    139           stringBuilder.Append("(");
    140           stringBuilder.Append(FormatRecursively(node.SubTrees[i]));
    141           stringBuilder.Append(")");
     153        if (node.SubTrees.Count == 1) {
     154          stringBuilder.Append("-");
     155          stringBuilder.Append(FormatRecursively(node.SubTrees[0]));
     156        } else {
     157          stringBuilder.Append(FormatRecursively(node.SubTrees[0]));
     158          for (int i = 1; i < node.SubTrees.Count; i++) {
     159            stringBuilder.Append("-");
     160            stringBuilder.Append(FormatRecursively(node.SubTrees[i]));
     161          }
    142162        }
    143163      } else if (symbol is Tangent) {
     
    145165        stringBuilder.Append("tan");
    146166      } else if (symbol is HeuristicLab.Problems.DataAnalysis.Symbolic.Symbols.Variable) {
    147         stringBuilder.Append("not yet implemented");
     167        VariableTreeNode variableTreeNode = node as VariableTreeNode;
     168        stringBuilder.Append(variableTreeNode.Weight);
     169        stringBuilder.Append("*");
     170        stringBuilder.Append(variableTreeNode.VariableName);
    148171      }
    149172
     
    151174        stringBuilder.Append("ERROR");
    152175      }
     176
     177      stringBuilder.Append(")");
    153178
    154179      return stringBuilder.ToString();
Note: See TracChangeset for help on using the changeset viewer.