Files
assm-test/src/main.c
T

94 lines
2.0 KiB
C

#include <bits/types/FILE.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sysexits.h>
#include "../includes/list.h"
#include "../includes/futil.h"
#include "../includes/scanner.h"
#include "../includes/parser.h"
List* LIST;
void print(void);
int main(int argc, char* args[]) {
if (argc == 1) {
printf("Usage: assm <file1.asm>\n");
return EX_USAGE;
}
atexit(print);
char* source_code;
size_t bytes_read;
if (!ReadAllString(args[1], &source_code, &bytes_read)) return EX_IOERR;
LIST = GenerateTokenList(source_code);
ParseTokens(LIST);
free(source_code);
}
void print(void) {
char mnemonic[12];
printf("printing tokens...\n");
for(int i = 0; i < LIST->size; i++) {
Token* t = (Token*) LIST->content[i];
if (t->EndOfFile) {
printf("EOF\n");
break;
}
if (t->Class == PunctuationClass){
if(t->Value.Punctuation == NewLine) {
printf("<%d>\n", t->LineNumber);
continue;
}
printf("[P]%c", t->Value.Punctuation);
continue;
}
if (t->Class == LabelClass) {
printf("[L]%s*", t->Lemexe);
continue;
}
if (t->Class == IdentifierClass) {
printf("[I]%s ", t->Lemexe);
continue;
}
if (t->Class == RegisterClass) {
printf("[R]%d", t->Value.Register);
continue;
}
if (t->Class == NumberClass) {
printf("[N]%d ", t->Value.Number);
continue;
}
if (t->Class == MnemonicClass) {
GetMnemonicText(t->Value.Mnemonic, mnemonic);
printf("[M]%s ", mnemonic);
continue;
}
if (t->Class == DirectiveClass) {
printf("[D]%d ", t->Value.Directive);
}
if (t->Class == CharacterClass) {
printf("[C]'%s'", t->Lemexe);
}
}
}