spl.c (713B)
1 #include <ctype.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 #include "lexer.h" 6 #include "parse.h" 7 #include "util.h" 8 #include "maps.h" 9 #include "cback.h" 10 11 12 int 13 main(int argc, char **argv) { 14 if (argc == 1) 15 exit(1); 16 17 FILE *f = fopen(argv[1], "r"); 18 char *file = drainfile(f); 19 fclose(f); 20 21 lex l = mklexer(file); 22 l.name = argv[1]; 23 24 mctx *ctx = newctx(); 25 lexpr *xs = NULL, *x; 26 int lexprc = 0; 27 while (x = parselexpr(&l, ctx)) { 28 xs = realloczctx(ctx, xs, ++lexprc * sizeof(lexpr)); 29 xs[lexprc - 1] = *x; 30 } 31 if (haserrored) goto cleanup; 32 if (lexprc) 33 fprintf(stdout, "#include <stdint.h>\n"); 34 for (int i = 0; i < lexprc; i++) 35 compilelexpr_C(&xs[i], stdout); 36 37 cleanup: 38 free(file); 39 freectx(ctx); 40 }