| // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef TOOLS_GN_TOKEN_H_ |
| #define TOOLS_GN_TOKEN_H_ |
| |
| #include <string_view> |
| |
| #include "gn/location.h" |
| |
| class Token { |
| public: |
| enum Type { |
| INVALID, |
| INTEGER, // 123 |
| STRING, // "blah" |
| TRUE_TOKEN, // Not "TRUE" to avoid collisions with #define in windows.h. |
| FALSE_TOKEN, |
| |
| // Various operators. |
| EQUAL, |
| PLUS, |
| MINUS, |
| PLUS_EQUALS, |
| MINUS_EQUALS, |
| EQUAL_EQUAL, |
| NOT_EQUAL, |
| LESS_EQUAL, |
| GREATER_EQUAL, |
| LESS_THAN, |
| GREATER_THAN, |
| BOOLEAN_AND, |
| BOOLEAN_OR, |
| BANG, |
| DOT, |
| |
| LEFT_PAREN, |
| RIGHT_PAREN, |
| LEFT_BRACKET, |
| RIGHT_BRACKET, |
| LEFT_BRACE, |
| RIGHT_BRACE, |
| |
| IF, |
| ELSE, |
| IDENTIFIER, // foo |
| COMMA, // , |
| UNCLASSIFIED_COMMENT, // #...\n, of unknown style (will be converted |
| // to one below) |
| LINE_COMMENT, // #...\n on a line alone. |
| SUFFIX_COMMENT, // #...\n on a line following other code. |
| BLOCK_COMMENT, // #...\n line comment, but free-standing. |
| |
| UNCLASSIFIED_OPERATOR, |
| |
| NUM_TYPES |
| }; |
| |
| Token(); |
| Token(const Location& location, Type t, const std::string_view& v); |
| |
| static Token ClassifyAndMake(const Location& location, |
| const std::string_view& v); |
| |
| Type type() const { return type_; } |
| const std::string_view& value() const { return value_; } |
| const Location& location() const { return location_; } |
| void set_location(Location location) { location_ = location; } |
| LocationRange range() const { |
| return LocationRange( |
| location_, |
| Location(location_.file(), location_.line_number(), |
| location_.column_number() + static_cast<int>(value_.size()), |
| location_.byte() + static_cast<int>(value_.size()))); |
| } |
| |
| // Helper functions for comparing this token to something. |
| bool IsIdentifierEqualTo(const char* v) const; |
| bool IsStringEqualTo(const char* v) const; |
| |
| private: |
| Type type_; |
| std::string_view value_; |
| Location location_; |
| }; |
| |
| #endif // TOOLS_GN_TOKEN_H_ |