Пример #1
0
 public bool Matches(CondToken expected)
 {
     if (_token != expected)
     {
         return(false);
     }
     Next();
     return(true);
 }
Пример #2
0
        CondToken ExpectCurrent(CondToken expected)
        {
            var result = _tokenizer.Token;

            if (!_tokenizer.Matches(expected))
            {
                throw new Exception("unexpected token: " + expected);
            }
            return(result);
        }
Пример #3
0
 private void TakeRegularIdentifier(int c)
 {
     _builder.Clear();
     _builder.Append((char)c);
     while (IsIdentifierPart(_buffer.Peek()))
     {
         _builder.Append((char)_buffer.Next());
     }
     _value = _builder.ToString();
     _token = CondToken.Identifier;
 }
Пример #4
0
        private void TakeString(int delim)
        {
            _builder.Clear();
            while (true)
            {
                var c = _buffer.Next();
                if (c == Eof)
                {
                    throw Unexpected(c);
                }
                if (c == delim)
                {
                    break;
                }
                _builder.Append((char)c);
            }

            _value = _builder.ToString();
            _token = CondToken.String;
        }
Пример #5
0
        public bool Next()
        {
            while (true)
            {
                var c = _buffer.Next();
                switch (c)
                {
                case Eof:
                    _token = CondToken.Eof;
                    break;

                case ' ':
                case '\t':
                case '\n':
                case '\r':
                case '\u000C':
                    _token = CondToken.Space;
                    continue;

                case '\'':
                case '"':
                    TakeString(c);
                    break;

                case '0':
                case '1':
                case '2':
                case '3':
                case '4':
                case '5':
                case '6':
                case '7':
                case '8':
                case '9':
                    _value = TakeNumber(c);
                    _token = CondToken.Number;
                    break;

                case '.':
                    switch (_buffer.Peek())
                    {
                    case '0':
                    case '1':
                    case '2':
                    case '3':
                    case '4':
                    case '5':
                    case '6':
                    case '7':
                    case '8':
                    case '9':
                        _value = TakeNumber(c);
                        _token = CondToken.Number;
                        break;

                    default:
                        Unexpected(c);
                        break;
                    }

                    break;

                case '=':
                    if (_buffer.Next() == '=')
                    {
                        _token = CondToken.Equal;
                    }
                    else
                    {
                        Unexpected(c);
                    }
                    break;

                case '>':
                    if (_buffer.Peek() == '=')
                    {
                        _token = CondToken.GreaterEqual;
                        _buffer.Next();
                    }
                    else
                    {
                        _token = CondToken.Greater;
                    }

                    break;

                case '<':
                    if (_buffer.Peek() == '=')
                    {
                        _token = CondToken.LowerEqual;
                        _buffer.Next();
                    }
                    else
                    {
                        _token = CondToken.Lower;
                    }

                    break;

                case '!':
                    if (_buffer.Peek() == '=')
                    {
                        _token = CondToken.NotEqual;
                        _buffer.Next();
                    }
                    else
                    {
                        _token = CondToken.Not;
                    }

                    break;

                case '(':
                    _token = CondToken.Lpar;
                    break;

                case ')':
                    _token = CondToken.Rpar;
                    break;

                case ',':
                    _token = CondToken.Comma;
                    break;

                default:
                    if (IsIdentifierStart(c))
                    {
                        TakeRegularIdentifier(c);
                    }
                    else
                    {
                        throw Unexpected(c);
                    }
                    break;
                }

                return(_token != CondToken.Eof);
            }
        }