#include "../../grammar/grammar_crt.h" #include "../../grammar/grammar_crt.c" #include #include static const char *slang_shader_syn = #include "slang_shader_syn.h" ; static int gc_to_bin (grammar id, const char *in, const char *out) { FILE *f; byte *source, *prod; unsigned int size, i, line = 0; printf ("Precompiling %s\n", in); f = fopen (in, "r"); if (f == NULL) return 1; fseek (f, 0, SEEK_END); size = ftell (f); fseek (f, 0, SEEK_SET); source = (byte *) grammar_alloc_malloc (size + 1); source[fread (source, 1, size, f)] = '\0'; fclose (f); if (!grammar_fast_check (id, source, &prod, &size, 65536)) { grammar_alloc_free (source); return 1; } f = fopen (out, "w"); fprintf (f, "\n"); fprintf (f, "/* DO NOT EDIT - THIS FILE IS AUTOMATICALLY GENERATED FROM THE FOLLOWING FILE: */\n"); fprintf (f, "/* %s */\n", in); fprintf (f, "\n"); for (i = 0; i < size; i++) { unsigned int a; if (prod[i] < 10) a = 1; else if (prod[i] < 100) a = 2; else a = 3; if (i < size - 1) a++; if (line + a >= 100) { fprintf (f, "\n"); line = 0; } line += a; fprintf (f, "%d", prod[i]); if (i < size - 1) fprintf (f, ","); } fprintf (f, "\n"); fclose (f); grammar_alloc_free (prod); return 0; } int main (int argc, char *argv[]) { grammar id; id = grammar_load_from_text ((const byte *) slang_shader_syn); if (id == 0) { fprintf(stderr, "Error loading grammar from text\n"); return 1; } grammar_set_reg8 (id, (const byte *) "parsing_builtin", 1); grammar_set_reg8 (id, (const byte *) "shader_type", atoi (argv[1])); if (gc_to_bin (id, argv[2], argv[3])) { fprintf(stderr, "Error in gc_to_bin %s %s\n", argv[2], argv[3]); grammar_destroy (id); return 1; } grammar_destroy (id); return 0; }