/* * Character info table. * Copyright (c) 2023-2024, Quinn Stephens and the OSMORA team. * Provided under the BSD 3-Clause license. */ #ifndef _LEXER_CHAR_INFO_H #define _LEXER_CHAR_INFO_H #include #include "lexer/token.h" #define CHAR_HORZ_WS (1 << 0) #define CHAR_VERT_WS (1 << 1) #define CHAR_DIGIT (1 << 2) #define CHAR_XDIGIT (1 << 3) #define CHAR_UPPER (1 << 4) #define CHAR_LOWER (1 << 5) #define CHAR_OPER (1 << 6) #define CHAR_SINGLE (1 << 7) #define CHAR_HEX (CHAR_DIGIT | CHAR_XDIGIT) #define CHAR_XUPPER (CHAR_XDIGIT | CHAR_UPPER) #define CHAR_XLOWER (CHAR_XDIGIT | CHAR_LOWER) #define CHAR_WHITESPACE (CHAR_HORZ_WS | CHAR_VERT_WS) #define CHAR_ALPHA (CHAR_UPPER | CHAR_LOWER) #define CHAR_ALNUM (CHAR_ALPHA | CHAR_DIGIT) #define CHAR_SINGLE_SHIFT 8 #define MAKE_SINGLE(kind) ((kind << CHAR_SINGLE_SHIFT) | CHAR_SINGLE) #define CHAR_COMMA MAKE_SINGLE(TK_COMMA) #define CHAR_DOT MAKE_SINGLE(TK_DOT) #define CHAR_COLON MAKE_SINGLE(TK_COLON) #define CHAR_SEMI MAKE_SINGLE(TK_SEMICOLON) #define CHAR_LPAREN MAKE_SINGLE(TK_LPAREN) #define CHAR_RPAREN MAKE_SINGLE(TK_RPAREN) #define CHAR_LBRACE MAKE_SINGLE(TK_LBRACE) #define CHAR_RBRACE MAKE_SINGLE(TK_RBRACE) #define CHAR_LBRACK MAKE_SINGLE(TK_LBRACK) #define CHAR_RBRACK MAKE_SINGLE(TK_RBRACK) #define CHAR_TILDE MAKE_SINGLE(TK_TILDE) #define CHAR_EQUALS MAKE_SINGLE(TK_EQUALS) #define CHAR_OPER_SHIFT 8 #define MAKE_OPER(kind) ((kind << CHAR_OPER_SHIFT) | CHAR_OPER) #define CHAR_PLUS MAKE_OPER(TK_PLUS) #define CHAR_MINUS MAKE_OPER(TK_MINUS) #define CHAR_STAR MAKE_OPER(TK_STAR) #define CHAR_SLASH MAKE_OPER(TK_SLASH) #define CHAR_PERCENT MAKE_OPER(TK_PERCENT) #define CHAR_EXCLAIM MAKE_OPER(TK_EXCLAMATION) #define CHAR_LESS MAKE_OPER(TK_LESS_THAN) #define CHAR_GREATER MAKE_OPER(TK_GREATER_THAN) #define CHAR_CARET MAKE_OPER(TK_CARET) #define CHAR_AMPER MAKE_OPER(TK_AMPERSAND) #define CHAR_PIPE MAKE_OPER(TK_PIPE) extern uint16_t char_info[256]; #endif /* !_LEXER_CHAR_INFO_H */