#include "lex.h" #include #include #include #include #include static void print_symbol_node(struct ivy_lexer_symbol_node *node, int depth) { for (int i = 0; i < depth; i++) { fputs(" ", stdout); } b_printf("[cyan]%c[reset]", node->s_char); if (node->s_id != IVY_SYM_NONE) { b_printf(" ([magenta]%s[reset])", ivy_symbol_to_string(node->s_id)); } b_printf("\n"); b_queue_entry *entry = b_queue_first(&node->s_children); while (entry) { struct ivy_lexer_symbol_node *child = b_unbox(struct ivy_lexer_symbol_node, entry, s_entry); print_symbol_node(child, depth + 1); entry = b_queue_next(entry); } } void internal_lexer_print_symbol_tree(struct ivy_lexer *lex) { print_symbol_node(lex->lex_sym_tree, -1); } void internal_lexer_print_keyword_dict(struct ivy_lexer *lex) { b_iterator *it = b_iterator_begin(lex->lex_keywords); b_foreach_ptr(b_dict_item, item, it) { const b_string *kw_name = item->key; enum ivy_keyword kw_id = b_number_get_int(item->value); b_printf( "([magenta]%s[reset]) = [green]%s[reset]\n", ivy_keyword_to_string(kw_id), b_string_ptr(kw_name)); } }