frontend: implement function for printing assembly lex tokens

This commit is contained in:
2024-11-19 22:09:32 +00:00
parent 4e8d6e8122
commit adf4e38578
2 changed files with 63 additions and 0 deletions

View File

@@ -1,5 +1,6 @@
#include <blue/term.h>
#include <ivy/lang/lex.h>
#include <ivy/asm/lex.h>
#include <stdio.h>
extern void print_lex_token(struct ivy_token *tok)
@@ -67,3 +68,63 @@ extern void print_lex_token(struct ivy_token *tok)
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);
}

View File

@@ -2,7 +2,9 @@
#define DEBUG_H_
struct ivy_token;
struct ivy_asm_token;
extern void print_lex_token(struct ivy_token *tok);
extern void print_asm_lex_token(struct ivy_asm_token *tok);
#endif