#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
}\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
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
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