#include "../mpc.h" int main(int argc, char **argv) { mpc_parser_t* Ident = mpc_new("ident"); mpc_parser_t* Number = mpc_new("number"); mpc_parser_t* Character = mpc_new("character"); mpc_parser_t* String = mpc_new("string"); mpc_parser_t* Factor = mpc_new("factor"); mpc_parser_t* Term = mpc_new("term"); mpc_parser_t* Lexp = mpc_new("lexp"); mpc_parser_t* Stmt = mpc_new("stmt"); mpc_parser_t* Exp = mpc_new("exp"); mpc_parser_t* Typeident = mpc_new("typeident"); mpc_parser_t* Decls = mpc_new("decls"); mpc_parser_t* Args = mpc_new("args"); mpc_parser_t* Body = mpc_new("body"); mpc_parser_t* Procedure = mpc_new("procedure"); mpc_parser_t* Main = mpc_new("main"); mpc_parser_t* Includes = mpc_new("includes"); mpc_parser_t* Smallc = mpc_new("smallc"); mpc_err_t* err = mpca_lang(MPCA_LANG_DEFAULT, " \n\ ident : /[a-zA-Z_][a-zA-Z0-9_]*/ ; \n\ number : /[0-9]+/ ; \n\ character : /'.'/ ; \n\ string : /\"(\\\\.|[^\"])*\"/ ; \n\ \n\ factor : '(' ')' \n\ | \n\ | \n\ | \n\ | '(' ? (',' )* ')' \n\ | ; \n\ \n\ term : (('*' | '/' | '%') )* ; \n\ lexp : (('+' | '-') )* ; \n\ \n\ stmt : '{' * '}' \n\ | \"while\" '(' ')' \n\ | \"if\" '(' ')' \n\ | '=' ';' \n\ | \"print\" '(' ? ')' ';' \n\ | \"return\" ? ';' \n\ | '(' ? (',' )* ')' ';' ; \n\ \n\ exp : '>' \n\ | '<' \n\ | \">=\" \n\ | \"<=\" \n\ | \"!=\" \n\ | \"==\" ; \n\ \n\ typeident : (\"int\" | \"char\") ; \n\ decls : ( ';')* ; \n\ args : ? (',' )* ; \n\ body : '{' * '}' ; \n\ procedure : (\"int\" | \"char\") '(' ')' ; \n\ main : \"main\" '(' ')' ; \n\ includes : (\"#include\" )* ; \n\ smallc : /^/ *
/$/ ; \n\ ", Ident, Number, Character, String, Factor, Term, Lexp, Stmt, Exp, Typeident, Decls, Args, Body, Procedure, Main, Includes, Smallc); if (err != NULL) { mpc_err_print(err); mpc_err_delete(err); exit(1); } if (argc > 1) { mpc_result_t r; if (mpc_parse_contents(argv[1], Smallc, &r)) { mpc_ast_print(r.output); mpc_ast_delete(r.output); } else { mpc_err_print(r.error); mpc_err_delete(r.error); } } else { mpc_result_t r; if (mpc_parse_pipe("", stdin, Smallc, &r)) { mpc_ast_print(r.output); mpc_ast_delete(r.output); } else { mpc_err_print(r.error); mpc_err_delete(r.error); } } mpc_cleanup(17, Ident, Number, Character, String, Factor, Term, Lexp, Stmt, Exp, Typeident, Decls, Args, Body, Procedure, Main, Includes, Smallc); return 0; }