| 
									
										
										
										
											2014-01-26 11:25:50 +00:00
										 |  |  | #include "../mpc.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int main(int argc, char **argv) { | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   mpc_parser_t* Number  = mpc_new("number"); | 
					
						
							|  |  |  |   mpc_parser_t* Symbol  = mpc_new("symbol"); | 
					
						
							|  |  |  |   mpc_parser_t* String  = mpc_new("string"); | 
					
						
							|  |  |  |   mpc_parser_t* Comment = mpc_new("comment"); | 
					
						
							|  |  |  |   mpc_parser_t* Sexpr   = mpc_new("sexpr"); | 
					
						
							|  |  |  |   mpc_parser_t* Qexpr   = mpc_new("qexpr"); | 
					
						
							|  |  |  |   mpc_parser_t* Expr    = mpc_new("expr"); | 
					
						
							|  |  |  |   mpc_parser_t* Lispy   = mpc_new("lispy"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-15 16:06:59 +01:00
										 |  |  |   mpca_lang(MPCA_LANG_PREDICTIVE, | 
					
						
							| 
									
										
										
										
											2014-04-16 17:06:16 +01:00
										 |  |  |     " number  \"number\"  : /[0-9]+/ ;                         " | 
					
						
							|  |  |  |     " symbol  \"symbol\"  : /[a-zA-Z0-9_+\\-*\\/\\\\=<>!&]+/ ; " | 
					
						
							|  |  |  |     " string  \"string\"  : /\"(\\\\.|[^\"])*\"/ ;             " | 
					
						
							|  |  |  |     " comment             : /;[^\\r\\n]*/ ;                    " | 
					
						
							|  |  |  |     " sexpr               : '(' <expr>* ')' ;                  " | 
					
						
							|  |  |  |     " qexpr               : '{' <expr>* '}' ;                  " | 
					
						
							|  |  |  |     " expr                : <number>  | <symbol> | <string>    " | 
					
						
							|  |  |  |     "                     | <comment> | <sexpr>  | <qexpr> ;   " | 
					
						
							|  |  |  |     " lispy               : /^/ <expr>* /$/ ;                  ", | 
					
						
							| 
									
										
										
										
											2014-04-23 12:20:20 +01:00
										 |  |  |     Number, Symbol, String, Comment, Sexpr, Qexpr, Expr, Lispy, NULL); | 
					
						
							| 
									
										
										
										
											2014-01-26 11:25:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   if (argc > 1) { | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     mpc_result_t r; | 
					
						
							|  |  |  |     if (mpc_parse_contents(argv[1], Lispy, &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>", stdin, Lispy, &r)) { | 
					
						
							|  |  |  |       mpc_ast_print(r.output); | 
					
						
							|  |  |  |       mpc_ast_delete(r.output); | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |       mpc_err_print(r.error); | 
					
						
							|  |  |  |       mpc_err_delete(r.error); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   mpc_cleanup(8, Number, Symbol, String, Comment, Sexpr, Qexpr, Expr, Lispy); | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   return 0; | 
					
						
							|  |  |  |    | 
					
						
							| 
									
										
										
										
											2014-04-06 12:26:28 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 |