sic

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

lexer_tools.c (4131B)



#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;
        }
    }
}