vm-translator/main.c

45 lines
835 B
C
Raw Normal View History

2020-10-29 20:22:03 -04:00
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include "parser.h"
2020-10-30 13:06:02 -04:00
#include "translator.h"
2020-10-29 20:22:03 -04:00
int main(int argc, char* argv[]) {
if(argc < 2) {
fprintf(stderr, "Usage: %s {file}\n", argv[0]);
return 1;
}
FILE* input = fopen(argv[1], "r");
if(input == NULL) {
fprintf(stderr, "%s\n", strerror(errno));
return errno;
}
2020-10-29 21:06:33 -04:00
// info gathering
2020-10-29 20:22:03 -04:00
int lncount, widestln, maxtokens;
getinfo(input, &lncount, &widestln, &maxtokens);
2020-10-29 21:06:33 -04:00
// parsing
2020-10-29 20:22:03 -04:00
struct line** lns = parse(input, lncount, widestln, maxtokens);
2020-10-29 21:06:33 -04:00
fclose(input);
2020-10-30 13:06:02 -04:00
// translating
2020-10-31 11:40:06 -04:00
int asmcount = 0;
struct asmln** asmlns = translate(lns, lncount, &asmcount);
// freeing lns
freelns(lns, lncount);
2020-10-29 20:22:03 -04:00
2020-10-29 21:06:33 -04:00
// printing
2020-10-31 11:40:06 -04:00
for(int i = 0; i < asmcount; i++) {
2020-10-30 13:06:02 -04:00
printf("%s\n", asmlns[i]->instr);
}
2020-10-29 20:22:03 -04:00
2020-10-31 11:40:06 -04:00
// freeing asmlns
freeasmlns(asmlns, asmcount);
2020-10-29 21:06:33 -04:00
2020-10-29 20:22:03 -04:00
return 0;
}