From 19d01f115230c63000ccb312866016f63c5e1e23 Mon Sep 17 00:00:00 2001 From: Jordan Date: Fri, 16 Dec 2016 10:11:42 -0800 Subject: [PATCH] buncha small fixes for ir, parser, etc. --- src/ir.c | 34 ++++++++++++++++------------------ src/lexer.c | 1 + src/lexer_fsm.rl | 2 +- src/name.c | 2 +- src/parser.y | 45 +++++++++++++++++++++++---------------------- 5 files changed, 42 insertions(+), 42 deletions(-) diff --git a/src/ir.c b/src/ir.c index 8652ddc..316486d 100644 --- a/src/ir.c +++ b/src/ir.c @@ -152,14 +152,14 @@ insert_framesheet(struct name*, int, int, int, int, uint8_t*); -/* Dynamically allocate memory for a class data structure, - or cdat, after a class has been identified in a grammar. - We also create a stack of class pointers so that - we can access the cdat during processing of that - cdats sets and elements, a requirement because the - nature of recursive classes prevents us from accessing - the cdat based on the previous index into cdat_buf, - which is a list of all allocated cdats +/* Dynamically allocate memory for a class data structure, */ +/* or cdat, after a class has been identified in a grammar. */ +/* We also create a stack of class pointers so that */ +/* we can access the cdat during processing of that */ +/* cdats sets and elements, a requirement because the */ +/* nature of recursive classes prevents us from accessing */ +/* the cdat based on the previous index into cdat_buf, */ +/* which is a list of all allocated cdats */ /* Cdats: A cdat is a class data structure. Cdats serve as the central */ /* data types of the IR. Cdats contain pointers to their subclasses so that the relationship between */ /* classes can be determined, but the subclasses are not represented inside */ @@ -385,7 +385,6 @@ ir_init() u8_stpncpy(name.name, root, 4); pagesize = sysconf(_SC_PAGESIZE); - printf("pagesize is %l\n", pagesize); INIT_CDAT(); *cdat_stackp = CURRENT_CDAT(); @@ -736,8 +735,6 @@ insert_set_namelist } } - done: - ; } /*. We create new odats for each map variant that are children of the current odat/set @@ -791,7 +788,7 @@ insert_map insert_ref(curr_mem_odatp, refid); /* If current odatp on stack has a link, then we need to make our own link. just set the vdat_idx */ - if(CURR_SS_ODATP()->vdat_idx = 0) + if(CURR_SS_ODATP()->vdat_idx == 0) { //alloc a link linkp = alloc_link(); linkp->type = CURR_SS_ODATP()->linkp->type; @@ -968,17 +965,18 @@ insert_ref void insert_vdat () -{ struct odat* curr_ss_odatp; - struct vdat* curr_vdatp; +{ struct vdat* curr_vdatp; + + curr_vdatp = curr_vdat(); - curr_vdatp->creator = curr_ss_odatp; - curr_ss_odatp->vdat_idx = num_vdats; - curr_ss_odatp->vdatp = curr_vdatp; + curr_vdatp->creator = CURR_SS_ODATP(); + CURR_SS_ODATP()->vdat_idx = num_vdats; + CURR_SS_ODATP()->vdatp = curr_vdatp; alloc_vdat(); } void -insert_refid_statement +insert_statement ( refid ) int refid; { CURR_SS_ODATP()->refid = refid; diff --git a/src/lexer.c b/src/lexer.c index 97e5e98..c22525a 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -28,6 +28,7 @@ #include /* Local */ +#include "apc.h" #include "parser.tab.h" #ifndef DE_STACKSIZE #define DE_STACKSIZE 1024 diff --git a/src/lexer_fsm.rl b/src/lexer_fsm.rl index 344ffdb..f7b4665 100644 --- a/src/lexer_fsm.rl +++ b/src/lexer_fsm.rl @@ -111,7 +111,7 @@ int lexer_setstr(uint8_t*, int); tok = name %to(push_name) ; -tok_lexer := ((name | val | ref | dimensions | map) tok_delimiter)+ tok [\0]; + tok_lexer := ((name | val | ref | dimensions | map) tok_delimiter)+ tok [\0]; write data; diff --git a/src/name.c b/src/name.c index 612426c..9fd82de 100644 --- a/src/name.c +++ b/src/name.c @@ -37,5 +37,5 @@ name_u8_set ( struct name* name, ucs4_t uc ) -{ return u8_set(name->name, uc); +{ return u8_set(name->name, uc, MAX_NAME_LEN); } diff --git a/src/parser.y b/src/parser.y index 85c6c50..e509890 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,17 @@ 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 @@ -34,7 +35,7 @@ %union { int ref; int val; - uint8_t *str; + uint8_t* str; struct name* name; void *voidp; } @@ -58,7 +59,7 @@ %token D %token NAME //nonterminals -%type ref_id +%type ref_id /* Syntax Directed Translation Scheme of the APC grammar */ /* Rules */ @@ -95,7 +96,7 @@ vdat_statement ; ref_statement: -set_namelist ref_id {insert_set_refid($2);}; +set_namelist ref_id {insert_refid($2);}; ; link_namelist: @@ -115,14 +116,14 @@ set_namelist MOPEN map ; 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 -- 2.18.0