/* Asset Package Compiler */
-%code requires{
- #include <stdint.h>
+%code requires {
#include <unitypes.h>
- #include "apc.h"
}
+
%{
#include <stdio.h>
#include <string.h>
#include <dirent.h>
-
+ #include <unitypes.h>
extern int lexer_init(); //?
extern int lexer(); //?
extern void pop_cdat(void);
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_map(uint8_t*,int, int, 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_framesheet(uint8_t* ,int, int, int,int, uint8_t*);
#define yylex lexer
%}
%define parse.error verbose
%define lr.type ielr
-%glr-parser
%union {
- int ref;
+ long long ref;
int val;
- uint8_t *str;
- struct name* name;
+ uint8_t* str;
void *voidp;
}
%token <val> HEIGHT
%token <val> WIDTH
%token <val> D
-%token <name> NAME
-%token SHIFT
-//nonterminals
-%type <int> ref_id
+%token <str> NAME
/* Syntax Directed Translation Scheme of the APC grammar */
/* Rules */
;
ref_statement:
-set_namelist ref_id {insert_set_refid($2);};
+set_namelist REF {insert_refid($2);};
;
link_namelist:
;
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 PATH {insert_map($1, 0, $2, $3, $4, $5);};
+| NAME REF PATH {insert_map($1, 0, 0, 0, $2, $3);};
+| NAME D REF PATH {insert_map($1, $2, 0, 0, $3, $4);};
+| NAME D NUM NUM REF 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 PATH {insert_mlink(NULL, $3); };
+| MOPEN LINK NAME LINK REF PATH {insert_mlink($3,$5); };
;
//shift list_namelist name > reduce vlink
set_namelist MOPEN REF
;
-ref_id:
-LINK REF {$$ = $2;};
-;
-
-
vdat_statement:
set_namelist SS spritesheet_statement
| set_namelist SS vlink
| NAME D PATH {insert_framesheet($1, $2, 0, 0, 0, $3);};
| NAME HEIGHT WIDTH PATH {insert_framesheet($1, 0, $2, $3, 0, $4);};
| NAME PATH {insert_framesheet($1, 0, 0, 0, 0, $2);};
-| NAME D HEIGHT WIDTH ref_id PATH {insert_framesheet($1, $2, $3, $4, $5, $6);};
-| NAME D ref_id PATH {insert_framesheet($1, $2, 0, 0, $3, $4);};
-| NAME HEIGHT WIDTH ref_id PATH {insert_framesheet($1, 0, $2, $3, $4, $5);};
-| NAME ref_id PATH {insert_framesheet($1, 0, 0, 0, $2, $3);};
+| NAME D HEIGHT WIDTH REF PATH {insert_framesheet($1, $2, $3, $4, $5, $6);};
+| NAME D REF PATH {insert_framesheet($1, $2, 0, 0, $3, $4);};
+| NAME HEIGHT WIDTH REF PATH {insert_framesheet($1, 0, $2, $3, $4, $5);};
+| NAME REF PATH {insert_framesheet($1, 0, 0, 0, $2, $3);};
;
%%