X-Git-Url: https://www.kengrimes.com/gitweb/?p=henge%2Fapc.git;a=blobdiff_plain;f=src%2Flexer.rl;h=f6d25aa6a46dc8499fecde7f5f423968182f29ac;hp=3440e24738fad45664bbda2c6f95a1303e1c7e87;hb=6035780f8e8c7ba47ae517ad6cf7e47515e847fd;hpb=598910007024e398205daba6ee894309e19743e1 diff --git a/src/lexer.rl b/src/lexer.rl index 3440e24..f6d25aa 100644 --- a/src/lexer.rl +++ b/src/lexer.rl @@ -38,10 +38,11 @@ yycstate* apc_cstate; } exit(1); } - yypush_parse(apc_pstate, REF, &ref, apc_cstate); + tok_val.ref = ref; + yypush_parse(apc_pstate, REF, &tok_val, apc_cstate); ntok++; } - action push_link { yypush_parse(apc_pstate, LINK, (YYSTYPE) 0, apc_cstate);} + action push_link { tok_val.val = 0; yypush_parse(apc_pstate, LINK, &tok_val , apc_cstate);} action push_val { int val; te = NULL; errno = 0; val = strtoll((char*)ts,(char**)&te,10); @@ -49,52 +50,65 @@ yycstate* apc_cstate; { fprintf(stderr, "strtoll could not parse %s\n", (char*)str); exit(1); } - yypush_parse(apc_pstate, NUM, &val, apc_cstate); + tok_val.val = val; + yypush_parse(apc_pstate, NUM, &tok_val, apc_cstate); ntok++; } action push_name { printf("Lexer_lexstring:: action:push_name: from %s to %s\n", ts, p); - yypush_parse( apc_pstate, NAME, strdndup(ts, p-ts), apc_cstate); + *p = '\0'; + tok_val.str = ts; + yypush_parse( apc_pstate, NAME, &tok_val, apc_cstate); ntok++; } action push_map { printf("Lexer_lexstring:: action:push_map: pushing map token\n"); - yypush_parse(apc_pstate, MAP, (uint8_t*) '~', apc_cstate); + tok_val.str = (uint8_t*) '~'; + yypush_parse(apc_pstate, MAP, &tok_val, apc_cstate); ntok++; } action set_ts { printf("Lexer_lexstring:: action:set_ts. ts = %s\n", p); ts = p; } action push_SS { printf("Lexer_lexstring:: action:push_SS. p = %s\n",p); - yypush_parse(apc_pstate, SS, (uint8_t*) "SS", apc_cstate); + tok_val.str = (uint8_t*) "SS"; + yypush_parse(apc_pstate, SS, &tok_val, apc_cstate); ntok++; } action push_S { printf("Lexer_lexstring:: action:push_S. p = %s\n", p); - yypush_parse(apc_pstate, FACING, (YYSTYPE) 0, apc_cstate); + tok_val.val = 0; + yypush_parse(apc_pstate, FACING, &tok_val, apc_cstate); ntok++; } action push_SW { printf("Lexer_lexstring:: action:push_SW. p = %s\n", p); - yypush_parse(apc_pstate, FACING, (YYSTYPE) 1, apc_cstate); + tok_val.val = 1; + yypush_parse(apc_pstate, FACING, &tok_val, apc_cstate); ntok++; } action push_W { printf("Lexer_lexstring:: action:push_W. p = %s\n", p); - yypush_parse(apc_pstate, FACING, (YYSTYPE) 2, apc_cstate); + tok_val.val = 2; + yypush_parse(apc_pstate, FACING, &tok_val, apc_cstate); ntok++; } action push_NW { printf("Lexer_lexstring:: action:push_NW. p = %s\n", p); - yypush_parse(apc_pstate, FACING, (YYSTYPE) 3, apc_cstate); + tok_val.val = 3; + yypush_parse(apc_pstate, FACING, &tok_val, apc_cstate); ntok++; } action push_N { printf("Lexer_lexstring:: action:push_N. p = %s\n", p); - yypush_parse(apc_pstate, FACING, (YYSTYPE) 4, apc_cstate); + tok_val.val = 4; + yypush_parse(apc_pstate, FACING, &tok_val, apc_cstate); ntok++; } action push_NE { printf("Lexer_lexstring:: action:push_NE. p = %s\n", p); - yypush_parse(apc_pstate, FACING, (YYSTYPE) 5, apc_cstate); + tok_val.val = 5; + yypush_parse(apc_pstate, FACING, &tok_val, apc_cstate); ntok++; } action push_E { printf("Lexer_lexstring:: action:push_N. p = %s\n", p); - yypush_parse(apc_pstate, FACING, (YYSTYPE) 6, apc_cstate); + tok_val.val = 6; + yypush_parse(apc_pstate, FACING, &tok_val, apc_cstate); ntok++; } action push_SE { printf("Lexer_lexstring:: action:push_N. p = %s\n", p); - ypush_parse(apc_pstate, FACING, (YYSTYPE) 7, apc_cstate); + tok_val.val = 7; + yypush_parse(apc_pstate, FACING, &tok_val, apc_cstate); ntok++; } action ref_error { printf("ref from %s to %s has an inappropriate amount of hex digits, it must have eight.\n", ts, p); @@ -135,12 +149,14 @@ int lexer_lexstring int size ) { uint8_t *p; - uint8_t *ts, *pe, *te; - int cs, ntok, eof;//, tok_t; + uint8_t *ts, *pe, *te, *eof; + int cs, ntok; + union YYSTYPE tok_val; ntok = 0; p = ts = str; - pe = p + size + 1; + pe = eof = p + size + 1; + printf("|---Begin lexstring on p = %s, pe = %s.\n",p, pe);