maths.c (1164B)
1 #include "../mpc.h" 2 3 int main(int argc, char **argv) { 4 5 mpc_parser_t *Expr = mpc_new("expression"); 6 mpc_parser_t *Prod = mpc_new("product"); 7 mpc_parser_t *Value = mpc_new("value"); 8 mpc_parser_t *Maths = mpc_new("maths"); 9 10 mpca_lang(MPCA_LANG_PREDICTIVE, 11 " expression : <product> (('+' | '-') <product>)*; " 12 " product : <value> (('*' | '/') <value>)*; " 13 " value : /[0-9]+/ | '(' <expression> ')'; " 14 " maths : /^/ <expression> /$/; ", 15 Expr, Prod, Value, Maths, NULL); 16 17 mpc_print(Expr); 18 mpc_print(Prod); 19 mpc_print(Value); 20 mpc_print(Maths); 21 22 if (argc > 1) { 23 24 mpc_result_t r; 25 if (mpc_parse_contents(argv[1], Maths, &r)) { 26 mpc_ast_print(r.output); 27 mpc_ast_delete(r.output); 28 } else { 29 mpc_err_print(r.error); 30 mpc_err_delete(r.error); 31 } 32 33 } else { 34 35 mpc_result_t r; 36 if (mpc_parse_pipe("<stdin>", stdin, Maths, &r)) { 37 mpc_ast_print(r.output); 38 mpc_ast_delete(r.output); 39 } else { 40 mpc_err_print(r.error); 41 mpc_err_delete(r.error); 42 } 43 44 } 45 46 mpc_cleanup(4, Expr, Prod, Value, Maths); 47 48 return 0; 49 50 } 51