#include #include #include #include #include #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 \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); } } }