105 lines
2.0 KiB
C
105 lines
2.0 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include "token.h"
|
|
|
|
#define STRING_BUFF_SIZE 1024
|
|
|
|
static char stringBuff[STRING_BUFF_SIZE];
|
|
|
|
char* printableOnly(char* input);
|
|
|
|
TokenList*
|
|
TokenListAdd(TokenList* current, Token* next)
|
|
{
|
|
if (current->token == NULL)
|
|
{
|
|
printf("current->token == null\n");
|
|
current->token = next;
|
|
return current;
|
|
}
|
|
|
|
//printf("%s\n", TokenString(current->token));
|
|
|
|
TokenList* nl = malloc(sizeof(TokenList));
|
|
nl->next = NULL;
|
|
nl->token = next;
|
|
current->next = nl;
|
|
return nl;
|
|
}
|
|
|
|
char*
|
|
TokenString(Token* t)
|
|
{
|
|
//char* str = malloc(sizeof(char) * 1000);
|
|
snprintf(stringBuff, 1000, "[%d:%d] Type: %s Literal: '%s'",
|
|
t->line,
|
|
t->column,
|
|
TokenTypeString(t->type),
|
|
printableOnly(t->literal)
|
|
);
|
|
|
|
return stringBuff;
|
|
}
|
|
|
|
char*
|
|
TokenTypeString(TokenType tt)
|
|
{
|
|
switch (tt) {
|
|
case TT_ILLEGAL:
|
|
return "TT_ILLEGAL";
|
|
case TT_EOF:
|
|
return "TT_EOF";
|
|
case TT_HASH:
|
|
return "TT_HASH";
|
|
case TT_ASTERISK:
|
|
return "TT_ASTERISK";
|
|
case TT_UNDERSCORE:
|
|
return "TT_UNDERSCORE";
|
|
case TT_DASH:
|
|
return "TT_DASH";
|
|
case TT_PERIOD:
|
|
return "TT_PERIOD";
|
|
case TT_BACKTICK:
|
|
return "TT_BACKTICK";
|
|
case TT_TRIPLEBACKTICK:
|
|
return "TT_TRIPLEBACKTICK";
|
|
case TT_WHITESPACE:
|
|
return "TT_WHITESPACE";
|
|
case TT_NEWLINE:
|
|
return "TT_NEWLINE";
|
|
case TT_WORD:
|
|
return "TT_WORD";
|
|
case TT_NUMBER:
|
|
return "TT_NUMBER";
|
|
}
|
|
|
|
return "\0";
|
|
}
|
|
|
|
char*
|
|
printableOnly(char* input)
|
|
{
|
|
char *str = malloc(sizeof(char) * ((strlen(input)*4)+1));
|
|
int i, j;
|
|
int len = strlen(input);
|
|
for(i = 0, j = 0; i < len; i++, j++)
|
|
{
|
|
if(input[i] < 0x20 || input[i] > 0x7F)
|
|
{
|
|
// hex notation
|
|
snprintf(&str[j], 5, "\\x%02X", input[i]);
|
|
j+=3;
|
|
}
|
|
else
|
|
{
|
|
str[j] = input[i];
|
|
}
|
|
}
|
|
|
|
str[j] = '\0';
|
|
return str;
|
|
}
|
|
|