TOKEN_TYPE_LITERAL = "LITERAL"
TOKEN_TYPE_KEYWORD = "KEYWORD"
TOKEN_TYPE_NAMESPACE_DECLARATOR = "NAMESPACE-DECLARATOR"
TOKEN_TYPE_IDENTIFIER = "IDENTIFIER"
TOKEN_TYPE_WHITESPACE = "WHITESPACE"
TOKEN_TYPE_OTHER = "OTHER"
TOKEN_TYPE_STATEMENT_END = "STATEMENT_END"
TOKEN_TYPE_ASSIGNMENT = "ASSIGNMENT"
TOKEN_TYPE_EXPRESSION_OPEN = "EXPRESSION_OPEN"
TOKEN_TYPE_EXPRESSION_CLOSE = "EXPRESSION_CLOSE"
TOKEN_TYPE_SCOPE_OPEN = "SCOPE_OPEN"
TOKEN_TYPE_SCOPE_CLOSE = "SCOPE_CLOSE"
TOKEN_TYPE_COLON = "COLON"
TOKEN_TYPE_NOP = "NOP"
TOKEN_TYPE_NOP_STD = "NOP_STD"
TOKEN_TYPE_COMMENT_SINGLE = "COMMENT_SINGLE"
TOKEN_TYPE_COMMENT_MULTI = "COMMENT_MULTI"

SINGLE_CHAR_TOKEN_MAP = {
	";": TOKEN_TYPE_STATEMENT_END,
	"=": TOKEN_TYPE_ASSIGNMENT,
	"(": TOKEN_TYPE_EXPRESSION_OPEN,
	")": TOKEN_TYPE_EXPRESSION_CLOSE,
	"{": TOKEN_TYPE_SCOPE_OPEN,
	"}": TOKEN_TYPE_SCOPE_CLOSE
}

KEYWORDS = ["namespace", "#include", "struct", "auto", "break", "else", "switch",
"typedef", "register", "enum", "case", "extern", "return", "union", "const", "continue",
"for", "default", "goto", "sizeof", "volatile", "do", "if", "static", "while", "#ifndef", "#define",
"#endif", "int", "short", "long", "float", "double", "unsigned", "signed", "char",
"bool", "void", "_Generic", "__VA_ARGS__", "inline", "autofree"]
NAMESPACE_DECLARATORS = ["::"]
NEW_LINE_SEPARATORS = ["\n"]
LITERAL_CONTAINER = ["\""]
STATEMENT_SEPARATORS = ["\n", "\r", "\t", ";", "*", " ", "(", ")", "[", "]", "<", ">", "{", "}", "=", "-", ",", ".", "+", "/", "\\"]
WHITESPACE = ["\n", "\t", "\r", " "]

SUPPORTED_AUTOFREE_NAMESPACES = ["string"]