printing things prettier

This commit is contained in:
ghostie 2025-07-19 22:21:02 -05:00
parent 19e9b8dfee
commit 8571900105
4 changed files with 39 additions and 13 deletions

11
src/colors.h Normal file
View File

@ -0,0 +1,11 @@
#ifndef __COLORS_H
#define __COLORS_H
#define COLOR_WHITE "\033[0m"
#define COLOR_BLUE "\033[94m"
#define COLOR_CYAN "\033[96m"
#define COLOR_GREEN "\033[92m"
#define COLOR_YELLOW "\033[93m"
#define COLOR_RED "\033[91m"
#endif

View File

@ -316,8 +316,6 @@ lexer_get_tokens (struct lexer *l)
void
lexer_print (struct lexer *l)
{
puts ("Lexer:");
for (unsigned int i = 0; i < l->tokens.length; i++)
{
struct token *t = l->tokens.elements[i];

View File

@ -6,6 +6,8 @@
#include "lexer.h"
#include "parser.h"
#include "colors.h"
int
main (int argc, char **argv)
{
@ -19,11 +21,24 @@ main (int argc, char **argv)
if (!buffer_read (argv[1], &code))
return EXIT_FAILURE;
puts (COLOR_GREEN "\n********************************" COLOR_WHITE);
puts ("Source:");
puts (COLOR_GREEN "********************************\n" COLOR_WHITE);
puts (buffer_get (&code));
puts (COLOR_GREEN "\n********************************" COLOR_WHITE);
puts ("Tokens:");
puts (COLOR_GREEN "********************************\n" COLOR_WHITE);
struct lexer lexer = lexer_create ();
lexer_set_source (&code, &lexer);
lexer_lex (&lexer);
lexer_print (&lexer);
puts (COLOR_GREEN "\n********************************" COLOR_WHITE);
puts ("AST:");
puts (COLOR_GREEN "********************************\n" COLOR_WHITE);
struct parser parser = parser_create (lexer_get_tokens (&lexer));
parser_parse (&parser);
parser_print (&parser);

View File

@ -175,8 +175,11 @@ parser_parse (struct parser *p)
}
void
expr_print (struct expression *expr)
expr_print (struct expression *expr, unsigned int i)
{
for (unsigned int j = 0; j < i; j++)
printf ("\t");
switch (expr->type)
{
case EXPR_INT:
@ -186,20 +189,20 @@ expr_print (struct expression *expr)
printf ("Float[%f]", expr->floating);
break;
case EXPR_BINOP:
printf ("BinOp('%s', ", buffer_get (&expr->binop.op->lexeme));
expr_print (expr->binop.left);
printf (", ");
expr_print (expr->binop.right);
printf ("BinOp('%s',\n", buffer_get (&expr->binop.op->lexeme));
expr_print (expr->binop.left, i + 1);
printf (",\n");
expr_print (expr->binop.right, i + 1);
printf (")");
break;
case EXPR_UNOP:
printf ("UnOp('%s', ", buffer_get (&expr->unop.op->lexeme));
expr_print (expr->unop.operand);
printf ("UnOp('%s',\n", buffer_get (&expr->unop.op->lexeme));
expr_print (expr->unop.operand, i + 1);
printf (")");
break;
case EXPR_GROUP:
printf ("Grouping(");
expr_print (expr->grouping.value);
printf ("Grouping(\n");
expr_print (expr->grouping.value, i + 1);
printf (")");
break;
default:
@ -211,11 +214,10 @@ expr_print (struct expression *expr)
void
parser_print (struct parser *p)
{
puts ("Parsed Ast:");
for (unsigned int i = 0; i < vector_len (&p->ast); i++)
{
struct expression *expr = (struct expression *)vector_at (i, &p->ast);
expr_print (expr);
expr_print (expr, 0);
printf ("\n");
}
}