( uint64_t ref_id
)
{
- struct cdat* curr_cdatp;
- struct link* curr_linkp;
- struct odat* curr_setp;
+ struct set* curr_setp;
- curr_cdatp = curr_cdat();
- curr_setp = alloc_odat();
- curr_linkp = alloc_link();
+ curr_setp = curr_set();
- curr_setp->cdat_idx = curr_cdatp->idx;
- curr_setp->ref_id = ref_id; /* Will be resolved to offset
- when link is processed */
- curr_linkp->type = 1;
- curr_linkp->link_t.olink.ref_id = ref_id;
- curr_linkp->classp = curr_cdatp;
- curr_linkp->set_idx = curr_cdatp->num_sets++;
- curr_linkp->ele_idx = -1;
+ curr_setp->ref_id = ref_id;
}
)
{
struct cdat* curr_cdatp;
+ struct odat* curr_odatp;
struct link* curr_linkp;
+
curr_cdatp = curr_cdat();
+ curr_odatp = curr_odat();
curr_linkp = alloc_link();
/* Insert vlink into link_stack so that it gets processed at
output time */
curr_linkp->type = 2;
+ /* Store the target odat information*/
curr_linkp->link_t.vlink.ref_id = ref_id;
+ memmove(curr_linkp->link_t.vlink.anim_name, anim_name, 32);
+ /* Store the linking odat/cdat information */
curr_linkp->classp = curr_cdatp;
+ curr_linkp->odatp = curr_odatp;
curr_linkp->set_idx = curr_cdatp->num_sets;
curr_linkp->ele_idx = -1;
- memmove(curr_linkp->link_t.vlink.anim_name, anim_name, 32);
}
/* Svlinks dont have animation names */
void
insert_set_svlink
-( uint64_t ref_id
+( uint64_t ref_id
)
{
struct cdat* curr_cdatp;
( uint64_t ref_id
)
{
- struct cdat* curr_cdatp;
- struct set* curr_setp;
- struct ele* curr_elep;
- struct link* curr_linkp;
-
- curr_cdatp = curr_cdat();
- //curr_elep = curr_ele();
- curr_linkp = alloc_link();
-
- //curr_elep->cdat_idx = curr_cdatp;
- //curr_elep->ref_id = ref_id;
-
- curr_linkp->type = 1;
- curr_linkp->link_t.olink.ref_id = ref_id;
- curr_linkp->classp = curr_cdatp;
- curr_linkp->set_idx = curr_cdatp->num_sets++;
- //curr_linkp->ele_idx = curr_setp->num_ele++;
-
+ /* Do nothing because we already know the ref_id that
+ the odat needs for this element (in the quad_file) */
}
void
action set_val { PUSHTOK(NUM, ttov, val); }
action set_name { PUSHTOK(NAME, ttos, str); }
action set_ts { ts = p; }
+ action lex_error {printf("input error: character %c in filename %s is invalid\n", fc, str);}
# instantiate machines for each possible token
ref = '0x' xdigit+ %set_ref;
tok = ref | val | name;
segment = (tok . '_') %set_ts;
- main := segment* . tok;
+ main := segment* . tok $lerr(lex_error);
}%%
int cs, tok_t, ntok = 0;
printf ("Lexing: %s\n",str);
p = ts = str;
- pe = p + strlen(str) + 1;
+ pe = p + strlen(str);
%%write init;
%%write exec;
printf ("Lexed %i tokens\n",ntok);