#ifndef TOKEN_H #define TOKEN_H #include #include #include #include #define TOKENTYPE_MAPPINGS_COUNT 34 typedef enum { //Single-character tokens LParen, RParen, LBrace, RBrace, Comma, Dot, Minus, Plus, Semicolon, Slash, Star, //One or two character tokens Bang, Bang_Equal, Equal, Equal_Equal, Greater, Greater_Equal, Less, Less_Equal, //Literals Identifier, String, Number, //Keywords AND, CLASS, ELSE, FALSE, FUN, FOR, IF, NIL, OR, PRINT, RETURN, SUPER, THIS, TRUE, VAR, WHILE, EndOF } TokenType; typedef struct { const char* lexeme; TokenType type; } KeyValuePair; typedef struct { TokenType type; const char* lexeme; int line; int length; } Token; extern KeyValuePair TokenTypeMappings[TOKENTYPE_MAPPINGS_COUNT]; //If the first parameter is NULL, the token creation will attempt to infer the lexeme from the TokenType. Token* CreateToken(const char*, int, TokenType); #endif