estyle/estyle/lexer/tocken.cpp

130 lines
5.8 KiB
C++

/**
* @author Edouard DUPIN
* @copyright 2017, Edouard DUPIN, all right reserved
* @license MPL-2 (see license file)
*/
#include <estyle/lexer/tocken.hpp>
etk::String estyle::lexer::toString(estyle::lexer::tocken _token) {
if (_token>32 && _token<128) {
char buf[4] = "' '";
buf[1] = (char)_token;
return buf;
}
switch (_token) {
case estyle::lexer::END_OF_FILE: return "EOF";
case estyle::lexer::ID: return "ID";
case estyle::lexer::INTEGER: return "INTEGER value";
case estyle::lexer::FLOAT: return "FLOAT value";
case estyle::lexer::STRING: return "STRING \"\" value";
case estyle::lexer::SIMPLE_QUOTE_STRING: return "STRING '' value";
case estyle::lexer::BOOLEAN: return "BOOLEAN value";
case estyle::lexer::EQUAL: return "=";
case estyle::lexer::EQUAL_EQUAL: return "==";
case estyle::lexer::NOT: return "!";
case estyle::lexer::NOT_EQUAL: return "!=";
case estyle::lexer::LESS: return "<";
case estyle::lexer::LESS_EQUAL: return "<=";
case estyle::lexer::GREATER: return ">";
case estyle::lexer::GREATER_EQUAL: return ">=";
case estyle::lexer::PLUS: return "+";
case estyle::lexer::MINUS: return "-";
case estyle::lexer::PLUS_EQUAL: return "+=";
case estyle::lexer::MINUS_EQUAL: return "-=";
case estyle::lexer::PLUS_PLUS: return "++";
case estyle::lexer::MINUS_MINUS: return "--";
case estyle::lexer::AND: return "&";
case estyle::lexer::AND_EQUAL: return "&=";
case estyle::lexer::AND_AND: return "&&";
case estyle::lexer::OR: return "|";
case estyle::lexer::OR_EQUAL: return "|=";
case estyle::lexer::OR_OR: return "||";
case estyle::lexer::XOR: return "^";
case estyle::lexer::XOR_EQUAL: return "^=";
case estyle::lexer::COLON: return ":";
case estyle::lexer::SEMICOLON: return ";";
case estyle::lexer::PARENTHESE_IN: return "(";
case estyle::lexer::PARENTHESE_OUT: return ")";
case estyle::lexer::BRACKET_IN: return "[";
case estyle::lexer::BRACKET_OUT: return "]";
case estyle::lexer::BRACE_IN: return "{";
case estyle::lexer::BRACE_OUT: return "}";
case estyle::lexer::DEVIDE: return "/";
case estyle::lexer::MULTIPLY: return "*";
case estyle::lexer::DEVIDE_EQUAL: return "/=";
case estyle::lexer::MULTIPLY_EQUAL: return "*=";
//case estyle::lexer::QUESTION: return "?";
case estyle::lexer::DOT: return ".";
case estyle::lexer::COMA: return ",";
case estyle::lexer::POUCENT: return "%";
// reserved words
case estyle::lexer::RESERVED_COMMENT_1_LINE: return "COMMENT 1";
case estyle::lexer::RESERVED_COMMENT_N_LINE: return "COMMENT N";
case estyle::lexer::RESERVED_DOCUMENTATION_1_LINE: return "DOCUMENTATION 1";
case estyle::lexer::RESERVED_DOCUMENTATION_N_LINE: return "DOCUMENTATION N";
case estyle::lexer::RESERVED_IF: return "if";
case estyle::lexer::RESERVED_ELSE: return "else";
case estyle::lexer::RESERVED_DO: return "do";
case estyle::lexer::RESERVED_WHILE: return "while";
case estyle::lexer::RESERVED_FOR: return "for";
case estyle::lexer::RESERVED_SWITCH: return "switch";
case estyle::lexer::RESERVED_CASE: return "case";
case estyle::lexer::RESERVED_BREAK: return "break";
case estyle::lexer::RESERVED_CONTINUE: return "continue";
case estyle::lexer::RESERVED_RETURN: return "return";
case estyle::lexer::RESERVED_NEW: return "new";
case estyle::lexer::RESERVED_DELETE: return "delete";
case estyle::lexer::RESERVED_PRIVATE: return "private";
case estyle::lexer::RESERVED_PUBLIC: return "public";
case estyle::lexer::RESERVED_PROTECTED: return "protected";
case estyle::lexer::RESERVED_NEW_LINE: return "\\n";
case estyle::lexer::RESERVED_CONST: return "const";
case estyle::lexer::RESERVED_STATIC: return "static";
case estyle::lexer::RESERVED_MUTABLE: return "mutable";
case estyle::lexer::RESERVED_VIRTUAL: return "virtual";
case estyle::lexer::RESERVED_INLINE: return "inline";
case estyle::lexer::RESERVED_FINAL: return "final";
case estyle::lexer::RESERVED_DEFAULT: return "default";
case estyle::lexer::RESERVED_INT: return "int";
case estyle::lexer::RESERVED_LONG: return "long";
case estyle::lexer::RESERVED_SHORT: return "short";
case estyle::lexer::RESERVED_SIGNED: return "signed";
case estyle::lexer::RESERVED_UNSIGNED: return "unsigned";
case estyle::lexer::RESERVED_NAMESPACE: return "namespace";
case estyle::lexer::RESERVED_CLASS: return "class";
case estyle::lexer::RESERVED_STRUCT: return "struct";
case estyle::lexer::BASIC_TYPE_INTEGER_008: return "int8_t";
case estyle::lexer::BASIC_TYPE_INTEGER_008_UNSIGNED: return "uint8_t";
case estyle::lexer::BASIC_TYPE_INTEGER_016: return "int16_t";
case estyle::lexer::BASIC_TYPE_INTEGER_016_UNSIGNED: return "uint16_t";
case estyle::lexer::BASIC_TYPE_INTEGER_032: return "int32_t";
case estyle::lexer::BASIC_TYPE_INTEGER_032_UNSIGNED: return "uint32_t";
case estyle::lexer::BASIC_TYPE_INTEGER_064: return "int64_t";
case estyle::lexer::BASIC_TYPE_INTEGER_064_UNSIGNED: return "uint64_t";
case estyle::lexer::BASIC_TYPE_INTEGER_128: return "int128_t";
case estyle::lexer::BASIC_TYPE_INTEGER_128_UNSIGNED: return "uint128_t";
case estyle::lexer::BASIC_TYPE_FLOAT_32: return "float";
case estyle::lexer::BASIC_TYPE_FLOAT_64: return "double";
case estyle::lexer::BASIC_TYPE_FLOAT_96: return "triple";
case estyle::lexer::BASIC_TYPE_BOOLEAN: return "bool";
case estyle::lexer::BASIC_TYPE_STD_STRING: return "std::string";
case estyle::lexer::BASIC_TYPE_STD_NULLPTR: return "std::nullptr";
case estyle::lexer::BASIC_TYPE_VOID: return "void";
}
return etk::String("?[") + etk::toString(int32_t(_token)) + "]";
}
etk::Stream& estyle::operator<<(etk::Stream& _os, const enum estyle::lexer::tocken& _obj) {
_os << estyle::lexer::toString(_obj);
return _os;
}
namespace etk {
template<>
etk::String toString(const enum estyle::lexer::tocken& _obj) {
return estyle::lexer::toString(_obj);
}
}