+++ /dev/null
-/* Asset Package Compiler */
-%code requires{
- #include <stdint.h>
-}
-%{
- #include <stdio.h>
- #include <string.h>
- #include <dirent.h>
- #include <png.h>
- #include <apc/ir.h>
-
- extern int lexer_init();
- extern int lexer();
- #define yylex lexer
-
-
- void yyerror();
-%}
-%define parse.error verbose
-%define lr.type ielr
-
-%union {
- uint64_t ref;
- 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 // #
-//nonterminal types
-%type <ref> olink
-%type <ref> ele_svlink
-%type <ref> set_svlink
-//terminals
-%token <val> NUM
-%token <str> STR
-%token <val> SS
-%token <str> NAME
-%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
-//precedence
-%precedence LP
-%precedence MP
-%precedence HP
-
- /* Syntax Directed Translation Scheme of the APC grammar */
-
-/* Rules */
-%%
-cdat_buf:
-class_list
-;
-
-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_list
-;
-
-set_list:
-set_list set
-| set
-;
-
-root:
-RT NUM NUM NUM {insert_root($2, $3, $4);};
-;
-
-quad_file:
-QOPEN QPTR QCLOSE {insert_quad($2);};
-
-hitbox:
-HB NUM {insert_hitbox($2);}
-;
-
-set_map_data:
-quad_file
-| quad_file hitbox
-| quad_file hitbox root
-| hitbox root
-| hitbox
-| 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 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);};
-;
-
-set_svlink:
-REF
-
-;
-
-set_vlink:
-REF NAME {insert_set_vlink($1, $2);};
-;
-
-olink:
-REF
-;
-
-//parent_id is the set_index of the subclass_index.
-element_list:
-element_list element MP
-| element LP
-;
-
-ele_label:
-HP NAME REF {insert_ele_label($2, $3);};
-| LP NAME {insert_ele_label($2, -1);};
-;
-
-ele_vlink:
-REF NAME {insert_ele_vlink($1, $2);};
-;
-
-ele_svlink:
-REF
-;
-
-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);};
-;
-
-vdat:
-VOPEN model_list VCLOSE
-;
-
-model_list:
-model_list model
-| model
- ;
-
-model:
-spritesheet LP
-;
-
-spritesheet:
-spritesheet HP framesheet
-| framesheet
-;
-
-framesheet:
-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);};
-;
-
-%%
-
-void
-yyerror (char const *s)
-{ fprintf(stderr, "%s\n", s);
-}