Changeset 18146 for branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Importer/InfixExpressionParser.cs
- Timestamp:
- 12/16/21 14:23:48 (2 years ago)
- Location:
- branches/3136_Structural_GP
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3136_Structural_GP
- Property svn:mergeinfo changed
-
branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic
- Property svn:mergeinfo changed
-
branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Importer/InfixExpressionParser.cs
r18067 r18146 57 57 /// </summary> 58 58 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 }; 60 60 private class Token { 61 61 internal double doubleVal; … … 83 83 internal static readonly SubFunctionSymbol subFunctionSymbol = new SubFunctionSymbol(); 84 84 85 private Number number = new Number(); 85 86 private Constant constant = new Constant(); 86 87 private Variable variable = new Variable(); … … 182 183 && str[pos] != ']' 183 184 && str[pos] != '}' 184 && str[pos] != ',') { 185 && str[pos] != ',' 186 && str[pos] != '>') { 185 187 sb.Append(str[pos]); 186 188 pos++; … … 267 269 pos++; 268 270 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 = ">"}; 269 277 } else { 270 278 throw new ArgumentException("Invalid character: " + str[pos]); … … 328 336 foreach (var negTerm in negTerms) sumNeg.AddSubtree(negTerm); 329 337 330 var constNode = ( ConstantTreeNode)constant.CreateTreeNode();338 var constNode = (NumberTreeNode)number.CreateTreeNode(); 331 339 constNode.Value = -1.0; 332 340 var prod = GetSymbol("*").CreateTreeNode(); … … 537 545 } 538 546 } 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; 539 571 } else if (next.TokenType == TokenType.Number) { 540 572 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(); 544 575 } else { 545 576 throw new ArgumentException(string.Format("unexpected token in expression {0}", next.strVal));
Note: See TracChangeset
for help on using the changeset viewer.