#include "../include/data.h" #include "../include/define.h" #include 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; } }