From 471aea4902a6ed29a4f539335f12964682544057 Mon Sep 17 00:00:00 2001 From: "jordan@hack_attack" Date: Mon, 29 Aug 2016 18:51:04 -0700 Subject: [PATCH] parser wip --- src/apc/fileparser.y | 176 ------------------------ src/apc/fileparser_old.y | 223 ------------------------------- src/apc/filescanner.rl | 148 -------------------- src/apc/filescannerparser_old.rl | 78 ----------- src/apc/ragson | Bin 22784 -> 0 bytes src/apc/ragson.sh | 4 - src/apc/sprite.c | 5 - src/apc/sprite.h | 20 --- src/apc/symbol.h | 14 -- src/parser.y | 170 ++++++++++++++++------- 10 files changed, 121 insertions(+), 717 deletions(-) delete mode 100644 src/apc/fileparser.y delete mode 100644 src/apc/fileparser_old.y delete mode 100644 src/apc/filescanner.rl delete mode 100644 src/apc/filescannerparser_old.rl delete mode 100755 src/apc/ragson delete mode 100755 src/apc/ragson.sh delete mode 100644 src/apc/sprite.c delete mode 100644 src/apc/sprite.h delete mode 100644 src/apc/symbol.h diff --git a/src/apc/fileparser.y b/src/apc/fileparser.y deleted file mode 100644 index 0cf74b4..0000000 --- a/src/apc/fileparser.y +++ /dev/null @@ -1,176 +0,0 @@ -/* Asset Package Compiler */ -%{ - #include - #include - #include - #include "sprite.h" - #include "symbol.h" - #include - - - extern void yyerror(); - extern int linit(); - extern int yylex(); - - - int handle_fname(char *); - int eval_png_file(char*); - int read_png_file(char*); - -%} -%define parse.error verbose -%union{ - char* str; - } - -/* %token EXT */ -/* %token FW */ -/* %token SPR */ -/* %token CC */ - -/* /\* Rules *\/ */ -/* %% */ -/* SS: SPR '/' MD '.' EXT */ -/* MD: CC '_' FW */ -/* | FW */ -/* | CC */ - - -%token FDAT - -/* Rules */ -%% -FLIST : FLIST FNAME {printf("reducing to flist\n");} /* Now output to asspack.o */ | FNAME -FNAME : FDAT {printf("handle_fname(%s)\n", $1);handle_fname(yylval.str);printf("handled fname\n");} - -%% -int -main(int argc, char** argv) -{ - /* Parse cmd line arguments */ - - linit(); - yyparse(); /* runs handle_fname for each filename */ - - - return 0; -} -void -yyerror (char const *s) -{ - fprintf(stderr, "%s\n", s); -} - - - -/* Analyze file_name for information on sprite sheet, - store sprite sheet and label into sprite then - push sprite onto sprites[]*/ -int -handle_fname(char* file_name) -{ - /* Parse the file_name for data */ - - - /* Get the specs of the PNG file */ - if(eval_png_file(file_name)) - { - printf("Failed in eval_png_file\n"); - return 1; - } - - /* Insert sprite sheet from PNG into sprite_sheets */ - push_sprite(); - - - - - /* Store dir/filename in label as well as any other data that fits */ -} -int eval_png_file(char* file_name) -{ - /* Evaluate file_name for metadata */ - - /* Extracts header info from png_file */ - read_png_file(file_name); - - /* Create the symbol and put it in symbol_table[]*/ - - return 0; -} - - - -/* variables for libPNG */ -int png_width,png_height; -png_byte bit_depth; -png_byte color_type; -png_structp png_ptr; -png_infop info_ptr; - -int -read_png_file( char* file_name) -{ - /* Setup PNG file */ - char header[8]; - int is_png = 0; - char* dir = "pngfiles"; - - /* TODO: Change this fopen to a real var! */ - FILE *fp = fopen("pngfiles/env_street_road03_0.png","rb"); - - if(!fp) - { printf("Could not read file %s in handle_fname()", file_name); - return 1; - } - - fread(header, 1, 8, fp); - - is_png = !png_sig_cmp(header, 0, 8); - if(!is_png) - return 1; - - png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - - if (!png_ptr) - { printf("Failed to allocate png_ptr\n"); - return 1; - } - info_ptr = png_create_info_struct(png_ptr); - - if (!info_ptr) - { printf("Failed to create info_ptr\n"); - png_destroy_read_struct(&png_ptr,(png_infopp)NULL, (png_infopp)NULL); - return 1; - } - - png_infop end_info = png_create_info_struct(png_ptr); - if (!end_info) - { printf("Failed to create end_info \n"); - png_destroy_read_struct(&png_ptr,(png_infopp)NULL, (png_infopp)NULL); - return 1; - } - - if(setjmp(png_jmpbuf(png_ptr))) - { printf("Failed in init_io\n"); - png_destroy_read_struct(&png_ptr,(png_infopp)NULL, (png_infopp)NULL); - fclose(fp); - return 1; - } - png_init_io(png_ptr, fp); - png_set_sig_bytes(png_ptr, 8); - - png_read_info(png_ptr, info_ptr); - - png_width = png_get_image_width(png_ptr, info_ptr); - png_height = png_get_image_height(png_ptr, info_ptr); - color_type = png_get_color_type(png_ptr, info_ptr); - bit_depth = png_get_bit_depth(png_ptr, info_ptr); - - png_read_update_info(png_ptr, info_ptr); - - printf("successfully read png file %s\n", file_name); - - return 0; - -} diff --git a/src/apc/fileparser_old.y b/src/apc/fileparser_old.y deleted file mode 100644 index f7ca050..0000000 --- a/src/apc/fileparser_old.y +++ /dev/null @@ -1,223 +0,0 @@ -/* Asset Package Compiler */ -%{ - #include - #include - #include - #include "sprite.h" - #include "symbol.h" - #include - - - extern void yyerror(); - extern int rinit(); - extern int yylex(); - #define DIR_SIZE 128/* size when all files have been concatenated together */ - - char dir_files[DIR_SIZE]; - FILE* yyin; - - int populate_yyin(FILE*); - int handle_vdat(char *); - int eval_png_file(char*); - int read_png_file(char*); - -%} -%define parse.error verbose -%union{ - char* str; - } - -/* %token EXT */ -/* %token FW */ -/* %token SPR */ -/* %token CC */ - -/* /\* Rules *\/ */ -/* %% */ -/* SS: SPR '/' MD '.' EXT */ -/* MD: CC '_' FW */ -/* | FW */ -/* | CC */ - - -%token VDAT -%token ODAT -%token ADAT - -/* Rules */ -%% -FLIST : FNAME /* Now output to VDAT.o */ -FNAME : VDAT {printf("handle_vdat(%s)\n", $1);handle_vdat(yylval.str);printf("handled vdat\n");} - | ADAT - | ODAT - -%% -int -main(int argc, char** argv) -{ - /* Take arguments */ - - /* Concatenate all files into buf, they are null-terminated - by default */ - FILE *fp; - - fp = fopen("all_files", "w+"); - - if(!populate_yyin(fp)) - printf("error processing the directory"); - - yyin = fp; - rinit(); - yyparse(); /* runs handle_vdat after token is scanned */ - - - - return 0; -} -void -yyerror (char const *s) -{ - fprintf(stderr, "%s\n", s); -} - -/* TODO: READ INTO SINGLE BUFFER, NOT A FILE */ -int -populate_yyin(FILE* fp) -{ - int files_pos = 0; - int file_len = 0; - struct dirent* ep; - - DIR* dp = opendir("pngfiles"); - /* Concatenate all file names, seperated by '\0' - into files[] */ - if(dp != NULL) - { - while(ep = readdir(dp)) - { file_len = strlen(ep->d_name); - fwrite(ep->d_name, 1, file_len, fp); - printf("writing %s to file\n", ep->d_name); - } - fseek(fp, SEEK_SET, 0); - return 0; - } - else - {return 1; - } - closedir(dp); -} - - - - -/* Analyze file_name for information on sprite sheet, - store sprite sheet and label into sprite then - push sprite onto sprites[]*/ -int -handle_vdat(char* file_name) -{ - /* Parse the file_name for data */ - - - /* Get the specs of the PNG file */ - if(!eval_png_file(file_name)) - { - printf("Failed in read_png_file\n"); - return 1; - } - - /* Insert sprite sheet from PNG into sprite_sheets */ - push_sprite(); - - - - - /* Store dir/filename in label as well as any other data that fits */ -} -int eval_png_file(char* file_name) -{ - /* Evaluate file_name for metadata */ - - /* Extracts header info from png_file */ - read_png_file(file_name); - - - /* Create the symbol and put it in symbol_table[]*/ - - return 0; -} - - - -/* variables for libPNG */ -int png_width,png_height; -png_byte bit_depth; -png_byte color_type; -png_structp png_ptr; -png_infop info_ptr; - -int -read_png_file( char* file_name) -{ - /* Setup PNG file */ - char header[8]; - int is_png = 0; - char* dir = "pngfiles"; - - /* TODO: Change this fopen to a real var! */ - FILE *fp = fopen("pngfiles/env_street_road03_0.png","rb"); - - if(!fp) - { printf("Could not read file %s in handle_vdat()", file_name); - return 1; - } - - fread(header, 1, 8, fp); - - is_png = !png_sig_cmp(header, 0, 8); - if(!is_png) - return 1; - - png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - - if (!png_ptr) - { printf("Failed to allocate png_ptr\n"); - return 1; - } - info_ptr = png_create_info_struct(png_ptr); - - if (!info_ptr) - { printf("Failed to create info_ptr\n"); - png_destroy_read_struct(&png_ptr,(png_infopp)NULL, (png_infopp)NULL); - return 1; - } - - png_infop end_info = png_create_info_struct(png_ptr); - if (!end_info) - { printf("Failed to create end_info \n"); - png_destroy_read_struct(&png_ptr,(png_infopp)NULL, (png_infopp)NULL); - return 1; - } - - if(setjmp(png_jmpbuf(png_ptr))) - { printf("Failed in init_io\n"); - png_destroy_read_struct(&png_ptr,(png_infopp)NULL, (png_infopp)NULL); - fclose(fp); - return 1; - } - png_init_io(png_ptr, fp); - png_set_sig_bytes(png_ptr, 8); - - png_read_info(png_ptr, info_ptr); - - png_width = png_get_image_width(png_ptr, info_ptr); - png_height = png_get_image_height(png_ptr, info_ptr); - color_type = png_get_color_type(png_ptr, info_ptr); - bit_depth = png_get_bit_depth(png_ptr, info_ptr); - - png_read_update_info(png_ptr, info_ptr); - - - return 0; - -} diff --git a/src/apc/filescanner.rl b/src/apc/filescanner.rl deleted file mode 100644 index c3a1baa..0000000 --- a/src/apc/filescanner.rl +++ /dev/null @@ -1,148 +0,0 @@ -#include -#include -#include -#include -#include -#include "fileparser.tab.h" - -int linit(void); -int tok_dir(DIR*, char *); - -#define MAX_TOK_LEN 256 -#define MAX_DIR_DEP 8 -#define MAX_PATH_LEN 64 -static DIR* dp_stack[MAX_DIR_DEP]; -static DIR** dsp; -static char path[MAX_PATH_LEN]; - -/* Setup stack and first directory to read from */ -int -linit() -{ - DIR *dp; - char cwd[MAX_TOK_LEN]; - - dsp = dp_stack; - - getcwd(cwd, MAX_TOK_LEN); - - printf("|------cwd is %s------|\n", cwd); - if(!(dp = opendir(cwd))) - printf("opendir(cwd) failed in linit()\n"); - - *dsp = dp; - /* Dont use ADD_PATH because it concats a "/", which is already - present with cwd */ - strcat(path, cwd); - printf("dp_stack is %x, dsp is %x size is %d\n",*dp_stack, *dsp, sizeof dp); - - return 0; -} - -int -yylex() -{ - int tok_t = 0; - char buf[MAX_TOK_LEN]; - char* file_name; - - /* Each call to tok_dir will return a file_name to be - tokenized. tok_dir calls readdir(), which saves the - position in the directory after returning a file_name - for the next call. */ - printf("|------in yylex(), calling tok_dir------|\n"); - if((tok_t = tok_dir(*dsp, buf)) == -1) - printf("tok_dir returned -1, something is broken\n"); - yylval.str = strdup(buf); - - printf("|------in yylex(), returning tok_t = %d | err = %s------|\n", tok_t, strerror(errno)); - - return tok_t; -} - -#define DSP_PUSH(_val) *++dsp = (_val) - -int -tok_dir(DIR* dp, char buf[]) -{ - struct dirent* de; /* directory entry */ - static DIR *tmp_dp; - char *tmp_path; - int path_len; - - -tok_start: - if((*dsp == NULL) || (de = readdir(*dsp)) == NULL) - { - if(errno) - { printf("Error:%s in tok_dir\n", strerror(errno)); - return errno; - } - if( (dsp - dp_stack) >= 0) - { - printf("Current directory is null, pop one off "); -#define DSP_POP() *dsp-- - - dp = DSP_POP(); - - /* Remove directory that was popped from path */ -#define SUB_PATH() tmp_path = strrchr(path, '/'); \ - path_len = strlen(tmp_path); \ - memset(tmp_path, 0, path_len) - - SUB_PATH(); - - goto tok_start; - } - return 0; /* Done */ - } - - else if(de->d_type == DT_REG) - { printf("|------dir_ent is a file, "\ - "setting yylval to %s------|\n", de->d_name); - memmove(buf, de->d_name, MAX_TOK_LEN); - return FDAT; - } - else if (de->d_type == DT_DIR ) - { if ((dsp - dp_stack) >= MAX_DIR_DEP) /* We've opened to many directories */ - { - printf("Too many directories!\n"); - return 1; - } - if(strcmp(de->d_name,".") == 0 || strcmp(de->d_name,"..") == 0) - { - printf("directory is %s \n", de->d_name); - goto tok_start; - } - - printf("|------ dir_ent is directory %s, "\ - "cwd = %s, path = %s ------|\n", de->d_name, get_current_dir_name(), path); - - - /* Add directory name to path */ -#define ADD_PATH(_name) strcat(path, "/"); \ - strcat(path, _name) - - ADD_PATH(de->d_name); - - tmp_dp = opendir(path); - if(tmp_dp == 0) - { printf("opening the directory failed,"\ - "errno = %s\n", strerror(errno)); - return -1; - } - - DSP_PUSH(tmp_dp); - - goto tok_start; - - } - else - { - printf("A file that is not a diretory or a regular file is unable to be tokenized: %s\n", de->d_name); - return -1; - } - - - -} diff --git a/src/apc/filescannerparser_old.rl b/src/apc/filescannerparser_old.rl deleted file mode 100644 index ecb2e80..0000000 --- a/src/apc/filescannerparser_old.rl +++ /dev/null @@ -1,78 +0,0 @@ -#include -#include -#include -#include -#include "fileparser.tab.h" -extern FILE* yyin; - -int rinit(void); - -#define MAX_TOK_LEN 32 -static char buf[MAX_TOK_LEN]; -static char *p, *pe; /* scanner points to p, pe points to end of buf */ - -%%{ - machine scanner; - - main := |* - - 'env_street_road03_0.png' => {ret=VDAT;memmove(rbuf, ts, (te-ts)); yylval.str=strdup(rbuf); printf("Lexer matched with %s\n",yylval.str);fbreak; }; - '.' => {printf("matched with .\n");fbreak;}; - '..' => {printf("matched with ..\n");fbreak;}; - - *|; - -}%% - -%%write data; - -int -rinit() -{ p = buf; - pe = p + fread(buf, 1, MAX_TOK_LEN, yyin); - printf("buf in rinit is %s\n", buf); - return 0; -} - -int -yylex() -{ int ret; - static char *eof; - char rbuf[MAX_TOK_LEN]; - int cs, act; - char *ts, *te; - - /*init cs, ts, te, act */ - %%write init; - ret = 0; - - %%write exec ; - if (te == 0) - { - if(eof == pe ){ - return 0; - } - printf("This is a lexical error, tokens can not be larger than max token length\n buf is = %s | ts = %s | te = %s\n", buf,ts,te); - return 0; - } - - - /* We matched a token, remove it from buf and set - buf to have rest of unmatched buf (buf - matchedtoken).*/ - if (!feof(yyin)) - { int r = pe-te; /* remainder length */ - memmove(buf, te, r); /* also the max more buf can hold */ - p = buf; - pe = p + r + fread(buf+r,1,MAX_TOK_LEN -r,yyin); - } - if((p+1) == pe && feof(yyin)) - eof = pe; - - return ret; -} - -/* 'sprites' => {}; - /0x[xdigit]{8}/ => {}; - '_' => {}; - /[digit]{2}/ => {}; /* CC */ - diff --git a/src/apc/ragson b/src/apc/ragson deleted file mode 100755 index d47463c16a703835348d296a5309ceb832cbe050..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22784 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 diff --git a/src/apc/ragson.sh b/src/apc/ragson.sh deleted file mode 100755 index 3da486d..0000000 --- a/src/apc/ragson.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -bison -t -d fileparser.y -ragel filescanner.rl -gcc sprite.c fileparser.tab.c filescanner.c -o ragson -lm -lpng diff --git a/src/apc/sprite.c b/src/apc/sprite.c deleted file mode 100644 index 82e1911..0000000 --- a/src/apc/sprite.c +++ /dev/null @@ -1,5 +0,0 @@ -int -push_sprite(void) -{ - return 0; -} diff --git a/src/apc/sprite.h b/src/apc/sprite.h deleted file mode 100644 index 2d55988..0000000 --- a/src/apc/sprite.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef _SPRITEH_ -#define _SPRITEH_ - -/* Sprite Sheet Header */ -/* Sprite Sheets can have 1-8 frames for each direction they are facing. */ -struct sprite_sheet -{ - int num_frames; /* Defaults to 0 */ - int frame_width; /*Found frome file name */ - int sprite_start; /* points to where first frame points */ -}; - - -extern struct sprite_sheet sprite_sheets[16]; /* stack of sprites */ -extern struct sprite_sheet* ssp; /* sprite sheets pointer */ - - -int push_sprite(); - -#endif diff --git a/src/apc/symbol.h b/src/apc/symbol.h deleted file mode 100644 index 8550a83..0000000 --- a/src/apc/symbol.h +++ /dev/null @@ -1,14 +0,0 @@ -/* Header file for Symbols */ -#ifndef _SYMBOLH_ -#define _SYMBOLH_ -#include "sprite.h" - -struct symbol -{ - struct sprite_sheet ss; - int ss_id; - char label[255]; -}; - -struct symbol symbol_table[16]; -#endif diff --git a/src/parser.y b/src/parser.y index 8a1db87..c16dc18 100644 --- a/src/parser.y +++ b/src/parser.y @@ -6,7 +6,7 @@ #include "sprite.h" #include "symbol.h" #include - + #include "ir.h" extern int lexer_init(); extern int lexer(); @@ -18,82 +18,154 @@ %define parse.error verbose %define lr.type ielr %define api.value.type union -%token NUM %token WORD //operators -%token PROTOCLASS //+ -%token SIBS //| -%token FNAME //! - //nonterminal types -%type fd -%type fdlist - -/* %token EXT */ -/* %token FW */ -/* %token SPR */ -/* %token CC */ -/* /\* Rules *\/ */ -/* %% */ -/* SS: SPR '/' MD '.' EXT */ -/* MD: CC '_' FW */ -/* | FW */ -/* | CC */ +%token CLOPEN // / +%token CLCLOSE // \ +%token RLS //! +%token RLE //# +%token RT //* +%token HB +//nonterminal types +%type element +%type vdat +%type elem_label +//terminals +%token NUM +%token fd +%token STR +%token VAR +%token SS +//precedence +%right LOW HIGH + +/* Syntax Directed Translation Scheme of the APC grammar */ + /* Rules */ %% +output: +class_list {condense();} //Seperate file? +; -object_defs: - %empty -| arch_id object_defs +class_list: +class_list class {cbi++;}; +| class ; -arch_id: - archetype -| arch_id_ref +class_label: +STR ; -arch_id_list: - arch_id -| arch_id arch_id_list +class: +class_label CLOPEN class_closure CLCLOSE {CB[cbi].label = $1;}; ; -archetype: - PROTOCLASS label arch_id_list SIBS arch_id_list -| PROTOCLASS label arch_id_list -| label arch_id_ref vdat +class_closure: +subclass_list +| subclass_list set_list +| set_list ; -label: - WORD +subclass_list: +subclass_list class {CB[cbi].subclass_index++;}; +| class +; + +set_list: +set_list set {CB[cbi].set_index++;}; +| set +; + + +//set needs a label, vdat_id. +set: +set_map_data element_list {insert_set();}; +| element_list +; + + +//TODO: Figure out what to do with hitbox and root. +set_map_data: +ref_list {}; +| ref_list hitbox +| ref_list hitbox root +| hitbox root +| hitbox +| root +; + +ref_list: +RLS quads RLE +; + +quads: +quads quad {OB[obi].ref_index++;OB[obi].num_ref++;}; +| quad +; + +quad: +NUM NUM NUM NUM {insert_ref($1, $2, $3, $4);}; ; -arch_id_ref: - NUM +hitbox: +HB NUM +; + +root: +RT NUM NUM NUM +; + +//parent_id is the set_index of the subclass_index. +element_list: +element_list element {CB[cbi].set_stack[stack_index].num_ele++;}; +| element +; + +element: +set_label elem_label vdat {insert_ele($2,$3); vbi++;}; +; + +set_label: + STR +; + +elem_label: + STR ; vdat: - spritesheet +vdat model {VB[vbi].num_models++;}; +| model ; -spritesheet: - fdlist +model: +model fdat +| fdat ; -fdlist: - fd -| fd fdlist +fdat: +label SS FNAME {insert_fdat($1, $2, $3);}; ; -fd: - FNAME WORD -| NUM; -%% +label: +STR +; +ref: +NUM +; + +FNAME: +STR +; + +%% int -main(int argc, char** argv) -{ /* Parse cmd line arguments */ +main (argc, argv) +{ lexer_init(); - yyparse(); /* runs handle_fname for each filename */ + yyparse(); return 0; } -- 2.18.0