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=c45a5ce04bc1977539d829332d2c1b78d53d2cd9;hp=e6d145c0d7fdac481bfbde0776c2e8f6cb41ebd2;hb=3d03d8941abeb2a78f3334098a7bd09285023da8;hpb=cc4724ed8e52fd6de475f869c5e65ba0d9c82f03 diff --git a/src/apc/parser.y b/src/apc/parser.y index e6d145c..c45a5ce 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,21 +53,20 @@ %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 %precedence HP - /* Syntax Directed Translation Scheme of the APC grammar */ /* Rules */ @@ -73,15 +75,15 @@ cdat_buf: class_list ; +class: + NAME CLOPEN {push_cdat($1);} 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,86 +95,92 @@ set_list set | set ; -root: -RT NUM NUM NUM {insert_root($2, $3, $4);}; +map_list: +map_list map MP +| map LP ; -quad_file: -QOPEN QPTR QCLOSE {insert_quad($2);}; - -hitbox: -HB NUM {insert_hitbox($2);} +map: +MOPEN NAME NUM NUM NAME {insert_map($2, $3, $4, $5);}; +| MOPEN NAME NAME {insert_map($2, 0, 0, $3);}; ; set_map_data: -quad_file -| quad_file hitbox -| quad_file hitbox root -| hitbox root -| hitbox -| root +map_list MP ; 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 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 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);}; +set_label vdat set_map_data element_list HP {insert_set(); insert_set_vdatid();}; +| set_label set_vlink set_map_data element_list MP {insert_set();}; +| set_label set_svlink set_map_data element_list LP {insert_set_svlink($2); insert_set(); }; +| set_label set_map_data element_list MP {insert_set(); }; +| set_label set_map_data LP {insert_set(); }; +| set_label vdat element_list MP {insert_set(); insert_set_vdatid();}; +| set_label set_vlink element_list LP {insert_set(); }; +| set_label set_svlink element_list MP {insert_set_svlink($2); insert_set();}; +| set_label element_list MP +| set_label vdat LP +| olink {insert_set_olink($1);}; ; + set_label: -HP NAME REF {insert_set_label($2,$3);}; -| LP NAME {insert_set_label($2, -1);}; +NAME REF MP {insert_set_label($1,$2);}; +| NAME LP {insert_set_label($1, -1);}; ; set_svlink: -REF - +REF MP ; set_vlink: -REF NAME {insert_set_vlink($1, $2);}; +REF NAME HP {insert_set_vlink($1, $2);}; ; olink: -REF +REF LP ; //parent_id is the set_index of the subclass_index. element_list: -element_list element MP +element_list element HP | element LP ; ele_label: -HP NAME REF {insert_ele_label($2, $3);}; -| LP NAME {insert_ele_label($2, -1);}; +NAME REF MP {insert_ele_label($1, $2);}; +| NAME LP {insert_ele_label($1, -1);}; ; ele_vlink: -REF NAME {insert_ele_vlink($1, $2);}; +REF NAME HP {insert_ele_vlink($1, $2);}; ; ele_svlink: -REF +REF MP +; + +ele_map_data: +map MP +| map_list HP ; 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 olink ECLOSE {insert_ele_olink($2);}; + ele_label vdat ele_map_data {insert_ele(); insert_ele_vdatid();}; +| ele_label ele_vlink ele_map_data {insert_ele(); }; +| ele_label ele_svlink ele_map_data {insert_ele_svlink($2);insert_ele(); }; +| ele_label ele_map_data {insert_ele();}; +| ele_label vdat {insert_ele(); insert_ele_vdatid();}; +| ele_label ele_vlink {insert_ele(); }; +| ele_label ele_svlink {insert_ele_svlink($2); insert_ele(); ;}; +| MOPEN olink {insert_ele_olink($2);}; ; vdat: -VOPEN model_list VCLOSE +model_list LP +| NAME NUM NUM NAME MP {insert_vdat($1, $2, $3, $4);}; +| NAME NAME {insert_vdat($1, 0, 0, $2);}; ; model_list: @@ -190,12 +198,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);}; ; %%