X-Git-Url: https://www.kengrimes.com/gitweb/?p=henge%2Fwebcc.git;a=blobdiff_plain;f=src%2Fapc%2Flexer.c;h=4d3ab0a32ee4dee025e5851c4f859ecd387de456;hp=67aeb235b9f56a27763d41996d4d5a28bf037fbb;hb=dc6e33a26d6488e388817d4dd255dcdff22b4a2a;hpb=a4acd734f2064a6876849652e7f896ecade6497a diff --git a/src/apc/lexer.c b/src/apc/lexer.c index 67aeb23..4d3ab0a 100644 --- a/src/apc/lexer.c +++ b/src/apc/lexer.c @@ -30,8 +30,9 @@ /* Public */ int lexer_init(void); int lexer(void); -int lexer_lex(const char*); -void lexer_pushtok(int, int); +void lexer_pushtok(int, YYSTYPE); +extern //ragel +int lexer_lex(const char*); struct dirent* lexer_direntpa[DE_STACKSIZE]; /* Private */ extern //scanner.c @@ -44,13 +45,14 @@ extern //bison YYSTYPE yylval; static struct tok -{ int lval; - int tok; +{ union YYSTYPE val; //token val + int tt; //token type } token_stack[TK_STACKSIZE]; static union tokp -{ int* i; - struct tok* t; +{ int* tpt; //token pointer type + struct tok* tok; + union YYSTYPE* tvp; //token value pointer } tks, tkx; static struct dirent** dps; @@ -76,14 +78,16 @@ struct dirent** dps; times in a sequence! */ #define TK_STACK (token_stack) -#define TK_STACKP (tks.t) -#define TK_STACKPI (tks.i) -#define TK_STACKX (tkx.t) -#define TK_STACKXI (tkx.i) +#define TK_STACKP (tks.tok) +#define TK_STACKPI (tks.tpt) +#define TK_STACKPL (tks.tvp) +#define TK_STACKX (tkx.tok) +#define TK_STACKXI (tkx.tpt) #define TK_LEN() (TK_STACKP - TK_STACKX) #define TK_INIT() (TK_STACKP = TK_STACKX = TK_STACK) #define TK_POP() (*TK_STACKP++) #define TK_POPI() (*TK_STACKPI++); +#define TK_POPL() (*TK_STACKPL++); #define TK_PUSH(T,L) (*TK_STACKX++ = (struct tok){L,T}) /* Initializer @@ -114,20 +118,10 @@ int lexer return 0; } } - yylval.val = TK_POPI(); + yylval = TK_POPL(); return TK_POPI(); } -/* Lexical Analysis - Ragel state machine for tokenizing text. -*/ -int lexer_lex -(const char* str) -{ lexer_pushtok(1, 2); - printf (str); - return 1; -} - /* Token Receiver This receiver takes a struct tok and pushes it to the FIFO stack. @@ -135,7 +129,7 @@ int lexer_lex void lexer_pushtok #define S(S)#S //stringifier #define ERR_TK "Fatal: Generated over " S(TK_STACKSIZE) " tokens in one pass." -( int tok, int lval ) +( int tok, YYSTYPE lval ) { if (TK_LEN() >= TK_STACKSIZE) { fprintf(stderr, ERR_TK); exit(EXIT_FAILURE);