lexer test driver
authorken <ken@mihrtec.com>
Sat, 8 Oct 2016 03:24:55 +0000 (20:24 -0700)
committerken <ken@mihrtec.com>
Sat, 8 Oct 2016 03:24:55 +0000 (20:24 -0700)
src/bin/tools/testscanner.c

index 270f1ff..c217faa 100644 (file)
@@ -9,10 +9,20 @@
 #include <stdlib.h> 
 #include <errno.h>  //lib errors
 /* Internal */
+#include <apc/parser.tab.h>
+
+extern //scanner.c
+int  scanner(void);
 extern //scanner.c
 int  scanner_init(void);
-extern
+extern //scanner.c
 void scanner_quit(void);
+extern //parser.tab.h
+YYSTYPE yylval;
+extern //lexer.c
+int lexer(void);
+extern //lexer.c
+int lexer_init(void);
 
 /* Ansi Term Colors */
 #define RED     "\x1b[31m"
@@ -25,6 +35,10 @@ void scanner_quit(void);
 
 int main(void);
 int test_init(void);
+int test_scan(void);
+int test_lex(void);
+
+const char* cargs['Z'] = {0};
 
 int main
 #define $($)#$
@@ -36,23 +50,46 @@ int main
     PRINTINFO(T);                              \
     if (U())                                   \
       PRINTFAIL(U);                            \
-    PRINTPASS(U);                              \
+    else                                       \
+      PRINTPASS(U);                            \
   } while (0)
 ()
-{ RUN_UNIT(test_init,"Initializing\n");
+{ cargs['d'] = "../../src";
+  RUN_UNIT(test_scan,"Scanning\n");
   return 0;
 }
 
-int test_init
-#define TESTS 50
+int test_scan
 ()
-{ static int n = 0;
-  printf("Init Run %-2i\n",n+1);
-  if (scanner_init())
-    { perror("scanner init");
+{ static int scanned_total = 0;
+  static int n = 0;  
+  int scanned, lexed;
+  int i;
+  if (lexer_init())
+    { perror("LIB:");
       return -1;
     }
-  scanner_quit();
-  return (++n < TESTS) ? test_init() : scanner_init();
+ loop:
+  if ((lexed = test_lex()) == 0)
+    { printf("No tokens to parse\n");
+      return 0;
+    }
+  else
+    { printf("Parsed %i Token%c\n", lexed, lexed > 1 ? 's' : ' ');
+      goto loop;
+    }
+  return 0;
 }
 
+int test_lex
+()
+{ int tok_val, n = 0;
+  while ((tok_val = lexer()) || yylval.val)
+    { if (++n % 9 == 0)
+       printf("\n");
+      printf("[T:%4i|Y:%4i]",tok_val,yylval.val);
+      yylval.val = 0;
+    }
+  printf(";\n");
+  return n;
+}