first commit

This commit is contained in:
Arthur Barraux
2025-06-02 10:27:04 +02:00
commit 04464ec2e7
11 changed files with 819 additions and 0 deletions
+100
View File
@@ -0,0 +1,100 @@
#include "../include/data.h"
#include "../include/define.h"
#include <string.h>
void advance_char(lexer_t *lexer) {
if (lexer->current_char == '\n') {
lexer->line++;
lexer->column = 1;
} else {
lexer->column++;
}
lexer->pos++;
lexer->current_char = lexer->input[lexer->pos];
}
void skip_whitespace(lexer_t *lexer) {
while (isspace(lexer->current_char) && lexer->current_char != '\n') {
advance_char(lexer);
}
}
void skip_comment(lexer_t *lexer) {
if (lexer->current_char == '/' && lexer->input[lexer->pos + 1] == '/') {
while (lexer->current_char != '\n' && lexer->current_char != '\0') {
advance_char(lexer);
}
}
}
// Node creation functions
node_t *create_node(node_type_t type) {
node_t *node = malloc(sizeof(node_t));
if (!node)
return NULL;
memset(node, 0, sizeof(node_t));
node->type = type;
return node;
}
node_t *create_symbol_node(const char *symbol) {
node_t *node = create_node(NODE_SYMBOL);
if (node) {
strncpy(node->data.symbol, symbol, MAX_SYMBOL_LENGTH - 1);
node->data.symbol[MAX_SYMBOL_LENGTH - 1] = '\0';
}
return node;
}
node_t *create_string_node(const char *string) {
node_t *node = create_node(NODE_STRING);
if (node) {
strncpy(node->data.string, string, MAX_STRING_LENGTH - 1);
node->data.string[MAX_STRING_LENGTH - 1] = '\0';
}
return node;
}
node_t *create_number_node(double number) {
node_t *node = create_node(NODE_NUMBER);
if (node) {
node->data.number = number;
}
return node;
}
node_t *create_boolean_node(bool value) {
node_t *node = create_node(NODE_BOOLEAN);
if (node) {
node->data.boolean = value;
}
return node;
}
node_t *create_function_ref_node(const char *function_name) {
node_t *node = create_node(NODE_FUNCTION_REF);
if (node) {
strncpy(node->data.function_ref, function_name, MAX_SYMBOL_LENGTH - 1);
node->data.function_ref[MAX_SYMBOL_LENGTH - 1] = '\0';
}
return node;
}
node_t *create_function_call_node(const char *function_name) {
node_t *node = create_node(NODE_FUNCTION_CALL);
if (node) {
strncpy(node->data.call.function_name, function_name,
MAX_SYMBOL_LENGTH - 1);
node->data.call.function_name[MAX_SYMBOL_LENGTH - 1] = '\0';
node->data.call.arg_count = 0;
}
return node;
}
void add_arg_to_call(node_t *call, node_t *arg) {
if (call->type == NODE_FUNCTION_CALL &&
call->data.call.arg_count < MAX_ARGS) {
call->data.call.args[call->data.call.arg_count++] = arg;
}
}