// file : build2/token -*- C++ -*- // copyright : Copyright (c) 2014-2016 Code Synthesis Ltd // license : MIT; see accompanying LICENSE file #ifndef BUILD2_TOKEN #define BUILD2_TOKEN #include #include namespace build2 { enum class token_type { eos, name, newline, pair_separator, colon, lcbrace, // { rcbrace, // } lsbrace, // [ rsbrace, // ] assign, // = prepend, // =+ append, // += equal, // == not_equal, // != dollar, lparen, rparen }; class token { public: token_type type; bool separated; // Whitespace-separated from the previous token. bool quoted; // Name (or some part of it) was quoted. string value; // Only valid for name. uint64_t line; uint64_t column; public: token (token_type t, bool s, uint64_t l, uint64_t c) : type (t), separated (s), quoted (false), line (l), column (c) {} token (string n, bool s, bool q, uint64_t l, uint64_t c) : type (token_type::name), separated (s), quoted (q), value (move (n)), line (l), column (c) {} }; // Output the token value in a format suitable for diagnostics. // ostream& operator<< (ostream&, const token&); } #endif // BUILD2_TOKEN