/* Asset Package Compiler */
%code requires{
#include <stdint.h>
+ #include <unitypes.h>
}
%{
#include <stdio.h>
%define lr.type ielr
%union {
- uint64_t ref;
+ int ref;
int val;
- char *str;
+ uint8_t *str;
void *voidp;
-
}
//operators
%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 <ref> olink
%type <ref> ele_svlink
%type <ref> set_svlink
%token <str> STR
%token <val> SS
%token <str> NAME
+%token <str> FNAME
%token <ref> REF
%token <val> SSD
-%token <voidp> FPTR
-%token <voidp> QPTR
// Change width, height, num_ptrs to NUM because
// when scanning, we can't determine which NUM
// is which.
%token <val> WIDTH
%token <val> HEIGHT
%token <val> NUM_PTRS
+%token <voidp> FPTR
//precedence
%precedence LP
%precedence MP
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
| 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);};
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:
;
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);};
;
%%