X-Git-Url: https://www.kengrimes.com/gitweb/?p=henge%2Fwebcc.git;a=blobdiff_plain;f=src%2Fapc%2Fparser.y;fp=src%2Fapc%2Fparser.y;h=9190bc413187da8cd027e489bc63459bfe4aeb45;hp=e6d145c0d7fdac481bfbde0776c2e8f6cb41ebd2;hb=0f505368fa8abbc2e9ab0296b9a5e6bd4869345f;hpb=df52756177b6e4fd9465cbb1b17a35eb48bb67c9 diff --git a/src/apc/parser.y b/src/apc/parser.y index e6d145c..9190bc4 100644 --- a/src/apc/parser.y +++ b/src/apc/parser.y @@ -1,6 +1,7 @@ /* Asset Package Compiler */ %code requires{ #include + #include } %{ #include @@ -20,11 +21,10 @@ %define lr.type ielr %union { - uint64_t ref; + int ref; int val; - char *str; + uint8_t *str; void *voidp; - } //operators @@ -35,13 +35,16 @@ %token EOPEN // [ %token ECLOSE // ] %token VOPEN // / -%token VCLOSE // \ +%token VCLOSE // '\' +%token MOPEN // { +%token MCLOSE +%token HB +%token ROOT %token QOPEN // ! %token QCLOSE // @ -%token RT // & -%token HB // # -//nonterminal types + + //nonterminal types %type olink %type ele_svlink %type set_svlink @@ -50,16 +53,16 @@ %token STR %token SS %token NAME +%token FNAME %token REF %token SSD -%token FPTR -%token QPTR // Change width, height, num_ptrs to NUM because // when scanning, we can't determine which NUM // is which. %token WIDTH %token HEIGHT %token NUM_PTRS +%token FPTR //precedence %precedence LP %precedence MP @@ -73,15 +76,15 @@ cdat_buf: class_list ; +class: + CLOPEN NAME {push_cdat($2);} class_block CLCLOSE {pop_cdat();}; +; + class_list: class_list class | class ; -class: - CLOPEN NAME {push_cdat($2);} class_block CLCLOSE {pop_cdat();}; -; - class_block: class_list | class_list set_list @@ -93,31 +96,34 @@ set_list set | set ; -root: -RT NUM NUM NUM {insert_root($2, $3, $4);}; +variant_list: +variant_list variant +| variant ; -quad_file: -QOPEN QPTR QCLOSE {insert_quad($2);}; - hitbox: -HB NUM {insert_hitbox($2);} +HB NUM +; + +root: +ROOT NUM NUM NUM +; + +variant: +MOPEN NAME NUM NUM NAME {insert_variant($2, $3, $4, $5);}; ; set_map_data: -quad_file -| quad_file hitbox -| quad_file hitbox root -| hitbox root -| hitbox -| root +variant_list +| variant_list HP hitbox root +| variant_list MP root ; set: -SOPEN set_label set_map_data element_list {alloc_vdat();} vdat SCLOSE {insert_set(); insert_set_vdatid();}; +SOPEN set_label set_map_data element_list vdat SCLOSE {insert_set(); insert_set_vdatid();}; | SOPEN set_label set_map_data element_list set_vlink SCLOSE {insert_set();}; | SOPEN set_label set_map_data element_list set_svlink SCLOSE {insert_set_svlink($5); insert_set(); }; -| SOPEN set_label element_list {alloc_vdat();} vdat SCLOSE {insert_set(); insert_set_vdatid();}; +| SOPEN set_label element_list vdat SCLOSE {insert_set(); insert_set_vdatid();}; | 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);}; @@ -161,18 +167,22 @@ ele_svlink: REF ; +ele_map_data: +variant_list + element: -EOPEN ele_label hitbox root {alloc_vdat();} vdat ECLOSE {insert_ele(); insert_ele_vdatid();}; -| 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 {alloc_vdat();} vdat ECLOSE {insert_ele(); insert_ele_vdatid();}; -| EOPEN ele_label root ele_vlink ECLOSE {insert_ele(); }; -| EOPEN ele_label root ele_svlink ECLOSE {insert_ele_svlink($4); insert_ele(); }; +EOPEN ele_label ele_map_data vdat ECLOSE {insert_ele(); insert_ele_vdatid();}; +| EOPEN ele_label ele_map_data ele_vlink ECLOSE {insert_ele(); }; +| EOPEN ele_label ele_map_data ele_svlink ECLOSE {insert_ele_svlink($4);insert_ele(); }; +| EOPEN ele_label vdat ECLOSE {insert_ele(); insert_ele_vdatid();}; +| EOPEN ele_label ele_vlink ECLOSE {insert_ele(); }; +| EOPEN ele_label ele_svlink ECLOSE {insert_ele_svlink($3); insert_ele(); ;} | EOPEN olink ECLOSE {insert_ele_olink($2);}; ; vdat: -VOPEN model_list VCLOSE +VOPEN model_list +| VOPEN NAME NUM NUM NAME {insert_vdat($2, $3, $4, $5);}; ; model_list: @@ -190,12 +200,12 @@ spritesheet HP framesheet ; framesheet: -SSD NAME REF HEIGHT WIDTH NUM_PTRS frame_pointers LP {insert_framesheet($1, $2, $3, $4, $5, $6);}; +SSD NAME REF HEIGHT WIDTH NUM_PTRS frame_pointers LP //{insert_framesheet($1, $2, $3, $4, $5, $6);}; ; frame_pointers: -frame_pointers SSD HP FPTR {insert_frame_pointer($2, $4);}; -| SSD FPTR {insert_frame_pointer($1, $2);}; +frame_pointers SSD HP FPTR //{insert_frame_pointer($2, $4);}; +| SSD FPTR //{insert_frame_pointer($1, $2);}; ; %%