X-Git-Url: https://www.kengrimes.com/gitweb/?p=henge%2Fwebcc.git;a=blobdiff_plain;f=src%2Fapc%2Flexer_lex.rl;h=4c9aeea2700d634a858349563355bbc688dd877c;hp=d27c40b13ae225f5cb0403e12375b581c548c407;hb=03efe0c43855ff6af7eb2194f6d4a5f022bc415d;hpb=e0b51d0d5df867ac6a44d047342312d535620c01 diff --git a/src/apc/lexer_lex.rl b/src/apc/lexer_lex.rl index d27c40b..4c9aeea 100644 --- a/src/apc/lexer_lex.rl +++ b/src/apc/lexer_lex.rl @@ -15,25 +15,23 @@ char* ttos(const char* str, int); #define MAX_TOK_LEN 64 #define MAX_TOKENS 16 #define MAX_STR_SIZE (MAX_TOK_LEN * MAX_TOKENS) - +#define $($)#$ +#define PUSHTOK(TOK,LFUNC,UTYPE) \ + do { \ + printf("PUSHTOK(" $(TOK) $(LFUNC) $(UTYPE) ")\n"); \ + tok_t = TOK; \ + yylval.UTYPE = LFUNC(ts, p-ts); \ + lexer_pushtok(tok_t, yylval); \ + ++ntok; \ + } while (0) %%{ machine token_matcher; # set up yylval and tok_t to be pushed to stack - action set_ref { - tok_t = REF; \ - yylval.ref = ttor(ts, p-ts); \ - lexer_pushtok(tok_t, yylval); } - - action set_val { tok_t = NUM; \ - yylval.val = ttov(ts, p-ts); \ - lexer_pushtok(tok_t, yylval); } - - action set_name { tok_t = NAME; \ - yylval.str = ttos(ts, p-ts); \ - lexer_pushtok(tok_t, yylval); } - + action set_ref { PUSHTOK(REF, ttor, ref); } + action set_val { PUSHTOK(NUM, ttov, val); } + action set_name { PUSHTOK(NAME, ttos, str); } action set_ts { ts = p; } # instantiate machines for each possible token @@ -54,17 +52,14 @@ char* ttos(const char* str, int); int lexer_lex (const char* str) { const char *p, *pe, *ts, *eof; - int cs, tok_t ; //tok_t == token type - + int cs, tok_t, ntok = 0; + printf ("Lexing: %s\n",str); p = ts = str; pe = p + strlen(str) + 1; %%write init; %%write exec; - - lexer_pushtok(tok_t, yylval); - - printf (str); - return 1; + printf ("Lexed %i tokens\n",ntok); + return ntok; } int ipow(int base, int exp)