merged
[henge/webcc.git] / src / apc / lexer_lex.rl
index edb9a6a..a84575e 100755 (executable)
@@ -3,63 +3,35 @@
 #include <string.h>\r
 #include <apc/parser.tab.h>\r
 \r
+\r
 extern void lexer_pushtok(int, YYSTYPE);\r
+//extern char* scanner_current_file();\r
+extern int lexer_ismapfile(const char*, int);\r
+extern int lexer_tokfile(const char*, int);\r
+\r
 \r
 int lexer_lex(const char*);\r
 int ipow(int, int);\r
-int ttov(const char* str, int);\r
-uint64_t ttor(const char* str, int);\r
-char* ttos(const char* str, int);\r
+int ttov(const uint8_t* , int);\r
+uint64_t ttor(const uint8_t* , int);\r
+char* ttos(const uint8_t* , int);\r
 \r
 \r
 #define MAX_TOK_LEN 64\r
 #define MAX_TOKENS 16\r
 #define MAX_STR_SIZE (MAX_TOK_LEN * MAX_TOKENS)\r
-#define $($)#$\r
-#define PUSHTOK(TOK,LFUNC,UTYPE)                       \\r
-  do {                                                 \\r
-    printf("PUSHTOK(" $(TOK) $(LFUNC) $(UTYPE) ")\n"); \\r
-    tok_t = TOK;                                       \\r
-    yylval.UTYPE = LFUNC(ts, p-ts+1);                  \\r
-    lexer_pushtok(tok_t, yylval);                      \\r
-    ++ntok;                                            \\r
-  } while (0)\r
-\r
-%%{\r
-  machine token_matcher;\r
-\r
-  # set up yylval and tok_t to be pushed to stack\r
-  action set_ref  { PUSHTOK(REF, ttor, ref); }\r
-  action set_val  { PUSHTOK(NUM, ttov, val); }\r
-  action set_name { PUSHTOK(NAME, ttos, str); }\r
-  action set_ts   { ts = p; }\r
-  action lex_error {printf("input error: character %c in filename %s is invalid\n", fc, str);}\r
-\r
-  # instantiate machines for each possible token\r
-  ref = '0x'. xdigit+  %set_ref;\r
-  val = digit+  %set_val;\r
-  name = alpha+  %set_name;\r
-  tok = (ref | val | name);\r
-  segment = tok . [_\0] %set_ts;\r
-\r
-  main := segment+ ;\r
-\r
-}%%\r
-\r
-\r
-%%write data;\r
+\r
 /* Scan filename and push the its tokens\r
    onto the stack */\r
 int lexer_lex (const char* str)\r
 {\r
-  const char *p, *pe, *ts, *eof;\r
-  int  cs, tok_t, ntok = 0;\r
-  printf ("Lexing: %s\n",str);\r
-  p = ts = str;\r
-  pe = p + strlen(str) + 1;\r
-  %%write init;\r
-  %%write exec;\r
-  printf ("Lexed %i tokens\n",ntok);\r
+  int ntok, len;\r
+\r
+\r
+  len = strlen(str);\r
+  printf("Calling lexer_lex on %s\n", str);\r
+  \r
+  \r
   return ntok;\r
 }\r
 \r
@@ -78,7 +50,7 @@ int ipow(int base, int exp)
 }\r
 \r
 /*  Token to Value */\r
-int ttov(const char* str, int len)\r
+int ttov(const uint8_t* str, int len)\r
 {\r
   int i, val = 0;\r
 \r
@@ -90,7 +62,7 @@ int ttov(const char* str, int len)
   return val;\r
 }\r
 \r
-uint64_t ttor(const char* str, int len)\r
+uint64_t ttor(const uint8_t* str, int len)\r
 {\r
   int i;\r
   uint64_t num = 0;\r
@@ -103,7 +75,7 @@ uint64_t ttor(const char* str, int len)
   return num;\r
 }\r
 \r
-char* ttos(const char* str, int len)\r
+char* ttos(const uint8_t* str, int len)\r
 {\r
   int i;\r
   char token_buf[MAX_TOK_LEN];\r