#include #include #include #include extern void print_lex_token(struct ivy_token *tok) { switch (tok->t_type) { case IVY_TOK_KEYWORD: b_fputs("[magenta]", stdout); break; case IVY_TOK_SYMBOL: b_fputs("[blue]", stdout); break; case IVY_TOK_ATOM: b_fputs("[yellow]", stdout); break; case IVY_TOK_INT: case IVY_TOK_DOUBLE: b_fputs("[yellow]", stdout); break; case IVY_TOK_LABEL: b_fputs("[red]", stdout); break; case IVY_TOK_IDENT: b_fputs("[cyan]", stdout); break; case IVY_TOK_STRING: b_fputs("[green]", stdout); break; case IVY_TOK_STR_START: b_fputs("[green]", stdout); break; case IVY_TOK_STR_END: b_fputs("[green]", stdout); break; case IVY_TOK_LINEFEED: b_fputs("[bright,black]", stdout); break; default: break; } printf("%s", ivy_lex_token_type_to_string(tok->t_type)); switch (tok->t_type) { case IVY_TOK_IDENT: case IVY_TOK_LABEL: case IVY_TOK_STRING: case IVY_TOK_ATOM: printf("(%s)", tok->t_str); break; case IVY_TOK_SYMBOL: printf("(%s)", ivy_symbol_to_string(tok->t_symbol)); break; case IVY_TOK_KEYWORD: printf("(%s)", ivy_keyword_to_string(tok->t_keyword)); break; case IVY_TOK_INT: printf("(%llu)", tok->t_int); break; case IVY_TOK_DOUBLE: printf("(%lf)", tok->t_double); break; default: break; } b_fputs("[reset]\n", stdout); } extern void print_asm_lex_token(struct ivy_asm_token *tok) { switch (tok->t_type) { case IVY_ASM_TOK_KEYWORD: b_fputs("[magenta]", stdout); break; case IVY_ASM_TOK_SYMBOL: b_fputs("[blue]", stdout); break; case IVY_ASM_TOK_INT: case IVY_ASM_TOK_DOUBLE: b_fputs("[yellow]", stdout); break; case IVY_ASM_TOK_LABEL: b_fputs("[red]", stdout); break; case IVY_ASM_TOK_IDENT: b_fputs("[cyan]", stdout); break; case IVY_ASM_TOK_STRING: b_fputs("[green]", stdout); break; case IVY_ASM_TOK_LINEFEED: b_fputs("[bright,black]", stdout); break; default: break; } printf("%s", ivy_asm_token_type_to_string(tok->t_type)); switch (tok->t_type) { case IVY_ASM_TOK_IDENT: case IVY_ASM_TOK_LABEL: case IVY_ASM_TOK_STRING: printf("(%s)", tok->t_str); break; case IVY_ASM_TOK_SYMBOL: printf("(%s)", ivy_asm_symbol_to_string(tok->t_symbol)); break; case IVY_ASM_TOK_KEYWORD: printf("(%s)", ivy_asm_keyword_to_string(tok->t_keyword)); break; case IVY_ASM_TOK_INT: if (tok->t_int.sign) { printf("(%lld)", tok->t_int.v); } else { printf("(%llu)", tok->t_int.uv); } break; case IVY_ASM_TOK_DOUBLE: printf("(%lf)", tok->t_double); break; default: break; } b_fputs("[reset]\n", stdout); }