// // Created by red on 03/12/19. // #include #include #include #include #include "mpc.h" #include "eval.h" #pragma clang diagnostic ignored "-Wmissing-noreturn" int main(int argc, char** argv) { mpc_parser_t* Number = mpc_new("number"); mpc_parser_t* Operator = mpc_new("operator"); mpc_parser_t* Expr = mpc_new("expr"); mpc_parser_t* Crisp = mpc_new("crisp"); mpca_lang(MPCA_LANG_DEFAULT, " number : /-?[0-9]+/ ;" " operator : '+' | '-' | '*' | '/' ;" " expr : | '(' + ')' ;" " crisp : /^/ + /$/ ;", Number, Operator, Expr, Crisp); puts("Crisp v.0.0.1"); puts("Press Ctrl-C to exit\n"); for (;;) { char* input = readline("crisp> "); add_history(input); // attempt to parse input mpc_result_t r; if (mpc_parse("", input, Crisp, &r)) { cval result = eval(r.output); cval_println(result); mpc_ast_delete(r.output); } else { mpc_err_print(r.error); mpc_err_delete(r.error); } free(input); } mpc_cleanup(4, Number, Operator, Expr, Crisp); return EXIT_SUCCESS; }