summaryrefslogtreecommitdiff
path: root/Token.c
blob: 85d65cf17f85eb53a221fe2b60aed9bacec257a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "Token.h"
#include <stdlib.h>
#include <stdio.h>

void token_free(Token *tok)
{
	switch (tok->type) {
	case TOK_WORD:
		if (tok != NULL && tok->v.s != NULL)
			free(tok->v.s);
	default:
		break;
	}
}

void token_print(const Token *tok)
{
	printf("%u:%u\t", tok->line, tok->column);
	switch (tok->type) {
	case TOK_WORD: printf("TOK_WORD        %s\n", tok->v.s); break;
	case TOK_STRING: printf("TOK_STRING      \"%s\"\n", tok->v.s); break;
	case TOK_INTEGER: printf("TOK_INTEGER     %d\n", tok->v.i); break;
	case TOK_PAREN_OPEN: printf("TOK_PAREN_OPEN\n"); break;
	case TOK_PAREN_CLOS: printf("TOK_PAREN_CLOS\n"); break;
	case TOK_CURL_OPEN: printf("TOK_CURL_OPEN\n"); break;
	case TOK_CURL_CLOS: printf("TOK_CURL_CLOS\n"); break;
	case TOK_SQUAR_OPEN: printf("TOK_SQUAR_OPEN\n"); break;
	case TOK_SQUAR_CLOS: printf("TOK_SQUAR_CLOS\n"); break;
	case TOK_COLON: printf("TOK_COLON\n"); break;
	case TOK_SEMICOLON: printf("TOK_SEMICOLON\n"); break;
	case TOK_ASSIGN: printf("TOK_ASSIGN\n"); break;
	case TOK_COMMA: printf("TOK_COMMA\n"); break;
	case TOK_COMP_LESS: printf("TOK_COMP_LESS\n"); break;
	case TOK_MODULO: printf("TOK_MODULO\n"); break;
	case TOK_STAR: printf("TOK_STAR\n"); break;
	case TOK_INCREMENT: printf("TOK_INCREMENT\n"); break;
	case TOK_COMP_EQ: printf("TOK_COMP_EQ\n"); break;
	case TOK_COMP_NEQ: printf("TOK_COMP_NEQ\n"); break;
	default: printf("token_print TODO: type %d\n", tok->type); break;
	}
}

const char *token_type_str(unsigned int type)
{
	switch (type) {
	case TOK_WORD: return "TOK_WORD";
	case TOK_STRING: return "TOK_STRING";
	case TOK_INTEGER: return "TOK_INTEGER";
	case TOK_PAREN_OPEN: return "TOK_PAREN_OPEN";
	case TOK_PAREN_CLOS: return "TOK_PAREN_CLOS";
	case TOK_CURL_OPEN: return "TOK_CURL_OPEN";
	case TOK_CURL_CLOS: return "TOK_CURL_CLOS";
	case TOK_SQUAR_OPEN: return "TOK_SQUAR_OPEN";
	case TOK_SQUAR_CLOS: return "TOK_SQUAR_CLOS";
	case TOK_COLON: return "TOK_COLON";
	case TOK_SEMICOLON: return "TOK_SEMICOLON";
	case TOK_ASSIGN: return "TOK_ASSIGN";
	case TOK_COMMA: return "TOK_COMMA";
	case TOK_COMP_LESS: return "TOK_COMP_LESS";
	case TOK_MODULO: return "TOK_MODULO";
	case TOK_STAR: return "TOK_STAR";
	case TOK_INCREMENT: return "TOK_INCREMENT";
	case TOK_COMP_EQ: return "TOK_COMP_EQ";
	case TOK_COMP_NEQ: return "TOK_COMP_NEQ";
	case TOK_KW_CONST: return "TOK_KW_CONST";
	case TOK_KW_VAR: return "TOK_KW_VAR";
	case TOK_KW_FN: return "TOK_KW_FN";
	default: return "TOK_?";
	}
}