diff options
Diffstat (limited to 'include/lexer/char_info.h')
-rw-r--r-- | include/lexer/char_info.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/include/lexer/char_info.h b/include/lexer/char_info.h new file mode 100644 index 0000000..5987bbf --- /dev/null +++ b/include/lexer/char_info.h @@ -0,0 +1,60 @@ +/* + * 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 <stdint.h> +#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 */ |