public bool Matches(CondToken expected) { if (_token != expected) { return(false); } Next(); return(true); }
CondToken ExpectCurrent(CondToken expected) { var result = _tokenizer.Token; if (!_tokenizer.Matches(expected)) { throw new Exception("unexpected token: " + expected); } return(result); }
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; }
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; }
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); } }