pushing to debug make
[henge/webcc.git] / src / apc / parser.y
index c16dc18..f42ea7b 100644 (file)
@@ -3,8 +3,6 @@
   #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 */
@@ -49,16 +53,12 @@ class_list                   {condense();} //Seperate file?
 ;
 
 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:
@@ -68,24 +68,24 @@ subclass_list
 ;
 
 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
@@ -100,7 +100,7 @@ RLS quads RLE
 ;
 
 quads:
-quads quad                    {OB[obi].ref_index++;OB[obi].num_ref++;};
+quads quad                    {inc_ref();};
 | quad
 ;
 
@@ -118,12 +118,12 @@ RT NUM NUM NUM
 
 //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:
@@ -135,12 +135,13 @@ elem_label:
 ;
 
 vdat:
-vdat model                    {VB[vbi].num_models++;};
+vdat model               {inc_models();};
 | model
+
 ;
 
 model:
-model fdat
+MOD model fdat
 | fdat
 ;
 
@@ -149,16 +150,10 @@ label SS FNAME                {insert_fdat($1, $2, $3);};
 ;
 
 label:
-STR
+STR REF
+| REF
 ;
 
-ref:
-NUM
-;
-
-FNAME:
-STR
-;
 
 %%
 int