public static Resolve ( string text ) : |
||
text | string | |
Результат |
public static Token Resolve(string text)
{
//check if a number-constant
double numberValue;
if (double.TryParse(text, out numberValue))
{
Constant constant = new Constant() { Value = text };
return (new Token(TokenType.Constant, constant));
}
//check if operator
Operator op = AllOperators.Find(text);
if (op != null)
{
return (new Token(TokenType.Operator, op));
}
//this token must be a variable
Variable variable = new Variable() { Name = text };
return (new Token(TokenType.Variable, variable));
}
public static Expression Split(string expressionString) { List <Token> tokens = new List <Token>(); //read the input-expression letter-by-letter and build tokens string alphaNumericString = string.Empty; Token lastOp = CalcUtilities.CreateOperatorToken('X'); for (int index = 0; index < expressionString.Length; index++) { char currentChar = expressionString[index]; if (AllOperators.Find("" + currentChar) != null) //if operator { if (alphaNumericString.Length > 0) { tokens.Add(Token.Resolve(alphaNumericString)); alphaNumericString = string.Empty; } if (lastOp != null && (((Operator)lastOp.TokenObject).PrecedenceLevel < 1 || ((Operator)lastOp.TokenObject).SymbolText != ")")) { if (currentChar == '-') { currentChar = '_'; } } Token op = CalcUtilities.CreateOperatorToken(currentChar); lastOp = op; tokens.Add(op); } else if (Char.IsLetterOrDigit(currentChar) || currentChar == '.') //if alphabet or digit or dot { alphaNumericString += currentChar; lastOp = null; } } //check if any token at last if (alphaNumericString.Length > 0) { tokens.Add(Token.Resolve(alphaNumericString)); } return(new Expression() { Tokens = tokens }); }