lexer_lex now returns the number of tokens it pushed
[henge/webcc.git] / src / apc / lexer_lex.rl
index e1f9669..d87f47d 100644 (file)
@@ -24,15 +24,18 @@ char* ttos(const char* str, int);
   action set_ref {
                    tok_t = REF;                      \
                    yylval.ref = ttor(ts, p-ts);      \
-                   lexer_pushtok(tok_t, yylval); }
+                   lexer_pushtok(tok_t, yylval);     \
+                   num_tokens++; }
 
   action set_val { tok_t = NUM;                      \
                    yylval.val = ttov(ts, p-ts);      \
-                   lexer_pushtok(tok_t, yylval); }
+                   lexer_pushtok(tok_t, yylval);     \
+                   num_tokens++; }
 
   action set_name { tok_t = NAME;                    \
                     yylval.str = ttos(ts, p-ts);     \
-                    lexer_pushtok(tok_t, yylval); }
+                    lexer_pushtok(tok_t, yylval);    \
+                    num_tokens++; }
 
   action set_ts   { ts = p; }
 
@@ -49,26 +52,23 @@ char* ttos(const char* str, int);
 
 %%write data;
 
-/*  0xxdigit+  => tok_t REF, yylval.ref = uint64_t
-    [0-9]+  => tok_t NUM, yylval.val = int
-    [a-zA-Z]+ => tok_t NAME, yylval.str = char*       */
-
 /* Scan filename and push the its tokens
    onto the stack */
 int lexer_lex (const char* str)
 {
   const char *p, *pe, *ts, *eof;
-  int  cs, tok_t ; //tok_t == token type
+  int  cs, tok_t, num_tokens; //tok_t == token type
+
+  num_tokens = 0;
 
   p = ts = str;
   pe = p + strlen(str) + 1;
   %%write init;
   %%write exec;
 
-  lexer_pushtok(tok_t, yylval);
 
   printf (str);
-  return 1;
+  return num_tokens;
 }
 
 int ipow(int base, int exp)