Rename lexer_states to lexer

This commit is contained in:
2023-06-18 21:39:50 +01:00
parent 909bcf3056
commit 0095d8fe61
3 changed files with 53 additions and 16 deletions

View File

@@ -1,5 +1,6 @@
#include "lexer_states.h"
#include "lexer.h"
#include "aliases.h"
#include "dstring.h"
#include <assert.h>
#include <ctype.h>
#include <stdbool.h>
@@ -10,6 +11,7 @@
#define MAX_KEYWORD_LENGTH 5
#define UNICODE_LENGTH 4
#define MAX_STACK_CAPACITY 1024
#define STRING_BUF_START_CAPACITY 1024
typedef enum {
// GENERAL STATES
@@ -76,12 +78,13 @@ typedef struct {
} lexer_string_t;
struct lexer {
lexer_state_t current;
state_stack_t stack;
u64 line;
u64 column;
lexer_state_t current;
state_stack_t stack;
lexer_string_t keyword;
lexer_string_t codepoint;
dstr_t *current_string;
};
void stack_push(state_stack_t *stack, lexer_state_t value);
@@ -123,6 +126,13 @@ bool validate_json(char *json) {
lexer.current = LEXER_STATE_START;
lexer.keyword.type = LEXER_STRING_KEYWORD;
lexer.codepoint.type = LEXER_STRING_UNICODE;
lexer.current_string = dstr_with_capacity(STRING_BUF_START_CAPACITY);
if (!lexer.current_string) {
// TODO (Abdelrahman): This is fine for now, but it doesn't make sense to
// return INVALID_JSON if string allocation fails
return INVALID_JSON;
}
for (char *c = json; *c != '\0'; ++c) {
// printf("\nINPUT=>%s\n", c);