%union {
uint64_t ref;
- int NUM;
+ int val;
char *str;
void *voidp;
}
//operators
-%token CLOPEN // /
-%token CLCLOSE // \
-%token SOPEN
-%token SCLOSE
-%token EOPEN
-%token ECLOSE
-%token VOPEN
-%token VCLOSE
-
-%token QOPEN //!
-%token QCLOSE //#
-%token RT //*
-%token HB
-%token MOD
-%token SET
-%token FS
-%token ELE
+%token CLOPEN // (
+%token CLCLOSE // )
+%token SOPEN // {
+%token SCLOSE // }
+%token EOPEN // [
+%token ECLOSE // ]
+%token VOPEN // /
+%token VCLOSE // \
+
+%token QOPEN // !
+%token QCLOSE // @
+%token RT // &
+%token HB // #
//nonterminal types
%type <ref> olink
%type <ref> ele_svlink
%type <ref> set_svlink
//terminals
-%token <NUM> NUM
+%token <val> NUM
%token <str> STR
-%token <NUM> SS
+%token <val> SS
%token <str> NAME
%token <ref> REF
-%token <NUM> SSD
+%token <val> SSD
%token <voidp> FPTR
-%token <NUM> WIDTH
-%token <NUM> HEIGHT
-%token <NUM> NUM_PTRS
+%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
//precedence
%precedence LP
%precedence MP
;
class:
-NAME CLOPEN {push_cdat($1);} class_block CLCLOSE {pop_cdat();};
+ CLOPEN NAME {push_cdat($2);} class_block CLCLOSE {pop_cdat();};
;
class_block:
;
root:
-RT NUM NUM NUM {insert_root($2, $3, $4);};
+RT NUM NUM NUM {insert_root($2, $3, $4);};
;
-quad_list:
-quad_list quad
-| quad
-;
-
-quad:
-QOPEN NUM NUM NUM REF QCLOSE {insert_quad($2, $3, $4, $5);};
+quad_file:
+QOPEN QPTR QCLOSE {insert_quad($2);};
hitbox:
-HB NUM {insert_hitbox($2);}
+HB NUM {insert_hitbox($2);}
;
set_map_data:
-quad_list
-| quad_list hitbox
-| quad_list hitbox root
+quad_file
+| quad_file hitbox
+| quad_file hitbox root
| hitbox root
| hitbox
| root
;
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 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:
-HP NAME REF {insert_set_label($2,$3);};
-| LP NAME {insert_set_label($2, -1);};
+HP NAME REF {insert_set_label($2,$3);};
+| LP NAME {insert_set_label($2, -1);};
;
set_svlink:
REF
+
;
set_vlink:
-REF NAME {insert_set_vlink($1, $2);};
+REF NAME {insert_set_vlink($1, $2);};
;
olink:
;
ele_label:
-HP NAME REF {insert_ele_label($2, $3);};
-| LP NAME {insert_ele_label($2, -1);};
+HP NAME REF {insert_ele_label($2, $3);};
+| LP NAME {insert_ele_label($2, -1);};
;
ele_vlink:
-REF NAME {insert_ele_vlink($1, $2);};
+REF NAME {insert_ele_vlink($1, $2);};
;
ele_svlink:
;
element:
-EOPEN ele_label hitbox root vdat ECLOSE {insert_ele(); insert_vdat();};
+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 vdat ECLOSE {insert_ele(); insert_vdat();};
+| 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);};
model_list:
model_list model
-| model
-;
+| model
+ ;
model:
spritesheet LP
;
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);};
;
%%