86 lines
2.2 KiB
C
86 lines
2.2 KiB
C
#include "../includes/token.h"
|
|
|
|
const Token TokenEmpty = { 0 };
|
|
|
|
struct _token* TokenCreate(TokenType type, int lineNumber, int columnNumber, bool resolved) {
|
|
struct _token* token = calloc(1, sizeof(Token));
|
|
|
|
token->Type = type;
|
|
token->LineNumber = lineNumber;
|
|
token->ColumnNumber = columnNumber;
|
|
token->Resolved = resolved;
|
|
|
|
return token;
|
|
}
|
|
|
|
char* TokenStringify(const struct _token* token) {
|
|
if (!token) return NULL;
|
|
|
|
size_t bufferSize = 64;
|
|
char* str;
|
|
|
|
if (token->Type == String) {
|
|
// Add three for 2 quotes and a NUL byte.
|
|
bufferSize = strlen(token->Value.String) + 3;
|
|
|
|
str = malloc(bufferSize);
|
|
|
|
snprintf(str, bufferSize, "\"%s\"", token->Value.String);
|
|
|
|
return str;
|
|
}
|
|
else if (token->Type == Symbol) {
|
|
// Add three for 2 backticks and a NUL byte.
|
|
bufferSize = strlen(token->Value.String) + 3;
|
|
str = calloc(bufferSize, sizeof(char));
|
|
|
|
snprintf(str, bufferSize, "`%s`", token->Value.String);
|
|
|
|
return str;
|
|
}
|
|
else if (token->Type == Label) {
|
|
// Add 2 for the colon and Nul byte.
|
|
bufferSize = strlen(token->Value.String) + 2;
|
|
str = calloc(bufferSize, sizeof(char));
|
|
|
|
snprintf(str, bufferSize, "%s:", token->Value.String);
|
|
|
|
return str;
|
|
}
|
|
else {
|
|
str = malloc(bufferSize * sizeof(char));
|
|
}
|
|
|
|
char buffer[32] = { 0 };
|
|
|
|
switch(token->Type) {
|
|
case Register:
|
|
GetRegisterText(token->Value.Register, buffer);
|
|
break;
|
|
case Mnemonic:
|
|
GetMnemonicText(token->Value.Mnemonic, buffer);
|
|
break;
|
|
case Keyword:
|
|
GetKeywordText(token->Value.Keyword, buffer);
|
|
break;
|
|
case Empty:
|
|
strcpy(str, "(Empty)");
|
|
break;
|
|
case Number:
|
|
sprintf(str, "%d", token->Value.Number);
|
|
break;
|
|
case LineEnd:
|
|
strcpy(str, "(LineEnd)");
|
|
break;
|
|
case FileEnd:
|
|
strcpy(str, "(FileEnd)");
|
|
break;
|
|
default:
|
|
sprintf(str, "%s", token->Value.Operator);
|
|
break;
|
|
}
|
|
|
|
if (strlen(buffer) > 0) strncpy(str, buffer, sizeof(buffer) - 1);
|
|
|
|
return str;
|
|
} |