Compare commits

..

21 Commits

Author SHA1 Message Date
3a737c05d5 Slightly change the valid test input file
All checks were successful
Validate the build / validate-build (push) Successful in 26s
2025-04-02 11:36:33 +02:00
44254614c1 Fix parse_directive grammar rule 2025-04-02 11:36:33 +02:00
6230ade289 Add registers and fix section primitive parser 2025-04-02 11:36:33 +02:00
a436f23601 Fix parser loops in parse_any and parse_consecutive 2025-04-02 11:36:33 +02:00
3e325e4abd Modify main to use the new print ast functionality 2025-04-02 11:36:33 +02:00
c427adbd22 Add more grammar rules to the parser 2025-04-02 11:36:33 +02:00
1bb9425546 Add a parser combinator to parse a delimited list 2025-04-02 11:36:33 +02:00
5c620870c1 make parse_success always skip past trivia in the tokenlist 2025-04-02 11:36:33 +02:00
110a9bc31e TODO: REVIEW ME AND WRITE PROPER MESSAGE
Fix lexer issue where consuming n tokens always fails if there are n
tokens and always succeeds if they aren't n tokens
2025-04-02 11:36:33 +02:00
3af255baeb Use new validator function for parse_token calls on all primitives
Also adds new validated primitives for NODE_SECTION and NODE_REGISTER
2025-04-02 11:36:33 +02:00
d13b6102c1 Fix incorrect error returned in parse_consecutive 2025-04-02 11:36:33 +02:00
4a4523a1f0 Extend parse_token to accept an optional validator function 2025-04-02 11:36:33 +02:00
2733d4fd7e Expose err_parse_no_match in parser_util.h 2025-04-02 11:36:33 +02:00
cbe49b2db5 Add basic parser combinators 2025-04-02 11:36:33 +02:00
b92248ec47 Add "primitive" parsers for all the semantic tokens in the lexer grammar 2025-04-02 11:36:33 +02:00
018bb6ef9a Add basic parser utilities 2025-04-02 11:36:33 +02:00
85fd507004 Add functions to skip over trivia in a tokenlist 2025-04-02 11:36:33 +02:00
0f9e1886cb Fix parse_token to add the correct information to a parse node 2025-04-02 11:36:33 +02:00
d8f3838c50 Partial parser implementation 2025-04-02 11:36:33 +02:00
d3881ac19d FIXME REORDER COMMIT -- Change main so it can parse the ast
FIXME THIS COMMIT NEEDS TO BE REORDERED
FIXME THIS COMMIT NEEDS TO BE REORDERED
FIXME THIS COMMIT NEEDS TO BE REORDERED
FIXME THIS COMMIT NEEDS TO BE REORDERED
2025-04-02 11:36:33 +02:00
e5be1a527e TODO: REVIEW THIS FUNCTION Add function to print AST 2025-04-02 11:36:33 +02:00
2 changed files with 21 additions and 9 deletions

View File

@ -162,26 +162,46 @@ const char *ast_node_id_to_cstr(node_id_t id) {
__builtin_unreachable();
}
/**
* @brief Helper function to print a single AST node with indentation
*
* @param node The node to print
* @param indent Current indentation level
*/
static void ast_node_print_internal(ast_node_t *node, int indent) {
if (node == NULL) {
return;
}
// Print indentation
for (int i = 0; i < indent; i++) {
printf(" ");
}
// Print node type
printf("%s", ast_node_id_to_cstr(node->id));
// Print token value if available
if (node->token_entry && node->token_entry->token.value) {
printf(" \"%s\"", node->token_entry->token.value);
}
printf("\n");
// Recursively print all children with increased indentation
for (size_t i = 0; i < node->len; i++) {
ast_node_print_internal(node->children[i], indent + 1);
}
}
/**
* @brief Prints an AST starting from the given node
*
* Prints a representation of the AST with indentation to show structure.
* Each node's type is shown, and if a node has an associated token value,
* that value is printed in quotes.
*
* @param node The root node of the AST to print
*/
void ast_node_print(ast_node_t *node) {
ast_node_print_internal(node, 0);
}

View File

@ -106,15 +106,7 @@ void ast_node_free(ast_node_t *node);
*/
error_t *ast_node_add_child(ast_node_t *node, ast_node_t *child);
/**
* @brief Prints an AST starting from the given node
*
* Prints a representation of the AST with indentation to show structure.
* Each node's type is shown, and if a node has an associated token value,
* that value is printed in quotes.
*
* @param node The root node of the AST to print
*/
const char *ast_node_id_to_cstr(node_id_t id);
void ast_node_print(ast_node_t *node);
#endif // INCLUDE_SRC_AST_H_