示例#1
0
        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));
        }
示例#2
0
        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);
        }
示例#3
0
 public ISymbol Get(SymbolToken token)
 {
     return(Get(token.Token));
 }