1 /* Ragel State Machine for tokenizing text */
4 #include <apc/parser.tab.h>
7 extern void lexer_pushtok(int, YYSTYPE);
8 //extern char* scanner_current_file();
9 extern int lexer_ismapfile(const char*, int);
10 extern int lexer_tokfile(const char*, int);
13 int lexer_lex(const char*);
15 int ttov(const uint8_t* , int);
16 uint64_t ttor(const uint8_t* , int);
17 char* ttos(const uint8_t* , int);
20 #define MAX_TOK_LEN 64
22 #define MAX_STR_SIZE (MAX_TOK_LEN * MAX_TOKENS)
24 /* Scan filename and push the its tokens
26 int lexer_lex (const char* str)
32 printf("Calling lexer_lex on %s\n", str);
38 int ipow(int base, int exp)
44 result = result * base;
53 int ttov(const uint8_t* str, int len)
57 for (i = 0; i < len; i++)
59 val += ((str[len - (i + 1)] - '0') * ipow(10,i));
65 uint64_t ttor(const uint8_t* str, int len)
70 for (i = 0; i < len; i++)
72 num += ((str[len - (i + 1)] - '0') * ipow(10,i));
78 char* ttos(const uint8_t* str, int len)
81 char token_buf[MAX_TOK_LEN];
83 memmove(token_buf, str, len);
84 token_buf[len+1] = '\0';
86 return strdup(token_buf);