\r
\r
\r
-/* Dynamically allocate memory for a class data structure,\r
- or cdat, after a class has been identified in a grammar.\r
- We also create a stack of class pointers so that\r
- we can access the cdat during processing of that\r
- cdats sets and elements, a requirement because the\r
- nature of recursive classes prevents us from accessing\r
- the cdat based on the previous index into cdat_buf,\r
- which is a list of all allocated cdats\r
+/* Dynamically allocate memory for a class data structure, */\r
+/* or cdat, after a class has been identified in a grammar. */\r
+/* We also create a stack of class pointers so that */\r
+/* we can access the cdat during processing of that */\r
+/* cdats sets and elements, a requirement because the */\r
+/* nature of recursive classes prevents us from accessing */\r
+/* the cdat based on the previous index into cdat_buf, */\r
+/* which is a list of all allocated cdats */\r
/* Cdats: A cdat is a class data structure. Cdats serve as the central */\r
/* data types of the IR. Cdats contain pointers to their subclasses so that the relationship between */\r
/* classes can be determined, but the subclasses are not represented inside */\r
u8_stpncpy(name.name, root, 4);\r
\r
pagesize = sysconf(_SC_PAGESIZE);\r
- printf("pagesize is %l\n", pagesize);\r
\r
INIT_CDAT();\r
*cdat_stackp = CURRENT_CDAT();\r
}\r
\r
}\r
- done:\r
- ;\r
}\r
\r
/*. We create new odats for each map variant that are children of the current odat/set\r
insert_ref(curr_mem_odatp, refid);\r
\r
/* If current odatp on stack has a link, then we need to make our own link. just set the vdat_idx */\r
- if(CURR_SS_ODATP()->vdat_idx = 0)\r
+ if(CURR_SS_ODATP()->vdat_idx == 0)\r
{ //alloc a link\r
linkp = alloc_link();\r
linkp->type = CURR_SS_ODATP()->linkp->type;\r
void\r
insert_vdat\r
()\r
-{ struct odat* curr_ss_odatp;\r
- struct vdat* curr_vdatp;\r
+{ struct vdat* curr_vdatp;\r
+\r
+ curr_vdatp = curr_vdat();\r
\r
- curr_vdatp->creator = curr_ss_odatp;\r
- curr_ss_odatp->vdat_idx = num_vdats;\r
- curr_ss_odatp->vdatp = curr_vdatp;\r
+ curr_vdatp->creator = CURR_SS_ODATP();\r
+ CURR_SS_ODATP()->vdat_idx = num_vdats;\r
+ CURR_SS_ODATP()->vdatp = curr_vdatp;\r
alloc_vdat();\r
}\r
\r
void\r
-insert_refid_statement\r
+insert_statement\r
( refid )\r
int refid;\r
{ CURR_SS_ODATP()->refid = refid;\r
/* Asset Package Compiler */
-%code requires{
- #include <stdint.h>
+%code requires {
#include <unitypes.h>
- #include "apc.h"
}
+
%{
+ #include "apc.h"
#include <stdio.h>
#include <string.h>
#include <dirent.h>
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_refid(int);
+ 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
%union {
int ref;
int val;
- uint8_t *str;
+ uint8_t* str;
struct name* name;
void *voidp;
}
%token <val> D
%token <name> NAME
//nonterminals
-%type <int> ref_id
+%type <val> ref_id
/* Syntax Directed Translation Scheme of the APC grammar */
/* Rules */
;
ref_statement:
-set_namelist ref_id {insert_set_refid($2);};
+set_namelist ref_id {insert_refid($2);};
;
link_namelist:
;
map:
-NAME NUM NUM PATH {insert_map(0, $1, $2, $3, 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);};
+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