merged
[henge/webcc.git] / src / apc / parser.y
index e6d145c..c45a5ce 100644 (file)
@@ -1,6 +1,7 @@
 /* Asset Package Compiler */
 %code requires{
   #include <stdint.h>
 /* Asset Package Compiler */
 %code requires{
   #include <stdint.h>
+  #include <unitypes.h>
 }
 %{
   #include <stdio.h>
 }
 %{
   #include <stdio.h>
 %define lr.type ielr
 
 %union {
 %define lr.type ielr
 
 %union {
-  uint64_t ref;
+  int ref;
   int val;
   int val;
-  char *str;
+  uint8_t *str;
   void *voidp;
   void *voidp;
-
 }
 
  //operators
 }
 
  //operators
 %token         EOPEN     // [
 %token         ECLOSE    // ]
 %token         VOPEN     // /
 %token         EOPEN     // [
 %token         ECLOSE    // ]
 %token         VOPEN     // /
-%token         VCLOSE    // \
+%token         VCLOSE    // '\'
+%token         MOPEN     // {
+%token         MCLOSE
+%token         HB
+%token         ROOT
 
 %token         QOPEN     // !
 %token         QCLOSE    // @
 
 %token         QOPEN     // !
 %token         QCLOSE    // @
-%token         RT        // &
-%token         HB        // #
-//nonterminal types
+
+ //nonterminal types
 %type <ref> olink
 %type <ref> ele_svlink
 %type <ref> set_svlink
 %type <ref> olink
 %type <ref> ele_svlink
 %type <ref> set_svlink
 %token <str> STR
 %token <val> SS
 %token <str> NAME
 %token <str> STR
 %token <val> SS
 %token <str> NAME
+%token <str> FNAME
 %token <ref> REF
 %token <val> SSD
 %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
 // 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
+%token <voidp> FPTR
 //precedence
 %precedence LP
 %precedence MP
 %precedence HP
 //precedence
 %precedence LP
 %precedence MP
 %precedence HP
-
  /* Syntax Directed Translation Scheme of the APC grammar */
 
 /* Rules */
  /* Syntax Directed Translation Scheme of the APC grammar */
 
 /* Rules */
@@ -73,15 +75,15 @@ cdat_buf:
 class_list
 ;
 
 class_list
 ;
 
+class:
+ NAME CLOPEN {push_cdat($1);} class_block CLCLOSE              {pop_cdat();};
+;
+
 class_list:
 class_list class
 | class
 ;
 
 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
 class_block:
 class_list
 | class_list set_list
@@ -93,86 +95,92 @@ set_list set
 | set
 ;
 
 | set
 ;
 
-root:
-RT NUM NUM NUM                                      {insert_root($2, $3, $4);};
+map_list:
+map_list map MP
+| map LP                                          
 ;
 
 ;
 
-quad_file:
-QOPEN QPTR  QCLOSE                                  {insert_quad($2);};
-
-hitbox:
-HB NUM                                              {insert_hitbox($2);}
+map:
+MOPEN NAME NUM NUM NAME                                       {insert_map($2, $3, $4, $5);}; 
+| MOPEN NAME NAME                                             {insert_map($2, 0, 0, $3);};
 ;
 
 set_map_data:
 ;
 
 set_map_data:
-quad_file
-| quad_file hitbox
-| quad_file hitbox root
-| hitbox root
-| hitbox
-| root
+map_list MP
 ;
 
 set:
 ;
 
 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 vdat set_map_data element_list HP                            {insert_set(); insert_set_vdatid();};
+| set_label set_vlink set_map_data element_list MP                     {insert_set();};
+| set_label set_svlink set_map_data element_list LP                   {insert_set_svlink($2); insert_set(); };
+| set_label set_map_data element_list MP                               {insert_set(); };
+| set_label set_map_data LP                                            {insert_set(); };
+| set_label vdat element_list MP                                      {insert_set(); insert_set_vdatid();};
+| set_label set_vlink element_list LP                                 {insert_set(); };
+| set_label set_svlink element_list MP                                {insert_set_svlink($2); insert_set();};
+| set_label element_list MP
+| set_label vdat LP
+| olink                                                             {insert_set_olink($1);};
 ;
 
 
 ;
 
 
+
 set_label:
 set_label:
-HP NAME REF                                          {insert_set_label($2,$3);};
-| LP NAME                                            {insert_set_label($2, -1);};
+NAME REF MP                                          {insert_set_label($1,$2);};
+| NAME LP                                            {insert_set_label($1, -1);};
 ;
 
 set_svlink:
 ;
 
 set_svlink:
-REF
-
+REF MP
 ;
 
 set_vlink:
 ;
 
 set_vlink:
-REF NAME                                             {insert_set_vlink($1, $2);};
+REF NAME HP                                             {insert_set_vlink($1, $2);};
 ;
 
 olink:
 ;
 
 olink:
-REF
+REF LP
 ;
 
 //parent_id is the set_index of the subclass_index.
 element_list:
 ;
 
 //parent_id is the set_index of the subclass_index.
 element_list:
-element_list element MP
+element_list element HP 
 | element LP
 ;
 
 ele_label:
 | element LP
 ;
 
 ele_label:
-HP NAME REF                                          {insert_ele_label($2, $3);};
-| LP NAME                                            {insert_ele_label($2, -1);};
+NAME REF MP                                         {insert_ele_label($1, $2);};
+| NAME LP                                           {insert_ele_label($1, -1);};
 ;
 
 ele_vlink:
 ;
 
 ele_vlink:
-REF NAME                                             {insert_ele_vlink($1, $2);};
+REF NAME HP                                            {insert_ele_vlink($1, $2);};
 ;
 
 ele_svlink:
 ;
 
 ele_svlink:
-REF
+REF MP
+;
+
+ele_map_data:
+map MP
+| map_list HP
 ;
 
 element:
 ;
 
 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);};
+  ele_label vdat ele_map_data                                {insert_ele(); insert_ele_vdatid();};
+| ele_label ele_vlink ele_map_data                           {insert_ele(); };
+| ele_label ele_svlink ele_map_data                          {insert_ele_svlink($2);insert_ele(); };
+| ele_label ele_map_data                                     {insert_ele();};
+| ele_label vdat                                             {insert_ele(); insert_ele_vdatid();};
+| ele_label ele_vlink                                        {insert_ele(); };
+| ele_label ele_svlink                                       {insert_ele_svlink($2); insert_ele(); ;};
+| MOPEN olink                                                {insert_ele_olink($2);};
 ;
 
 vdat:
 ;
 
 vdat:
-VOPEN model_list VCLOSE
+model_list LP
+| NAME NUM NUM NAME MP                                                 {insert_vdat($1, $2, $3, $4);};
+| NAME NAME                                                            {insert_vdat($1, 0, 0, $2);};
 ;
 
 model_list:
 ;
 
 model_list:
@@ -190,12 +198,12 @@ spritesheet HP framesheet
 ;
 
 framesheet:
 ;
 
 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:
-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);};
 ;
 
 %%
 ;
 
 %%