Beispiel #1
0
        /// <inheritdoc />
        public bool TryTokenize(byte currentByte, IInputBytes inputBytes, out IToken token)
        {
            token = null;

            if (currentByte != '{')
            {
                return(false);
            }

            var builder = new StringBuilder();

            while (inputBytes.MoveNext())
            {
                if (inputBytes.CurrentByte == '}')
                {
                    break;
                }

                builder.Append((char)inputBytes.CurrentByte);
            }

            var parts = builder.ToString().Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);

            var tokens = new List <IToken>();

            foreach (var part in parts)
            {
                if (char.IsNumber(part[0]) || part[0] == '-')
                {
                    if (decimal.TryParse(part, NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out var value))
                    {
                        tokens.Add(new NumericToken(value));
                    }
                    else
                    {
                        tokens.Add(OperatorToken.Create(part));
                    }

                    continue;
                }

                if (part[0] == '/')
                {
                    tokens.Add(NameToken.Create(part.Substring(1)));
                    continue;
                }

                if (part[0] == '(' && part[part.Length - 1] == ')')
                {
                    tokens.Add(new StringToken(part));
                    continue;
                }

                tokens.Add(OperatorToken.Create(part));
            }

            token = new ArrayToken(tokens);

            return(true);
        }
Beispiel #2
0
        public bool TryTokenize(byte currentByte, IInputBytes inputBytes, out IToken token)
        {
            token = null;

            if (ReadHelper.IsWhitespace(currentByte))
            {
                return(false);
            }

            var builder = stringBuilder;

            builder.Append((char)currentByte);
            while (inputBytes.MoveNext())
            {
                if (ReadHelper.IsWhitespace(inputBytes.CurrentByte))
                {
                    break;
                }

                if (inputBytes.CurrentByte == '<' || inputBytes.CurrentByte == '[' ||
                    inputBytes.CurrentByte == '/' || inputBytes.CurrentByte == ']' ||
                    inputBytes.CurrentByte == '>' || inputBytes.CurrentByte == '(' ||
                    inputBytes.CurrentByte == ')')
                {
                    break;
                }

                builder.Append((char)inputBytes.CurrentByte);
            }

            var text = builder.ToString();

            builder.Clear();

            switch (text)
            {
            case "true":
                token = BooleanToken.True;
                break;

            case "false":
                token = BooleanToken.False;
                break;

            case "null":
                token = NullToken.Instance;
                break;

            default:
                token = OperatorToken.Create(text);
                break;
            }

            return(true);
        }
Beispiel #3
0
 //Adds an operator token to the token list
 public void AddOperator(char op)
 {
     tokens.Add(OperatorToken.Create(op));
 }