spl

a Simple Programming Language
Log | Files | Refs

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 }