From 6d71e2f6bce0712867cf9e214d97f8fad4f659f1 Mon Sep 17 00:00:00 2001 From: "jordan@hack_attack" Date: Wed, 21 Sep 2016 12:57:42 -0700 Subject: [PATCH] compiling bison file --- src/apc/parser.y | 165 ++++++++++++++++++++++++++++------------------- 1 file changed, 99 insertions(+), 66 deletions(-) diff --git a/src/apc/parser.y b/src/apc/parser.y index e795d31..fdbb56f 100644 --- a/src/apc/parser.y +++ b/src/apc/parser.y @@ -2,6 +2,7 @@ %{ #include #include + #include #include #include #include @@ -16,28 +17,39 @@ %define parse.error verbose %define lr.type ielr %define api.value.type union -%token WORD //operators %token CLOPEN // / %token CLCLOSE // \ +%token SOPEN +%token SCLOSE +%token EOPEN +%token ECLOSE +%token VOPEN +%token VCLOSE + %token RLS //! %token RLE //# %token RT //* %token HB %token MOD +%token SET +%token FS +%token ELE //nonterminal types -%type element -%type vdat -%type elem_label -%type label - +%type olink +%type ele_svlink +%type set_svlink //terminals %token NUM -%token fd -%token STR -%token VAR +%token STR %token SS -%token FNAME +%token NAME +%token REF +%token SSD +%token FPTR +%token WIDTH +%token HEIGHT +%token NUM_PTRS //precedence %precedence LOW %precedence MED @@ -45,124 +57,145 @@ /* Syntax Directed Translation Scheme of the APC grammar */ - /* Rules */ %% -output: -class_list {condense();} //Seperate file? +cdat_buf: +class_list ; class_list: -class_list class {inc_cbi()}; +class_list class | class ; class: -label CLOPEN class_closure CLCLOSE {set_class_label($1);}; +NAME CLOPEN {push_cdat($1);} class_block CLCLOSE {pop_cdat();}; ; -class_closure: -subclass_list -| subclass_list set_list +class_block: +class_list +| class_list set_list | set_list ; -subclass_list: -subclass_list class {inc_subclass_idx();}; -| class -; - set_list: -set_list set {inc_set_index();}; +set_list set | set ; +root: +RT NUM NUM NUM {insert_root($2, $3, $4);}; +; +quad_list: +RLS quads RLE +; -//set needs a label, vdat_id. -set: -set_map_data element_list HIGH {insert_set();}; -| element_list LOW +quads: +quads quad +| quad ; +quad: +NUM NUM NUM REF {insert_quad($1, $2, $3, $4);}; + +hitbox: +HB NUM {insert_hitbox($2);} +; -//TODO: Figure out what to do with hitbox and root. set_map_data: -ref_list {}; -| ref_list hitbox -| ref_list hitbox root +quad_list +| quad_list hitbox +| quad_list hitbox root | hitbox root | hitbox | root ; -ref_list: -RLS quads RLE +set: +SOPEN set_label element_list set_map_data vdat SCLOSE {insert_set(); insert_vdat();}; +| SOPEN set_label element_list set_map_data set_vlink SCLOSE {insert_set();}; +| SOPEN set_label element_list set_map_data set_svlink SCLOSE {insert_set_svlink($5); insert_set(); }; +| SOPEN set_label element_list vdat SCLOSE {insert_set(); insert_vdat();}; +| SOPEN set_label element_list set_vlink SCLOSE {insert_set(); } +| SOPEN set_label element_list set_svlink SCLOSE {insert_set_svlink($4); insert_set();}; +| SOPEN olink SCLOSE {insert_set_olink($2);}; ; -quads: -quads quad {inc_ref();}; -| quad + +set_label: +HIGH NAME REF {insert_set_label($2,$3);}; +| LOW NAME {insert_set_label($2, -1);}; ; -quad: -NUM NUM NUM NUM {insert_ref($1, $2, $3, $4);}; +set_svlink: +REF ; -hitbox: -HB NUM +set_vlink: +REF NAME {insert_set_vlink($1, $2);}; ; -root: -RT NUM NUM NUM +olink: +REF ; //parent_id is the set_index of the subclass_index. element_list: -element_list element HIGH {inc_ele();}; +element_list element MED | element LOW ; -element: -set_label elem_label vdat LOW {insert_ele($2,$3); }; +ele_label: +HIGH NAME REF {insert_ele_label($2, $3);}; +| LOW NAME {insert_ele_label($2, -1);}; ; -set_label: - STR +ele_vlink: +REF NAME {insert_ele_vlink($1, $2);}; ; -elem_label: - STR +ele_svlink: +REF +; + +element: +EOPEN ele_label hitbox root vdat ECLOSE {insert_ele(); insert_vdat();}; +| EOPEN ele_label hitbox root ele_vlink ECLOSE {insert_ele(); }; +| EOPEN ele_label hitbox root ele_svlink ECLOSE {insert_ele_svlink($5);insert_ele(); }; +| EOPEN ele_label root vdat ECLOSE {insert_ele(); insert_vdat();}; +| EOPEN ele_label root ele_vlink ECLOSE {insert_ele(); }; +| EOPEN ele_label root ele_svlink ECLOSE {insert_ele_svlink($4); insert_ele(); }; +| EOPEN olink ECLOSE {insert_ele_olink($2);}; ; vdat: -vdat model {inc_models();}; -| model +VOPEN model_list VCLOSE +; +model_list: +model_list model +| model ; model: -MOD model fdat -| fdat +spritesheet LOW ; -fdat: -label SS FNAME {insert_fdat($1, $2, $3);}; +spritesheet: +spritesheet HIGH framesheet +| framesheet ; -label: -STR REF -| REF +framesheet: +SSD NAME REF HEIGHT WIDTH NUM_PTRS frame_pointers LOW {insert_framesheet($1, $2, $3, $4, $5, $6);}; ; +frame_pointers: +frame_pointers SSD HIGH FPTR {insert_frame_pointer($2, $4);}; +| SSD FPTR {insert_frame_pointer($1, $2);}; +; %% -int -main (argc, argv) -{ - lexer_init(); - yyparse(); - return 0; -} void yyerror (char const *s) -- 2.18.0