#include #include #include #include #include "lexer.h" #include "common.h" #include "error.h" #include "logic.h" #include "gate.h" static struct token *cursor; #ifdef emit_error #warning "Remember to remove the global emit_error" #undef emit_error #endif /* ifdef emit_error */ #define emit_error(...) fprintf(stderr, "Error (%zd,%zd): ", cursor->loc.line, cursor->loc.column);\ fprintf(stderr, __VA_ARGS__) //static struct op_lookup uop_handlers[] = { // {.str = "not", .handler = logic_nand}, //}; // //static struct op_lookup bop_handlers[] = { // {.str = "and", .handler = logic_and}, // {.str = "or", .handler = logic_or}, // {.str = "nand", .handler = logic_nand}, // {.str = "nor", .handler = logic_nor}, // {.str = "xor", .handler = logic_xor} //}; // //static struct tok_lookup tok_handlers[] = { // {.str = "input", .handler = parse_input}, // {.str = "module", .handler = parse_module}, // {.str = "expr", .handler = parse_expr} //}; static int expect(enum TOKEN_TYPE e) { char *expected_desc = "(internal error)"; char *observed_desc = "(internal error)"; if (cursor->type != e) { expected_desc = get_token_description(e); observed_desc = get_token_description(cursor->type); emit_error("Expected %s, got %s\n", expected_desc, observed_desc); return 1; } return 0; } int parse(struct token *t) { cursor = t; expect(TOK_MODULE); return 0; }