diff options
Diffstat (limited to 'src/compiler/lexer.c')
-rw-r--r-- | src/compiler/lexer.c | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/src/compiler/lexer.c b/src/compiler/lexer.c index 1fbba2f..db1ba64 100644 --- a/src/compiler/lexer.c +++ b/src/compiler/lexer.c @@ -33,6 +33,10 @@ const char *LEXER_TOKEN_STRINGS[] = { "LEXER_TOKEN_BUILTIN_PUTC", "LEXER_TOKEN_BUILTIN_C_LIBRARY", "LEXER_TOKEN_BUILTIN_C_FUNCTION", + "LEXER_TOKEN_BUILTIN_BITWISE_NOT", + "LEXER_TOKEN_BUILTIN_BITWISE_AND", + "LEXER_TOKEN_BUILTIN_BITWISE_XOR", + "LEXER_TOKEN_BUILTIN_BITWISE_OR", "LEXER_TOKEN_KEYWORD_TYPE", "LEXER_TOKEN_KEYWORD_VOID", "LEXER_TOKEN_KEYWORD_I8", @@ -76,6 +80,7 @@ const char *LEXER_TOKEN_STRINGS[] = { "LEXER_TOKEN_SYMBOL_MINUS", "LEXER_TOKEN_SYMBOL_ADDRESS", "LEXER_TOKEN_SYMBOL_LOGICAL_NOT", + "LEXER_TOKEN_SYMBOL_BITWISE_NOT", "LEXER_TOKEN_SYMBOL_MULTIPLY", "LEXER_TOKEN_SYMBOL_DIVIDE", @@ -91,6 +96,10 @@ const char *LEXER_TOKEN_STRINGS[] = { "LEXER_TOKEN_SYMBOL_GREATER_OR_EQUAL", "LEXER_TOKEN_SYMBOL_SMALLER_OR_EQUAL", + "LEXER_TOKEN_SYMBOL_BITWISE_AND", + "LEXER_TOKEN_SYMBOL_BITWISE_XOR", + "LEXER_TOKEN_SYMBOL_BITWISE_OR", + "LEXER_TOKEN_SYMBOL_LOGICAL_AND", "LEXER_TOKEN_SYMBOL_LOGICAL_OR", @@ -126,9 +135,9 @@ const char *LEXER_TOKEN_STRINGS[] = { }; static const char *LEXER_SYMBOL_STRINGS[] = { - ";", "(", ")", "{", "}", "->", ":", "=", "+=", "-=", "*=", - "/=", "%=", ",", "+", "-", "*", "/", "%", "==", "!=", ">", - ">=", "<", "<=", "&", ".*", ".", "!", "&&", "||", "[", "]", + ";", "(", ")", "{", "}", "->", ":", "=", "+=", "-=", "*=", "/=", + "%=", ",", "+", "-", "*", "/", "%", "==", "!=", ">", ">=", "<", + "<=", "&", ".*", ".", "!", "&&", "||", "[", "]", "^", "|", "~", }; static const LexerToken LEXER_SYMBOL_TOKENS[] = { LEXER_TOKEN_SYMBOL_EOL, @@ -164,6 +173,9 @@ static const LexerToken LEXER_SYMBOL_TOKENS[] = { LEXER_TOKEN_SYMBOL_LOGICAL_OR, LEXER_TOKEN_SYMBOL_OPEN_BRACKET, LEXER_TOKEN_SYMBOL_CLOSE_BRACKET, + LEXER_TOKEN_SYMBOL_BITWISE_XOR, + LEXER_TOKEN_SYMBOL_BITWISE_OR, + LEXER_TOKEN_SYMBOL_BITWISE_NOT, }; static const size_t LEXER_SYMBOL_SIZE = sizeof(LEXER_SYMBOL_TOKENS) / sizeof(*LEXER_SYMBOL_TOKENS); @@ -229,6 +241,10 @@ static const char *LEXER_BUILTIN_STRINGS[] = { "putc", "c_library", "c_function", + "bitwise_not", + "bitwise_and", + "bitwise_xor", + "bitwise_or", }; static const LexerToken LEXER_BUILTIN_TOKENS[] = { LEXER_TOKEN_BUILTIN_CAST, @@ -253,6 +269,10 @@ static const LexerToken LEXER_BUILTIN_TOKENS[] = { LEXER_TOKEN_BUILTIN_PUTC, LEXER_TOKEN_BUILTIN_C_LIBRARY, LEXER_TOKEN_BUILTIN_C_FUNCTION, + LEXER_TOKEN_BUILTIN_BITWISE_NOT, + LEXER_TOKEN_BUILTIN_BITWISE_AND, + LEXER_TOKEN_BUILTIN_BITWISE_XOR, + LEXER_TOKEN_BUILTIN_BITWISE_OR, }; static const size_t LEXER_BUILTIN_SIZE = sizeof(LEXER_BUILTIN_TOKENS) / sizeof(*LEXER_BUILTIN_TOKENS); @@ -523,6 +543,10 @@ lexerPushClear(LexerNodeArray *array, size_t *array_size, char const *iter, case LEXER_TOKEN_BUILTIN_SIZE_OF: case LEXER_TOKEN_BUILTIN_C_LIBRARY: case LEXER_TOKEN_BUILTIN_C_FUNCTION: + case LEXER_TOKEN_BUILTIN_BITWISE_NOT: + case LEXER_TOKEN_BUILTIN_BITWISE_AND: + case LEXER_TOKEN_BUILTIN_BITWISE_XOR: + case LEXER_TOKEN_BUILTIN_BITWISE_OR: case LEXER_TOKEN_SYMBOL_CLOSE_BRACKET: case LEXER_TOKEN_SYMBOL_OPEN_BRACKET: case LEXER_TOKEN_KEYWORD_SHAPE_SHIFTER: @@ -530,6 +554,10 @@ lexerPushClear(LexerNodeArray *array, size_t *array_size, char const *iter, case LEXER_TOKEN_KEYWORD_CONTINUE: case LEXER_TOKEN_KEYWORD_C_LIBRARY: case LEXER_TOKEN_KEYWORD_C_FUNCTION: + case LEXER_TOKEN_SYMBOL_BITWISE_AND: + case LEXER_TOKEN_SYMBOL_BITWISE_XOR: + case LEXER_TOKEN_SYMBOL_BITWISE_OR: + case LEXER_TOKEN_SYMBOL_BITWISE_NOT: if (*array_size == array->size) { *array_size += 1 + *array_size / 2; array->data = |