Compare commits
1 Commits
9ea1da549f
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 964034b203 |
@@ -7,6 +7,7 @@
|
|||||||
typedef enum {
|
typedef enum {
|
||||||
EVALUATOR_OK,
|
EVALUATOR_OK,
|
||||||
EVALUATOR_MATH_ERR,
|
EVALUATOR_MATH_ERR,
|
||||||
|
EVALUATOR_DIVISION_BY_ZERO,
|
||||||
EVALUATOR_INVALID_PARSING,
|
EVALUATOR_INVALID_PARSING,
|
||||||
EVALUATOR_INVALID_TREE, // just to shut up the compiler with the swithces
|
EVALUATOR_INVALID_TREE, // just to shut up the compiler with the swithces
|
||||||
} EvaluatorErr;
|
} EvaluatorErr;
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ typedef struct {
|
|||||||
union {
|
union {
|
||||||
ParserErr err;
|
ParserErr err;
|
||||||
struct {
|
struct {
|
||||||
Arena arena;
|
Arena *arena;
|
||||||
Node *tree;
|
Node *tree;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ typedef enum {
|
|||||||
|
|
||||||
|
|
||||||
TokenizeResult tokenize(const char *input) {
|
TokenizeResult tokenize(const char *input) {
|
||||||
ArrayList *arr = arraylist_init(64, sizeof(Token));
|
ArrayList *arr;
|
||||||
|
arraylist_init(&arr, 64, sizeof(Token));
|
||||||
size_t offset = 0;
|
size_t offset = 0;
|
||||||
|
|
||||||
while (input[offset] != '\0') {
|
while (input[offset] != '\0') {
|
||||||
|
|||||||
@@ -296,10 +296,12 @@ ParserResult parse(TokenizeResult tokens) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
ArraySlice *context = arraylist_slice(tokens.arr, 0, arraylist_size(tokens.arr));
|
ArraySlice *context;
|
||||||
Arena arena = arena_init(sizeof(Node) * arraylist_size(tokens.arr)).arena;
|
arraylist_slice(&context, tokens.arr, 0, arraylist_size(tokens.arr));
|
||||||
|
Arena *arena;
|
||||||
|
arena_init(&arena, sizeof(Node) * arraylist_size(tokens.arr));
|
||||||
|
|
||||||
TreeResult result = parse_expr(context, &arena, 0);
|
TreeResult result = parse_expr(context, arena, 0);
|
||||||
if (!result.is_valid) {
|
if (!result.is_valid) {
|
||||||
arena_destroy(&arena);
|
arena_destroy(&arena);
|
||||||
arraylist_destroy(&tokens.arr);
|
arraylist_destroy(&tokens.arr);
|
||||||
|
|||||||
Reference in New Issue
Block a user