Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/16/21 14:23:48 (2 years ago)
Author:
mkommend
Message:

#3136: Merged trunk changes into branch.

Location:
branches/3136_Structural_GP
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/3136_Structural_GP

  • branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic

  • branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Importer/InfixExpressionParser.cs

    r18067 r18146  
    5757  /// </summary>
    5858  public sealed class InfixExpressionParser {
    59     private enum TokenType { Operator, Identifier, Number, LeftPar, RightPar, LeftBracket, RightBracket, Comma, Eq, End, NA };
     59    private enum TokenType { Operator, Identifier, Number, LeftPar, RightPar, LeftBracket, RightBracket, LeftAngleBracket, RightAngleBracket, Comma, Eq, End, NA };
    6060    private class Token {
    6161      internal double doubleVal;
     
    8383    internal static readonly SubFunctionSymbol subFunctionSymbol = new SubFunctionSymbol();
    8484
     85    private Number number = new Number();
    8586    private Constant constant = new Constant();
    8687    private Variable variable = new Variable();
     
    182183            && str[pos] != ']'
    183184            && str[pos] != '}'
    184             && str[pos] != ',') {
     185            && str[pos] != ','
     186            && str[pos] != '>') {
    185187            sb.Append(str[pos]);
    186188            pos++;
     
    267269          pos++;
    268270          yield return new Token { TokenType = TokenType.Comma, strVal = "," };
     271        } else if (str[pos] == '<') {
     272          pos++;
     273          yield return new Token {TokenType = TokenType.LeftAngleBracket, strVal = "<"};
     274        } else if (str[pos] == '>') {
     275          pos++;
     276          yield return new Token {TokenType = TokenType.RightAngleBracket, strVal = ">"};
    269277        } else {
    270278          throw new ArgumentException("Invalid character: " + str[pos]);
     
    328336          foreach (var negTerm in negTerms) sumNeg.AddSubtree(negTerm);
    329337
    330           var constNode = (ConstantTreeNode)constant.CreateTreeNode();
     338          var constNode = (NumberTreeNode)number.CreateTreeNode();
    331339          constNode.Value = -1.0;
    332340          var prod = GetSymbol("*").CreateTreeNode();
     
    537545          }
    538546        }
     547      } else if (next.TokenType == TokenType.LeftAngleBracket) {
     548        Token numberTok = null;
     549        var leftAngleBracket = tokens.Dequeue();
     550        if (leftAngleBracket.TokenType != TokenType.LeftAngleBracket)
     551          throw new ArgumentException("opening bracket < expected");
     552
     553        var idTok = tokens.Dequeue();
     554        if (idTok.TokenType != TokenType.Identifier || idTok.strVal.ToLower() != "num")
     555          throw new ArgumentException("string 'num' expected");
     556
     557        if (tokens.Peek().TokenType == TokenType.Eq) {
     558          var equalTok = tokens.Dequeue();
     559          if (tokens.Peek().TokenType != TokenType.Number)
     560            throw new ArgumentException("No value for number specified.");
     561
     562          numberTok = tokens.Dequeue();
     563        }
     564
     565        var rightAngleBracket = tokens.Dequeue();
     566        if (rightAngleBracket.TokenType != TokenType.RightAngleBracket)
     567          throw new ArgumentException("closing bracket > expected");
     568        var numNode = (NumberTreeNode)number.CreateTreeNode();
     569        if (numberTok != null) numNode.Value = numberTok.doubleVal;
     570        return numNode;
    539571      } else if (next.TokenType == TokenType.Number) {
    540572        var numTok = tokens.Dequeue();
    541         var constNode = (ConstantTreeNode)constant.CreateTreeNode();
    542         constNode.Value = numTok.doubleVal;
    543         return constNode;
     573        var constSy = new Constant {Value = numTok.doubleVal};
     574        return constSy.CreateTreeNode();
    544575      } else {
    545576        throw new ArgumentException(string.Format("unexpected token in expression {0}", next.strVal));
Note: See TracChangeset for help on using the changeset viewer.