/* Asset Package Compiler */
+%code requires{
+ #include <stdint.h>
+}
%{
#include <stdio.h>
#include <string.h>
- #include <stdint.h>
#include <dirent.h>
#include <png.h>
#include <apc/ir.h>
%}
%define parse.error verbose
%define lr.type ielr
-%define api.value.type union
-//operators
+
+%union {
+ uint64_t ref;
+ int val;
+ char *str;
+ void *voidp;
+
+}
+
+ //operators
%token CLOPEN // /
%token CLCLOSE // \
%token SOPEN
%token VOPEN
%token VCLOSE
-%token RLS //!
-%token RLE //#
+%token QOPEN //!
+%token QCLOSE //#
%token RT //*
%token HB
%token MOD
%token FS
%token ELE
//nonterminal types
-%type <uint64_t> olink
-%type <uint64_t> ele_svlink
-%type <uint64_t> set_svlink
+%type <ref> olink
+%type <ref> ele_svlink
+%type <ref> set_svlink
//terminals
-%token <int> NUM
-%token <char*> STR
-%token <int> SS
-%token <char*> NAME
-%token <uint64_t> REF
-%token <int> SSD
-%token <void*> FPTR
-%token <int> WIDTH
-%token <int> HEIGHT
-%token <int> NUM_PTRS
+%token <val> NUM
+%token <str> STR
+%token <val> SS
+%token <str> NAME
+%token <ref> REF
+%token <val> SSD
+%token <voidp> FPTR
+%token <val> WIDTH
+%token <val> HEIGHT
+%token <val> NUM_PTRS
//precedence
-%precedence LOW
-%precedence MED
-%precedence HIGH
+%precedence LP
+%precedence MP
+%precedence HP
/* Syntax Directed Translation Scheme of the APC grammar */
class_block:
class_list
-| class_list set_list
+| class_list set_list
| set_list
;
root:
RT NUM NUM NUM {insert_root($2, $3, $4);};
;
-quad_list:
-RLS quads RLE
-;
-quads:
-quads quad
+quad_list:
+quad_list quad
| quad
;
quad:
-NUM NUM NUM REF {insert_quad($1, $2, $3, $4);};
+QOPEN NUM NUM NUM REF QCLOSE {insert_quad($2, $3, $4, $5);};
hitbox:
HB NUM {insert_hitbox($2);}
set_label:
-HIGH NAME REF {insert_set_label($2,$3);};
-| LOW NAME {insert_set_label($2, -1);};
+HP NAME REF {insert_set_label($2,$3);};
+| LP NAME {insert_set_label($2, -1);};
;
set_svlink:
//parent_id is the set_index of the subclass_index.
element_list:
-element_list element MED
-| element LOW
+element_list element MP
+| element LP
;
ele_label:
-HIGH NAME REF {insert_ele_label($2, $3);};
-| LOW NAME {insert_ele_label($2, -1);};
+HP NAME REF {insert_ele_label($2, $3);};
+| LP NAME {insert_ele_label($2, -1);};
;
ele_vlink:
;
model:
-spritesheet LOW
+spritesheet LP
;
spritesheet:
-spritesheet HIGH framesheet
+spritesheet HP framesheet
| framesheet
;
framesheet:
-SSD NAME REF HEIGHT WIDTH NUM_PTRS frame_pointers LOW {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 HIGH FPTR {insert_frame_pointer($2, $4);};
+frame_pointers SSD HP FPTR {insert_frame_pointer($2, $4);};
| SSD FPTR {insert_frame_pointer($1, $2);};
;