// 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 #include // size_t #include // uint64_t #include // move namespace build2 { enum class token_type { eos, name, newline, pair_separator, colon, lcbrace, rcbrace, 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. char pair; // Only valid for pair_separator. std::string value; // Only valid for name. std::uint64_t line; std::uint64_t column; public: token (token_type t, bool s, std::uint64_t l, std::uint64_t c) : type (t), separated (s), quoted (false), line (l), column (c) {} token (char p, bool s, std::uint64_t l, std::uint64_t c) : type (token_type::pair_separator), separated (s), quoted (false), pair (p), line (l), column (c) {} token (std::string n, bool s, bool q, std::uint64_t l, std::uint64_t c) : type (token_type::name), separated (s), quoted (q), value (std::move (n)), line (l), column (c) {} }; // Output the token value in a format suitable for diagnostics. // std::ostream& operator<< (std::ostream&, const token&); } #endif // BUILD2_TOKEN