#include #include #include #include "as_tokenizer.h" #include "as_parser.h" #include "utils.h" char *input_buffer = "start:\n" " add 1\n" " sub start\n" " div\n" "end: eq\n"; int main(int argc, char** argv) { struct result result; printf("[TEST] assembler parser\n"); // make a memory buffer to FILE* FILE *fp = fmemopen(input_buffer, strlen(input_buffer), "r"); struct allocator * alct = new_allocator(); struct token_stream * ts = new_token_stream(alct, fp); result = parse_prog(alct, ts); if (result.errmsg != NULL) { printf("error: %s\n", result.errmsg); } assert(result.errmsg == NULL); struct prog* prog = result.value; // compare output struct stmt * * stmts = prog->stmts->stmts; assert(stmts[0]->instr == NULL); assert(strcmp("start", stmts[0]->label->name) == 0); assert(stmts[1]->label == NULL); assert(stmts[1]->instr->op == OP_ADD); assert(stmts[1]->instr->arg->ival == 1); assert(strcmp("end", stmts[4]->label->name) == 0); assert(stmts[4]->instr->op == OP_EQ); printf("[PASS] assembler parser\n"); fclose(fp); delete_allocator(alct); return 0; }