fix: tests and main

This commit is contained in:
2026-05-13 18:48:14 -06:00
parent 3ec73559ee
commit ab791dbc9b
8 changed files with 24 additions and 205 deletions

View File

@@ -27,7 +27,11 @@ EvaluatorResult evaluate_binary(Node *tree) {
EvaluatorResult left_result = evaluate_tree(left);
EvaluatorResult right_result = evaluate_tree(right);
if (!left_result.is_valid || !right_result.is_valid) {
if (!left_result.is_valid) {
return left_result;
}
if (!left_result.is_valid) {
return left_result;
}

View File

@@ -5,7 +5,7 @@
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <string.h>
#include <limits.h>
typedef enum {
@@ -18,10 +18,7 @@ TokenizeResult tokenize(const char *input) {
ArrayList *arr = arraylist_init(64, sizeof(Token));
size_t offset = 0;
while (
input[offset] != '\n' ||
input[offset] != EOF ||
input[offset] != '\0') {
while (input[offset] != '\0') {
if (isdigit(input[offset])) {
TokenResult result = tokenize_number(input, &offset);
@@ -69,14 +66,14 @@ TokenResult tokenize_number(const char *input, size_t *offset) {
// read number
size_t current = *offset;
while (isdigit(input[current])) {
buf[buf_pos] = input[current];
if (buf_pos >= sizeof(buf)) {
if (buf_pos >= sizeof(buf) - 1) {
return (TokenResult) {
.is_valid = false,
.err = LEXER_BUF_OVERFLOW};
}
buf[buf_pos] = input[current];
current++;
buf_pos++;
}
@@ -93,7 +90,7 @@ TokenResult tokenize_number(const char *input, size_t *offset) {
new_token.num = result.num;
*offset = current;
*offset = current - 1;
return (TokenResult) {.is_valid = true, .token = new_token};
}

View File

@@ -18,12 +18,11 @@ int main(void) {
}
buf[pos] = '\0';
TokenizeResult tokens = tokenize(buf);
EvaluatorResult result = evaluate(parse(tokenize(buf)));
if (!result.is_valid) {
puts("Error checando expresion");
}
ParseResult par = parse(tokens);
int64_t result = evaluate(par);
printf("El resultado es: %" PRIi64 "\n", result);
printf("El resultado es: %" PRIi64 "\n", result.val);
return EXIT_SUCCESS;
}

View File

@@ -30,7 +30,7 @@ ParserU8Result prefix_rbp(Token token) {
}
ParserU8Result postfix_lbp(Token token) {
if (token.type != TOKEN_INTEGER) {
if (token.type != TOKEN_OPERATOR) {
return (ParserU8Result) {
.is_valid = false,
.err = PARSER_UNEXPECTED_TOKEN,
@@ -52,7 +52,7 @@ ParserU8Result postfix_lbp(Token token) {
}
ParserU8Result infix_lbp(Token token) {
if (token.type != TOKEN_INTEGER) {
if (token.type != TOKEN_OPERATOR) {
return (ParserU8Result) {
.is_valid = false,
.err = PARSER_UNEXPECTED_TOKEN,
@@ -86,7 +86,7 @@ ParserU8Result infix_lbp(Token token) {
}
ParserU8Result infix_rbp(Token token) {
if (token.type != TOKEN_INTEGER) {
if (token.type != TOKEN_OPERATOR) {
return (ParserU8Result) {
.is_valid = false,
.err = PARSER_UNEXPECTED_TOKEN,