X-Git-Url: https://www.kengrimes.com/gitweb/?p=henge%2Fwebcc.git;a=blobdiff_plain;f=src%2Fapc%2Flexer_lex.rl;h=edb9a6abe880cebd351ccbf92f27f529211e5577;hp=f7eb429b9e705566b32591b4aef0dc572282643f;hb=3b2b070b7700554cb5e2fe92765c740e5540e1c0;hpb=5204a4831d3ed34270d5fbb260aece8194c859e5 diff --git a/src/apc/lexer_lex.rl b/src/apc/lexer_lex.rl index f7eb429..edb9a6a 100755 --- a/src/apc/lexer_lex.rl +++ b/src/apc/lexer_lex.rl @@ -20,7 +20,7 @@ char* ttos(const char* str, int); do { \ printf("PUSHTOK(" $(TOK) $(LFUNC) $(UTYPE) ")\n"); \ tok_t = TOK; \ - yylval.UTYPE = LFUNC(ts, ts-p-1); \ + yylval.UTYPE = LFUNC(ts, p-ts+1); \ lexer_pushtok(tok_t, yylval); \ ++ntok; \ } while (0) @@ -36,12 +36,14 @@ char* ttos(const char* str, int); 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; - val = digit+ . '_' %set_val; - name = alpha+ . '_' %set_name; - tok = (ref | val | name) %set_ts; + ref = '0x'. xdigit+ %set_ref; + val = digit+ %set_val; + name = alpha+ %set_name; + tok = (ref | val | name); + segment = tok . [_\0] %set_ts; + + main := segment+ ; - main := alpha+ @set_name; }%% @@ -54,8 +56,7 @@ int lexer_lex (const char* str) int cs, tok_t, ntok = 0; printf ("Lexing: %s\n",str); p = ts = str; - pe = p + strlen(str); - printf("p = %s \n", p); + pe = p + strlen(str) + 1; %%write init; %%write exec; printf ("Lexed %i tokens\n",ntok);