sic

The sic programming language, compiler and tools (WIP)
Log | Files | Refs

lexer_tools.c (3640B)



#include "lexer.h"

void print_tokens(Lexer* lex)
{
    Token t;
    Token_Type typ;
    size_t i;

    printf("------- print tokens (%zu) -------\n", lex->len);

    for (i = 0; i < lex->len; i++) {
        t = lex->tokens[i];
        typ = t.type;

        printf("%s: %zu:%zu  ", t.filename, t.line, t.col);

        switch (typ) {
        case LIT_STRING:
            printf("STRING LITERAL: %s\n", lex->tokens[i].lexeme.value);
            break;
        case LIT_DECIMAL:
            printf("DECIMAL LITERAL: %s\n", lex->tokens[i].lexeme.value);
            break;
        case LIT_INT:
            printf("DECIMAL LITERAL: %s\n", lex->tokens[i].lexeme.value);
            break;
        case LBRACE:
            printf("LBRACE {\n");
            break;
        case RBRACE:
            printf("RBRACE }\n");
            break;
        case LPAREN:
            printf("LPAREN (\n");
            break;
        case RPAREN:
            printf("RPAREN )\n");
            break;
        case BANG:
            printf("BANG !\n");
            break;
        case BANG_EQ:
            printf("BANG_EQ !=\n");
            break;
        case EQ:
            printf("EQ =\n");
            break;
        case EQ_EQ:
            printf("EQ_EQ ==\n");
            break;
        case EQ_GT:
            printf("EQ_GT =>\n");
            break;
        case SEMICOL:
            printf("SEMICOL ;\n");
            break;
        case LT_EQ:
            printf("LT_EQ <=\n");
            break;
        case LT_LT:
            printf("LT_LT <<\n");
            break;
        case LT_MINUS:
            printf("LT_MINUS <-\n");
            break;
        case LT:
            printf("LT <\n");
            break;
        case GT:
            printf("GT >\n");
            break;
        case GT_EQ:
            printf("GT_EQ >=\n");
            break;
        case GT_GT:
            printf("GT_GT >>\n");
            break;

        case PLUS:
            printf("PLUS +\n");
            break;
        case PLUS_PLUS:
            printf("PLUS_PLUS ++\n");
            break;
        case PLUS_EQ:
            printf("PLUS_EQ +=\n");
            break;
        case MINUS:
            printf("MINUS -\n");
            break;
        case MINUS_EQ:
            printf("MINUS_EQ -=\n");
            break;
        case MINUS_MINUS:
            printf("MINUS_MINUS --\n");
            break;
        case MINUS_GT:
            printf("MINUS_GT ->\n");
            break;
        case STAR:
            printf("STAR *\n");
            break;
        case STAR_EQ:
            printf("STAR_EQ *=\n");
            break;
        case PERCENT:
            printf("PERCENT %%\n");
            break;
        case PERCENT_EQ:
            printf("PERCENT_EQ %%=\n");
            break;
        case AMPERSAND:
            printf("AMPERSAND &\n");
            break;
        case AMPERSAND_AMPERSAND:
            printf("AMPERSAND_AMPERSAND &&\n");
            break;
        case AMPERSAND_EQ:
            printf("AMPERSAND_EQ &=\n");
            break;
        case PIPE:
            printf("PIPE |\n");
            break;
        case PIPE_PIPE:
            printf("PIPE_PIPE ||\n");
            break;
        case PIPE_EQ:
            printf("PIPE_EQ |=\n");
            break;
        case SLASH:
            printf("SLASH /\n");
            break;
        case SLASH_EQ:
            printf("SLASH_EQ /=\n");
            break;
        case IDENT:
            printf("IDENT: %s\n", lex->tokens[i].lexeme.value);
            break;
        default:
            printf("print_tokens: unhandled token %i\n", typ);
            break;
        }
    }
}