X-Git-Url: https://www.kengrimes.com/gitweb/?p=henge%2Fwebcc.git;a=blobdiff_plain;f=src%2Fapc%2Flexer_lex.rl;h=a84575efa67b6dbaf5d09a8c9472f08b57b92b42;hp=edb9a6abe880cebd351ccbf92f27f529211e5577;hb=0f505368fa8abbc2e9ab0296b9a5e6bd4869345f;hpb=df52756177b6e4fd9465cbb1b17a35eb48bb67c9 diff --git a/src/apc/lexer_lex.rl b/src/apc/lexer_lex.rl index edb9a6a..a84575e 100755 --- a/src/apc/lexer_lex.rl +++ b/src/apc/lexer_lex.rl @@ -3,63 +3,35 @@ #include #include + extern void lexer_pushtok(int, YYSTYPE); +//extern char* scanner_current_file(); +extern int lexer_ismapfile(const char*, int); +extern int lexer_tokfile(const char*, int); + int lexer_lex(const char*); int ipow(int, int); -int ttov(const char* str, int); -uint64_t ttor(const char* str, int); -char* ttos(const char* str, int); +int ttov(const uint8_t* , int); +uint64_t ttor(const uint8_t* , int); +char* ttos(const uint8_t* , int); #define MAX_TOK_LEN 64 #define MAX_TOKENS 16 #define MAX_STR_SIZE (MAX_TOK_LEN * MAX_TOKENS) -#define $($)#$ -#define PUSHTOK(TOK,LFUNC,UTYPE) \ - do { \ - printf("PUSHTOK(" $(TOK) $(LFUNC) $(UTYPE) ")\n"); \ - tok_t = TOK; \ - yylval.UTYPE = LFUNC(ts, p-ts+1); \ - lexer_pushtok(tok_t, yylval); \ - ++ntok; \ - } while (0) - -%%{ - machine token_matcher; - - # set up yylval and tok_t to be pushed to stack - action set_ref { PUSHTOK(REF, ttor, ref); } - action set_val { PUSHTOK(NUM, ttov, val); } - action set_name { PUSHTOK(NAME, ttos, str); } - action set_ts { ts = p; } - action lex_error {printf("input error: character %c in filename %s is invalid\n", fc, str);} - - # instantiate machines for each possible token - ref = '0x'. xdigit+ %set_ref; - val = digit+ %set_val; - name = alpha+ %set_name; - tok = (ref | val | name); - segment = tok . [_\0] %set_ts; - - main := segment+ ; - -}%% - - -%%write data; + /* 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, ntok = 0; - printf ("Lexing: %s\n",str); - p = ts = str; - pe = p + strlen(str) + 1; - %%write init; - %%write exec; - printf ("Lexed %i tokens\n",ntok); + int ntok, len; + + + len = strlen(str); + printf("Calling lexer_lex on %s\n", str); + + return ntok; } @@ -78,7 +50,7 @@ int ipow(int base, int exp) } /* Token to Value */ -int ttov(const char* str, int len) +int ttov(const uint8_t* str, int len) { int i, val = 0; @@ -90,7 +62,7 @@ int ttov(const char* str, int len) return val; } -uint64_t ttor(const char* str, int len) +uint64_t ttor(const uint8_t* str, int len) { int i; uint64_t num = 0; @@ -103,7 +75,7 @@ uint64_t ttor(const char* str, int len) return num; } -char* ttos(const char* str, int len) +char* ttos(const uint8_t* str, int len) { int i; char token_buf[MAX_TOK_LEN];