summaryrefslogtreecommitdiff
path: root/Token.c
diff options
context:
space:
mode:
Diffstat (limited to 'Token.c')
-rw-r--r--Token.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/Token.c b/Token.c
new file mode 100644
index 0000000..0f259a1
--- /dev/null
+++ b/Token.c
@@ -0,0 +1,37 @@
+#include "Token.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+void token_free(Token *tok)
+{
+ switch (tok->type) {
+ case TOK_KEYWORD:
+ if (tok != NULL && tok->v.s != NULL)
+ free(tok->v.s);
+ default:
+ break;
+ }
+}
+
+void token_print(const Token *tok)
+{
+ printf("%d ", tok->line);
+ switch (tok->type) {
+ case TOK_KEYWORD: printf("TOK_KEYWORD %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_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_INCREMENT: printf("TOK_INCREMENT\n"); break;
+ default: printf("token_print TODO: type %d\n", tok->type); break;
+ }
+}