X-Git-Url: https://www.kengrimes.com/gitweb/?p=henge%2Fapc.git;a=blobdiff_plain;f=src%2Fparser.y;h=e47ae976a315f6e02e71abda1c4cd1172f4419e8;hp=6fe096906a3a2f0e6888edf6889bae031cae0bdf;hb=c74e77d70a21bd97bc6a8826c9cc278989b9d5bd;hpb=1c75266c959f8168fb6a73b6fef22fc91a5affc7 diff --git a/src/parser.y b/src/parser.y index 6fe0969..e47ae97 100644 --- a/src/parser.y +++ b/src/parser.y @@ -1,10 +1,10 @@ /* Asset Package Compiler */ -%code requires{ - #include +%code requires { #include - #include "apc.h" } + %{ + #include "apc.h" #include #include #include @@ -12,16 +12,16 @@ extern int lexer_init(); //? extern int lexer(); //? extern void pop_cdat(void); - extern void push_cdat(uint8_t*); + extern void push_cdat(struct name*); extern void insert_vdat(void); extern void insert_refid(int); - extern void insert_set_name(uint8_t*); - extern void insert_set_namelist(uint8_t*); - extern void insert_link_name(uint8_t*); - extern void insert_map(int, uint8_t*, int, int, uint8_t*); - extern void insert_mlink(uint8_t*, int); - extern void insert_vlink(uint8_t*, int); - extern void insert_framesheet(uint_t* int, int, int,int, uint8_t*); + extern void insert_set_name(struct name*); + extern void insert_set_namelist(struct name*); + extern void insert_link_name(struct name*); + extern void insert_map(struct name*,int, int, int, int, uint8_t*); + extern void insert_mlink(struct name*, int); + extern void insert_vlink(struct name*, int); + extern void insert_framesheet(struct name* ,int, int, int,int, uint8_t*); #define yylex lexer @@ -30,12 +30,11 @@ %} %define parse.error verbose %define lr.type ielr -%glr-parser %union { int ref; int val; - uint8_t *str; + uint8_t* str; struct name* name; void *voidp; } @@ -58,9 +57,8 @@ %token WIDTH %token D %token NAME -%token SHIFT //nonterminals -%type ref_id +%type ref_id /* Syntax Directed Translation Scheme of the APC grammar */ /* Rules */ @@ -97,7 +95,7 @@ vdat_statement ; ref_statement: -set_namelist ref_id {insert_set_refid($2);}; +set_namelist ref_id {insert_refid($2);}; ; link_namelist: @@ -117,22 +115,22 @@ set_namelist MOPEN map ; map: -NAME NUM NUM PATH {insert_map($1, 0, $3, $4, 0, $5);}; -| NAME PATH {insert_map($1, 0, 0, 0, 0, $2);}; -| NAME D PATH {insert_map($1, $2, 0, 0, 0, $3);}; -| NAME D NUM NUM PATH {insert_map($1, $2, $3, $4, 0, $5);}; -| NAME NUM NUM ref_id PATH {insert_map($1, 0, $2, $3, $4, $5);}; -| NAME ref_id PATH {insert_map($1, 0, 0, 0, $2, $3);}; -| NAME D ref_id PATH {insert_map($1, $2, 0, 0, $3, $4);}; -| NAME D NUM NUM ref_id PATH {insert_map($1, $2, $3, $4, $5, $6);}; +NAME NUM NUM PATH {insert_map($1, 0, $3, 0, 0, $4);}; +| NAME PATH {insert_map($1, 0, 0, 0, 0, $2);}; +| NAME D PATH {insert_map($1, $2, 0, 0, 0, $3);}; +| NAME D NUM NUM PATH {insert_map($1, $2, $3, $4, 0, $5);}; +| NAME NUM NUM ref_id PATH {insert_map($1, 0, $2, $3, $4, $5);}; +| NAME ref_id PATH {insert_map($1, 0, 0, 0, $2, $3);}; +| NAME D ref_id PATH {insert_map($1, $2, 0, 0, $3, $4);}; +| NAME D NUM NUM ref_id PATH {insert_map($1, $2, $3, $4, $5, $6);}; ; //shift list_namelist name > reduce mlink mlink: -MOPEN LINK NAME LINK link_namelist PATH {insert_mlink($4, 0); }; +MOPEN LINK NAME LINK link_namelist PATH {insert_mlink($3, 0); }; | MOPEN LINK link_namelist PATH {insert_mlink(NULL, 0); }; -| MOPEN LINK ref_id PATH {insert_mlink(NULL, $4); }; -| MOPEN LINK NAME LINK ref_id PATH {insert_mlink($4,$6); }; +| MOPEN LINK ref_id PATH {insert_mlink(NULL, $3); }; +| MOPEN LINK NAME LINK ref_id PATH {insert_mlink($3,$5); }; ; //shift list_namelist name > reduce vlink