Extract lexer and switch token metadata to helpers

This commit is contained in:
Krzosa Karol
2026-05-12 08:42:11 +02:00
parent df7f1f27a1
commit 4cffa1f69a
4 changed files with 336 additions and 330 deletions

View File

@@ -57,111 +57,117 @@ typedef enum {
TOK_LSHIFT,
TOK_RSHIFT,
} Token_Kind;
char *token_to_op[] = {
[TOK_LPAREN] = "(",
[TOK_RPAREN] = ")",
[TOK_LBRACKET] = "[",
[TOK_RBRACKET] = "]",
[TOK_LBRACE] = "{",
[TOK_RBRACE] = "}",
[TOK_COMMA] = ",",
[TOK_DOT] = ".",
[TOK_ARROW] = "->",
[TOK_ELLIPSIS] = "...",
[TOK_COLON] = ":",
[TOK_SEMICOLON] = ";",
[TOK_QUESTION] = "?",
[TOK_HASH] = "#",
[TOK_HASHHASH] = "##",
[TOK_PLUS] = "+",
[TOK_MINUS] = "-",
[TOK_STAR] = "*",
[TOK_SLASH] = "/",
[TOK_PERCENT] = "%",
[TOK_INC] = "++",
[TOK_DEC] = "--",
[TOK_ASSIGN] = "=",
[TOK_PLUS_ASSIGN] = "+=",
[TOK_MINUS_ASSIGN] = "-=",
[TOK_MUL_ASSIGN] = "*=",
[TOK_DIV_ASSIGN] = "/=",
[TOK_MOD_ASSIGN] = "%=",
[TOK_LSHIFT_ASSIGN] = "<<=",
[TOK_RSHIFT_ASSIGN] = ">>=",
[TOK_AND_ASSIGN] = "&=",
[TOK_XOR_ASSIGN] = "^=",
[TOK_OR_ASSIGN] = "|=",
[TOK_EQ] = "==",
[TOK_NEQ] = "!=",
[TOK_LT] = "<",
[TOK_LEQ] = "<=",
[TOK_GT] = ">",
[TOK_GEQ] = ">=",
[TOK_NOT] = "!",
[TOK_BITNOT] = "~",
[TOK_BITAND] = "&",
[TOK_BITOR] = "|",
[TOK_BITXOR] = "^",
[TOK_AND] = "&&",
[TOK_OR] = "||",
[TOK_LSHIFT] = "<<",
[TOK_RSHIFT] = ">>",
};
char *token_to_name[] = {
[TOK_EOF] = "EOF",
[TOK_ERROR] = "ERROR",
[TOK_IDENT] = "IDENT",
[TOK_KEYWORD] = "KEYWORD",
[TOK_INT] = "INT",
[TOK_FLOAT] = "FLOAT",
[TOK_CHAR] = "CHAR",
[TOK_STRING] = "STRING",
[TOK_LPAREN] = "LPAREN",
[TOK_RPAREN] = "RPAREN",
[TOK_LBRACKET] = "LBRACKET",
[TOK_RBRACKET] = "RBRACKET",
[TOK_LBRACE] = "LBRACE",
[TOK_RBRACE] = "RBRACE",
[TOK_COMMA] = "COMMA",
[TOK_DOT] = "DOT",
[TOK_ARROW] = "ARROW",
[TOK_ELLIPSIS] = "ELLIPSIS",
[TOK_COLON] = "COLON",
[TOK_SEMICOLON] = "SEMICOLON",
[TOK_QUESTION] = "QUESTION",
[TOK_HASH] = "HASH",
[TOK_HASHHASH] = "HASHHASH",
[TOK_PLUS] = "PLUS",
[TOK_MINUS] = "MINUS",
[TOK_STAR] = "STAR",
[TOK_SLASH] = "SLASH",
[TOK_PERCENT] = "PERCENT",
[TOK_INC] = "INC",
[TOK_DEC] = "DEC",
[TOK_ASSIGN] = "ASSIGN",
[TOK_PLUS_ASSIGN] = "PLUS_ASSIGN",
[TOK_MINUS_ASSIGN] = "MINUS_ASSIGN",
[TOK_MUL_ASSIGN] = "MUL_ASSIGN",
[TOK_DIV_ASSIGN] = "DIV_ASSIGN",
[TOK_MOD_ASSIGN] = "MOD_ASSIGN",
[TOK_LSHIFT_ASSIGN] = "LSHIFT_ASSIGN",
[TOK_RSHIFT_ASSIGN] = "RSHIFT_ASSIGN",
[TOK_AND_ASSIGN] = "AND_ASSIGN",
[TOK_XOR_ASSIGN] = "XOR_ASSIGN",
[TOK_OR_ASSIGN] = "OR_ASSIGN",
[TOK_EQ] = "EQ",
[TOK_NEQ] = "NEQ",
[TOK_LT] = "LT",
[TOK_LEQ] = "LEQ",
[TOK_GT] = "GT",
[TOK_GEQ] = "GEQ",
[TOK_NOT] = "NOT",
[TOK_BITNOT] = "BITNOT",
[TOK_BITAND] = "BITAND",
[TOK_BITOR] = "BITOR",
[TOK_BITXOR] = "BITXOR",
[TOK_AND] = "AND",
[TOK_OR] = "OR",
[TOK_LSHIFT] = "LSHIFT",
[TOK_RSHIFT] = "RSHIFT",
};
char *token_to_op(Token_Kind kind) {
switch (kind) {
case TOK_LPAREN: return "(";
case TOK_RPAREN: return ")";
case TOK_LBRACKET: return "[";
case TOK_RBRACKET: return "]";
case TOK_LBRACE: return "{";
case TOK_RBRACE: return "}";
case TOK_COMMA: return ",";
case TOK_DOT: return ".";
case TOK_ARROW: return "->";
case TOK_ELLIPSIS: return "...";
case TOK_COLON: return ":";
case TOK_SEMICOLON: return ";";
case TOK_QUESTION: return "?";
case TOK_HASH: return "#";
case TOK_HASHHASH: return "##";
case TOK_PLUS: return "+";
case TOK_MINUS: return "-";
case TOK_STAR: return "*";
case TOK_SLASH: return "/";
case TOK_PERCENT: return "%";
case TOK_INC: return "++";
case TOK_DEC: return "--";
case TOK_ASSIGN: return "=";
case TOK_PLUS_ASSIGN: return "+=";
case TOK_MINUS_ASSIGN: return "-=";
case TOK_MUL_ASSIGN: return "*=";
case TOK_DIV_ASSIGN: return "/=";
case TOK_MOD_ASSIGN: return "%=";
case TOK_LSHIFT_ASSIGN: return "<<=";
case TOK_RSHIFT_ASSIGN: return ">>=";
case TOK_AND_ASSIGN: return "&=";
case TOK_XOR_ASSIGN: return "^=";
case TOK_OR_ASSIGN: return "|=";
case TOK_EQ: return "==";
case TOK_NEQ: return "!=";
case TOK_LT: return "<";
case TOK_LEQ: return "<=";
case TOK_GT: return ">";
case TOK_GEQ: return ">=";
case TOK_NOT: return "!";
case TOK_BITNOT: return "~";
case TOK_BITAND: return "&";
case TOK_BITOR: return "|";
case TOK_BITXOR: return "^";
case TOK_AND: return "&&";
case TOK_OR: return "||";
case TOK_LSHIFT: return "<<";
case TOK_RSHIFT: return ">>";
default: return 0;
}
}
char *token_to_name(Token_Kind kind) {
switch (kind) {
case TOK_EOF: return "EOF";
case TOK_ERROR: return "ERROR";
case TOK_IDENT: return "IDENT";
case TOK_KEYWORD: return "KEYWORD";
case TOK_INT: return "INT";
case TOK_FLOAT: return "FLOAT";
case TOK_CHAR: return "CHAR";
case TOK_STRING: return "STRING";
case TOK_LPAREN: return "LPAREN";
case TOK_RPAREN: return "RPAREN";
case TOK_LBRACKET: return "LBRACKET";
case TOK_RBRACKET: return "RBRACKET";
case TOK_LBRACE: return "LBRACE";
case TOK_RBRACE: return "RBRACE";
case TOK_COMMA: return "COMMA";
case TOK_DOT: return "DOT";
case TOK_ARROW: return "ARROW";
case TOK_ELLIPSIS: return "ELLIPSIS";
case TOK_COLON: return "COLON";
case TOK_SEMICOLON: return "SEMICOLON";
case TOK_QUESTION: return "QUESTION";
case TOK_HASH: return "HASH";
case TOK_HASHHASH: return "HASHHASH";
case TOK_PLUS: return "PLUS";
case TOK_MINUS: return "MINUS";
case TOK_STAR: return "STAR";
case TOK_SLASH: return "SLASH";
case TOK_PERCENT: return "PERCENT";
case TOK_INC: return "INC";
case TOK_DEC: return "DEC";
case TOK_ASSIGN: return "ASSIGN";
case TOK_PLUS_ASSIGN: return "PLUS_ASSIGN";
case TOK_MINUS_ASSIGN: return "MINUS_ASSIGN";
case TOK_MUL_ASSIGN: return "MUL_ASSIGN";
case TOK_DIV_ASSIGN: return "DIV_ASSIGN";
case TOK_MOD_ASSIGN: return "MOD_ASSIGN";
case TOK_LSHIFT_ASSIGN: return "LSHIFT_ASSIGN";
case TOK_RSHIFT_ASSIGN: return "RSHIFT_ASSIGN";
case TOK_AND_ASSIGN: return "AND_ASSIGN";
case TOK_XOR_ASSIGN: return "XOR_ASSIGN";
case TOK_OR_ASSIGN: return "OR_ASSIGN";
case TOK_EQ: return "EQ";
case TOK_NEQ: return "NEQ";
case TOK_LT: return "LT";
case TOK_LEQ: return "LEQ";
case TOK_GT: return "GT";
case TOK_GEQ: return "GEQ";
case TOK_NOT: return "NOT";
case TOK_BITNOT: return "BITNOT";
case TOK_BITAND: return "BITAND";
case TOK_BITOR: return "BITOR";
case TOK_BITXOR: return "BITXOR";
case TOK_AND: return "AND";
case TOK_OR: return "OR";
case TOK_LSHIFT: return "LSHIFT";
case TOK_RSHIFT: return "RSHIFT";
default: return "<invalid-token-kind>";
}
}