public ISymbol ToValue(SymbolToken token) { if (token.Type != SymbolType.Number && token.Type != SymbolType.Variable) { throw new ArgumentException("Not a number", nameof(token)); } if (token.Type == SymbolType.Variable) { return(_ctx.Get(token)); } var s = token.Token; if (!s.Contains(".")) { var i = int.Parse(s); return(new Number(i)); } var f = double.Parse(s); return(new Number(f)); }
public static bool TryParse(string val, out SymbolToken token) { if (SymbolicOperators.ContainsKey(val)) { var type = SymbolicOperators[val]; token = new SymbolToken(type, val); return(true); } if (TextOperators.ContainsKey(val)) { var type = TextOperators[val]; token = new SymbolToken(type, val); return(true); } int integer; if (int.TryParse(val, out integer)) { var type = SymbolType.Number; token = new SymbolToken(type, val); return(true); } double floating; if (double.TryParse(val, out floating)) { var type = SymbolType.Number; token = new SymbolToken(type, val); return(true); } token = null; return(false); }
public ISymbol Get(SymbolToken token) { return(Get(token.Token)); }