#include <stdio.h>
#include <string.h>
#include <dirent.h>
- #include "sprite.h"
- #include "symbol.h"
#include <png.h>
#include "ir.h"
%token RLE //#
%token RT //*
%token HB
+%token MOD
//nonterminal types
%type <int> element
%type <int> vdat
%type <str> elem_label
+%type <str> label
+
//terminals
%token <int> NUM
%token <int> fd
%token <str> STR
%token <int> VAR
%token <int> SS
+%token <str> FNAME
//precedence
-%right LOW HIGH
+%precedence LOW
+%precedence MED
+%precedence HIGH
-/* Syntax Directed Translation Scheme of the APC grammar */
+ /* Syntax Directed Translation Scheme of the APC grammar */
/* Rules */
;
class_list:
-class_list class {cbi++;};
+class_list class {inc_cbi()};
| class
;
-class_label:
-STR
-;
-
class:
-class_label CLOPEN class_closure CLCLOSE {CB[cbi].label = $1;};
+label CLOPEN class_closure CLCLOSE {set_class_label($1);};
;
class_closure:
;
subclass_list:
-subclass_list class {CB[cbi].subclass_index++;};
+subclass_list class {inc_subclass_idx();};
| class
;
set_list:
-set_list set {CB[cbi].set_index++;};
+set_list set {inc_set_index();};
| set
;
//set needs a label, vdat_id.
set:
-set_map_data element_list {insert_set();};
-| element_list
+set_map_data element_list HIGH {insert_set();};
+| element_list LOW
;
-//TODO: Figure out what to do with hitbox and root.
+//TODO: Figure out what to do with hitbox and root.
set_map_data:
ref_list {};
| ref_list hitbox
;
quads:
-quads quad {OB[obi].ref_index++;OB[obi].num_ref++;};
+quads quad {inc_ref();};
| quad
;
//parent_id is the set_index of the subclass_index.
element_list:
-element_list element {CB[cbi].set_stack[stack_index].num_ele++;};
-| element
+element_list element HIGH {inc_ele();};
+| element LOW
;
element:
-set_label elem_label vdat {insert_ele($2,$3); vbi++;};
+set_label elem_label vdat LOW {insert_ele($2,$3); };
;
set_label:
;
vdat:
-vdat model {VB[vbi].num_models++;};
+vdat model {inc_models();};
| model
+
;
model:
-model fdat
+MOD model fdat
| fdat
;
;
label:
-STR
+STR REF
+| REF
;
-ref:
-NUM
-;
-
-FNAME:
-STR
-;
%%
int