fix: tests and main
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
15
src/lexer.c
15
src/lexer.c
@@ -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};
|
||||
}
|
||||
|
||||
|
||||
11
src/main.c
11
src/main.c
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user