X-Git-Url: https://www.kengrimes.com/gitweb/?p=henge%2Fwebcc.git;a=blobdiff_plain;f=src%2Fapc%2Fparser.y;h=f42ea7b02f7ba1a4a3b3f277ce82c681b6240a83;hp=c16dc1880eb16c45e61579d77491959cc1da5117;hb=a00b12aee56b4e8f633a291d8ead2d3e169166ca;hpb=77eed5955d5e0a418f868e0620ac7eb76576f2aa diff --git a/src/apc/parser.y b/src/apc/parser.y index c16dc18..f42ea7b 100644 --- a/src/apc/parser.y +++ b/src/apc/parser.y @@ -3,8 +3,6 @@ #include #include #include - #include "sprite.h" - #include "symbol.h" #include #include "ir.h" @@ -26,20 +24,26 @@ %token RLE //# %token RT //* %token HB +%token MOD //nonterminal types %type element %type vdat %type elem_label +%type label + //terminals %token NUM %token fd %token STR %token VAR %token SS +%token 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