From fa32ad3224b3e362e5f79eee8785334f4bebdbc8 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sat, 12 Feb 2022 19:06:09 +0100 Subject: Add boilerplate for parser --- src/lexer.c | 62 +------------------------------------------------------------ 1 file changed, 1 insertion(+), 61 deletions(-) (limited to 'src/lexer.c') diff --git a/src/lexer.c b/src/lexer.c index 5175b1c..f63ff4f 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -141,67 +141,6 @@ is_delimiter(char c) { return false; } -size_t -scan_number_token(Scanner *scanner) { - // TODO: This looks like more a parsing problem than lexer, - // consider moving it there. If starts with `-` and there is no - // delimiter after, or if it starts with a number, it is - // TOKEN_NUMBER. - char first = scan_next(scanner); - char second = scan_peek(scanner); - size_t n = 1; - if (first == '0' && !is_delimiter(second)) { - if (second == 'x') { - // Hex constant. - scan_next(scanner); - n++; - if (is_delimiter(scan_peek(scanner))) { - return 0; - } - while (!is_delimiter(scan_peek(scanner))) { - char c = scan_next(scanner); - if (!(c >= '0' && c <= '9') && - !(c >= 'a' && c <= 'f') && - !(c >= 'A' && c <= 'F')) { - return 0; - } - n++; - } - return n; - } else if (second == 'b') { - // Binary constant. - scan_next(scanner); - n++; - if (is_delimiter(scan_peek(scanner))) { - return 0; - } - while (!is_delimiter(scan_peek(scanner))) { - char c = scan_next(scanner); - if (!(c == '0' || c == '1')) { - return 0; - } - n++; - } - } - } - - // Decimal number or floating point. - bool has_dot = false; - while (!is_delimiter(scan_peek(scanner))) { - char c = scan_next(scanner); - if (c == '.') { - if (has_dot) { - return 0; - } - has_dot = true; - } else if (!(c >= '0' && c <= '9')) { - return 0; - } - n++; - } - return n; -} - TokenType find_token_type(const StringView value) { for (size_t i = 0; i < sizeof(keywords) / sizeof(Keyword); i++) { @@ -285,6 +224,7 @@ tokenize(const StringView *sv) { } size_t n = 1; bool is_number = c == '-' && !is_delimiter(scan_peek(&scanner)); + is_number = c == '+' && !is_delimiter(scan_peek(&scanner)); is_number = is_number || (c >= '0' && c <= '9'); if (is_number) { while (!is_delimiter(scan_peek(&scanner))) { -- cgit v1.2.1