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)); }
private static Token EvaluateArithmetic(Token token1, Token token2, Token operatorToken) { //check if both tokens are numeric constants double number1 = double.NaN; double number2 = double.NaN; bool validNumber1 = (token1.Type == TokenType.Constant) && double.TryParse(token1.LinearToken, out number1); bool validNumber2 = (token2.Type == TokenType.Constant) && double.TryParse(token2.LinearToken, out number2); if (validNumber1 && validNumber2) { Operator op = AllOperators.Find(operatorToken.LinearToken); double returnValue = double.NaN; returnValue = op.Execute(number1, number2); returnValue = Math.Round(returnValue, 4); Constant returnValueConstant = new Constant() { Value = returnValue.ToString() }; return (new Token(TokenType.Constant, returnValueConstant)); } else { return (CalcUtilities.CreateNumberConstantToken("1")); } }
public static Token CreateNumberConstantToken(string numberString) { Constant constant = new Constant() { Value = numberString }; return (new Token(TokenType.Constant, constant)); }