Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/15/21 11:50:57 (2 years ago)
Author:
gkronber
Message:

#3140: merged r18091:18131 from branch to trunk

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/HeuristicLab.Problems.DataAnalysis.Symbolic

  • trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Importer/SymbolicExpressionImporter.cs

    r17180 r18132  
    8585      };
    8686
    87     Constant constant = new Constant();
     87    Number number = new Number();
    8888    Variable variable = new Variable();
    8989    LaggedVariable laggedVariable = new LaggedVariable();
     
    9191    TimeLag timeLag = new TimeLag();
    9292    Integral integral = new Integral();
    93     FactorVariable factorVar = new FactorVariable();
    9493    BinaryFactorVariable binFactorVar = new BinaryFactorVariable();
    9594
     
    9897
    9998    public ISymbolicExpressionTree Import(string str) {
    100       str = str.Replace("(", " ( ").Replace(")", " ) ");
     99      str = str.Replace("(", " ( ").Replace(")", " ) ")
     100        .Replace("<", " < ").Replace(">", " > ")
     101        .Replace("=", " = ");
    101102      ISymbolicExpressionTreeNode root = programRootSymbol.CreateTreeNode();
    102103      ISymbolicExpressionTreeNode start = startSymbol.CreateTreeNode();
     
    160161        Expect(Token.RPAR, tokens);
    161162        return tree;
    162       } else if (tokens.Peek().Symbol == TokenSymbol.NUMBER) {
    163         ConstantTreeNode t = (ConstantTreeNode)constant.CreateTreeNode();
     163      } else if (tokens.Peek().Symbol == TokenSymbol.CONSTANT) {
     164        var t = (INumericTreeNode)number.CreateTreeNode();
    164165        t.Value = tokens.Dequeue().DoubleValue;
    165166        return t;
    166       } else throw new FormatException("Expected function or constant symbol");
     167      } else if (tokens.Peek().Symbol == TokenSymbol.LBRACKET) {
     168        Expect(Token.LBRACKET, tokens);
     169        Expect(Token.NUM, tokens);
     170        var t = (INumericTreeNode)number.CreateTreeNode();
     171        if (tokens.Peek().Symbol == TokenSymbol.EQ) {
     172          Expect(Token.EQ, tokens);
     173          var initValToken = tokens.Dequeue();
     174          if(initValToken.Symbol == TokenSymbol.CONSTANT) {
     175            t.Value = initValToken.DoubleValue;
     176          } else {
     177            throw new FormatException("Expected a real value");
     178          }
     179        }
     180        Expect(Token.RBRACKET, tokens);
     181        return t;
     182      } else throw new FormatException("Expected function or number symbol");
    167183    }
    168184
     
    225241
    226242      var weights = new List<double>();
    227       while (tokens.Peek().Symbol == TokenSymbol.NUMBER) {
     243      while (tokens.Peek().Symbol == TokenSymbol.CONSTANT) {
    228244        weights.Add(tokens.Dequeue().DoubleValue);
    229245      }
     
    253269
    254270      var weightTok = tokens.Dequeue();
    255       Debug.Assert(weightTok.Symbol == TokenSymbol.NUMBER);
     271      Debug.Assert(weightTok.Symbol == TokenSymbol.CONSTANT);
    256272      t.Weight = weightTok.DoubleValue;
    257273
     
    271287
    272288    private ISymbolicExpressionTreeNode CreateTree(Token token) {
    273       if (token.Symbol != TokenSymbol.SYMB) throw new FormatException("Expected function symbol, but got: " + token.StringValue);
     289      if (token.Symbol != TokenSymbol.SYMB &&
     290          token.Symbol != TokenSymbol.LBRACKET &&  // LBRACKET and RBRACKET are used for <num=..> and as LT, GT operators
     291          token.Symbol != TokenSymbol.RBRACKET 
     292          ) throw new FormatException("Expected function symbol, but got: " + token.StringValue);
    274293      return knownSymbols[token.StringValue].CreateTreeNode();
    275294    }
Note: See TracChangeset for help on using the changeset viewer.