1// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef TOOLS_GN_TOKEN_H_ 6#define TOOLS_GN_TOKEN_H_ 7 8#include "base/strings/string_piece.h" 9#include "tools/gn/location.h" 10 11class Token { 12 public: 13 enum Type { 14 INVALID, 15 INTEGER, // 123 16 STRING, // "blah" 17 TRUE_TOKEN, // Not "TRUE" to avoid collisions with #define in windows.h. 18 FALSE_TOKEN, 19 20 // Various operators. 21 EQUAL, 22 PLUS, 23 MINUS, 24 PLUS_EQUALS, 25 MINUS_EQUALS, 26 EQUAL_EQUAL, 27 NOT_EQUAL, 28 LESS_EQUAL, 29 GREATER_EQUAL, 30 LESS_THAN, 31 GREATER_THAN, 32 BOOLEAN_AND, 33 BOOLEAN_OR, 34 BANG, 35 DOT, 36 37 LEFT_PAREN, 38 RIGHT_PAREN, 39 LEFT_BRACKET, 40 RIGHT_BRACKET, 41 LEFT_BRACE, 42 RIGHT_BRACE, 43 44 IF, 45 ELSE, 46 IDENTIFIER, // foo 47 COMMA, // , 48 UNCLASSIFIED_COMMENT, // #...\n, of unknown style (will be converted 49 // to one below) 50 LINE_COMMENT, // #...\n on a line alone. 51 SUFFIX_COMMENT, // #...\n on a line following other code. 52 BLOCK_COMMENT, // #...\n line comment, but free-standing. 53 54 UNCLASSIFIED_OPERATOR, 55 56 NUM_TYPES 57 }; 58 59 Token(); 60 Token(const Location& location, Type t, const base::StringPiece& v); 61 62 Type type() const { return type_; } 63 const base::StringPiece& value() const { return value_; } 64 const Location& location() const { return location_; } 65 LocationRange range() const { 66 return LocationRange( 67 location_, 68 Location(location_.file(), 69 location_.line_number(), 70 location_.char_offset() + static_cast<int>(value_.size()), 71 location_.byte() + static_cast<int>(value_.size()))); 72 } 73 74 // Helper functions for comparing this token to something. 75 bool IsIdentifierEqualTo(const char* v) const; 76 bool IsStringEqualTo(const char* v) const; 77 78 private: 79 Type type_; 80 base::StringPiece value_; 81 Location location_; 82}; 83 84#endif // TOOLS_GN_TOKEN_H_ 85