Changeset 18132 for trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Importer/InfixExpressionParser.cs
- Timestamp:
- 12/15/21 11:50:57 (2 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/3140_NumberSymbol (added) merged: 18091,18093,18100,18112-18121,18123-18131
- Property svn:mergeinfo changed
-
trunk/HeuristicLab.Problems.DataAnalysis.Symbolic
- Property svn:mergeinfo changed
/branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic (added) merged: 18093,18100,18112-18116,18118,18121,18123-18124,18129-18130
- Property svn:mergeinfo changed
-
trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Importer/InfixExpressionParser.cs
r17902 r18132 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; … … 82 82 knownSymbols = new BidirectionalLookup<string, ISymbol>(StringComparer.InvariantCulture, new SymbolComparer()); 83 83 84 private Number number = new Number(); 84 85 private Constant constant = new Constant(); 85 86 private Variable variable = new Variable(); … … 180 181 && str[pos] != ']' 181 182 && str[pos] != '}' 182 && str[pos] != ',') { 183 && str[pos] != ',' 184 && str[pos] != '>') { 183 185 sb.Append(str[pos]); 184 186 pos++; … … 265 267 pos++; 266 268 yield return new Token { TokenType = TokenType.Comma, strVal = "," }; 269 } else if (str[pos] == '<') { 270 pos++; 271 yield return new Token {TokenType = TokenType.LeftAngleBracket, strVal = "<"}; 272 } else if (str[pos] == '>') { 273 pos++; 274 yield return new Token {TokenType = TokenType.RightAngleBracket, strVal = ">"}; 267 275 } else { 268 276 throw new ArgumentException("Invalid character: " + str[pos]); … … 326 334 foreach (var negTerm in negTerms) sumNeg.AddSubtree(negTerm); 327 335 328 var constNode = ( ConstantTreeNode)constant.CreateTreeNode();336 var constNode = (NumberTreeNode)number.CreateTreeNode(); 329 337 constNode.Value = -1.0; 330 338 var prod = GetSymbol("*").CreateTreeNode(); … … 524 532 } 525 533 } 534 } else if (next.TokenType == TokenType.LeftAngleBracket) { 535 Token numberTok = null; 536 var leftAngleBracket = tokens.Dequeue(); 537 if (leftAngleBracket.TokenType != TokenType.LeftAngleBracket) 538 throw new ArgumentException("opening bracket < expected"); 539 540 var idTok = tokens.Dequeue(); 541 if (idTok.TokenType != TokenType.Identifier || idTok.strVal.ToLower() != "num") 542 throw new ArgumentException("string 'num' expected"); 543 544 if (tokens.Peek().TokenType == TokenType.Eq) { 545 var equalTok = tokens.Dequeue(); 546 if (tokens.Peek().TokenType != TokenType.Number) 547 throw new ArgumentException("No value for number specified."); 548 549 numberTok = tokens.Dequeue(); 550 } 551 552 var rightAngleBracket = tokens.Dequeue(); 553 if (rightAngleBracket.TokenType != TokenType.RightAngleBracket) 554 throw new ArgumentException("closing bracket > expected"); 555 var numNode = (NumberTreeNode)number.CreateTreeNode(); 556 if (numberTok != null) numNode.Value = numberTok.doubleVal; 557 return numNode; 526 558 } else if (next.TokenType == TokenType.Number) { 527 559 var numTok = tokens.Dequeue(); 528 var constNode = (ConstantTreeNode)constant.CreateTreeNode(); 560 var constSy = new Constant {Value = numTok.doubleVal}; 561 return constSy.CreateTreeNode(); 562 /*var constNode = (ConstantTreeNode)constant.CreateTreeNode(); 529 563 constNode.Value = numTok.doubleVal; 530 return constNode; 564 return constNode;*/ 531 565 } else { 532 566 throw new ArgumentException(string.Format("unexpected token in expression {0}", next.strVal));
Note: See TracChangeset
for help on using the changeset viewer.