2024-11-18 09:54:27 +00:00
|
|
|
#include <blue/term.h>
|
|
|
|
|
#include <ivy/lang/lex.h>
|
2024-11-19 22:09:32 +00:00
|
|
|
#include <ivy/asm/lex.h>
|
2024-11-18 09:54:27 +00:00
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
|
|
extern void print_lex_token(struct ivy_token *tok)
|
|
|
|
|
{
|
|
|
|
|
switch (tok->t_type) {
|
|
|
|
|
case IVY_TOK_KEYWORD:
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts("[magenta]");
|
2024-11-18 09:54:27 +00:00
|
|
|
break;
|
|
|
|
|
case IVY_TOK_SYMBOL:
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts("[blue]");
|
2024-11-18 09:54:27 +00:00
|
|
|
break;
|
|
|
|
|
case IVY_TOK_ATOM:
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts("[yellow]");
|
2024-11-18 09:54:27 +00:00
|
|
|
break;
|
2024-11-19 16:57:39 +00:00
|
|
|
case IVY_TOK_INT:
|
|
|
|
|
case IVY_TOK_DOUBLE:
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts("[yellow]");
|
2024-11-18 09:54:27 +00:00
|
|
|
break;
|
|
|
|
|
case IVY_TOK_LABEL:
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts("[red]");
|
2024-11-18 09:54:27 +00:00
|
|
|
break;
|
|
|
|
|
case IVY_TOK_IDENT:
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts("[cyan]");
|
2024-11-18 09:54:27 +00:00
|
|
|
break;
|
|
|
|
|
case IVY_TOK_STRING:
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts("[green]");
|
2024-11-18 09:54:27 +00:00
|
|
|
break;
|
|
|
|
|
case IVY_TOK_STR_START:
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts("[green]");
|
2024-11-18 09:54:27 +00:00
|
|
|
break;
|
|
|
|
|
case IVY_TOK_STR_END:
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts("[green]");
|
2024-11-18 09:54:27 +00:00
|
|
|
break;
|
|
|
|
|
case IVY_TOK_LINEFEED:
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts("[dark_grey]");
|
2024-11-18 09:54:27 +00:00
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts(ivy_lex_token_type_to_string(tok->t_type));
|
2024-11-18 09:54:27 +00:00
|
|
|
|
|
|
|
|
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;
|
2024-11-19 16:57:39 +00:00
|
|
|
case IVY_TOK_INT:
|
|
|
|
|
printf("(%llu)", tok->t_int);
|
|
|
|
|
break;
|
|
|
|
|
case IVY_TOK_DOUBLE:
|
|
|
|
|
printf("(%lf)", tok->t_double);
|
2024-11-18 09:54:27 +00:00
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts("[reset]\n");
|
2024-11-18 09:54:27 +00:00
|
|
|
}
|
2024-11-19 22:09:32 +00:00
|
|
|
|
|
|
|
|
extern void print_asm_lex_token(struct ivy_asm_token *tok)
|
|
|
|
|
{
|
|
|
|
|
switch (tok->t_type) {
|
|
|
|
|
case IVY_ASM_TOK_KEYWORD:
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts("[magenta]");
|
2024-11-19 22:09:32 +00:00
|
|
|
break;
|
|
|
|
|
case IVY_ASM_TOK_SYMBOL:
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts("[blue]");
|
2024-11-19 22:09:32 +00:00
|
|
|
break;
|
|
|
|
|
case IVY_ASM_TOK_INT:
|
|
|
|
|
case IVY_ASM_TOK_DOUBLE:
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts("[yellow]");
|
2024-11-19 22:09:32 +00:00
|
|
|
break;
|
|
|
|
|
case IVY_ASM_TOK_LABEL:
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts("[red]");
|
2024-11-19 22:09:32 +00:00
|
|
|
break;
|
|
|
|
|
case IVY_ASM_TOK_IDENT:
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts("[cyan]");
|
2024-11-19 22:09:32 +00:00
|
|
|
break;
|
|
|
|
|
case IVY_ASM_TOK_STRING:
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts("[green]");
|
2024-11-19 22:09:32 +00:00
|
|
|
break;
|
|
|
|
|
case IVY_ASM_TOK_LINEFEED:
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts("[dark_grey]");
|
2024-11-19 22:09:32 +00:00
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts(ivy_asm_token_type_to_string(tok->t_type));
|
2024-11-19 22:09:32 +00:00
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-20 22:14:35 +00:00
|
|
|
b_puts("[reset]\n");
|
2024-11-19 22:09:32 +00:00
|
|
|
}
|