Rename lexer_states to lexer
This commit is contained in:
parent
909bcf3056
commit
0095d8fe61
40
include/lexer/lexer.h
Normal file
40
include/lexer/lexer.h
Normal file
@ -0,0 +1,40 @@
|
||||
#ifndef LEXER_STATES_H
|
||||
#define LEXER_STATES_H
|
||||
|
||||
#include "aliases.h"
|
||||
#include <stdbool.h>
|
||||
|
||||
#define VALID_JSON true
|
||||
#define INVALID_JSON false
|
||||
|
||||
typedef enum {
|
||||
TK_L_BRACE,
|
||||
TK_R_BRACE,
|
||||
TK_L_BRACKET,
|
||||
TK_R_BRACKET,
|
||||
TK_COLON,
|
||||
TK_COMMA,
|
||||
TK_NULL,
|
||||
TK_TRUE,
|
||||
TK_FALSE,
|
||||
TK_STRING_LITERAL,
|
||||
TK_INTEGER_LITERAL,
|
||||
TK_DOUBLE_LITERAL,
|
||||
} token_type_t;
|
||||
|
||||
typedef union {
|
||||
void *no_val;
|
||||
i64 num_int;
|
||||
f64 num_frac;
|
||||
} token_value_t;
|
||||
|
||||
typedef struct {
|
||||
token_type_t type;
|
||||
token_value_t value;
|
||||
} token_t;
|
||||
|
||||
typedef struct lexer lexer_t;
|
||||
|
||||
bool validate_json(char *json);
|
||||
|
||||
#endif // !LEXER_STATES_H
|
@ -1,13 +0,0 @@
|
||||
#ifndef LEXER_STATES_H
|
||||
#define LEXER_STATES_H
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#define VALID_JSON true
|
||||
#define INVALID_JSON false
|
||||
|
||||
typedef struct lexer lexer_t;
|
||||
|
||||
bool validate_json(char *json);
|
||||
|
||||
#endif // !LEXER_STATES_H
|
@ -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);
|
Loading…
Reference in New Issue
Block a user