X-Git-Url: https://www.kengrimes.com/gitweb/?p=henge%2Fwebcc.git;a=blobdiff_plain;f=src%2Fapc%2Flexer.c;fp=src%2Fapc%2Flexer.c;h=30566df19476f958eabf808c6a8b101385a5581f;hp=6ef1b4c5ac85600365e3fa56fc70f049c9f5de26;hb=4da3506e5cf1a3eee35b60722b9c801867ef3f36;hpb=49cbc773cce9b257df4581b8fd99c3639f10f52a diff --git a/src/apc/lexer.c b/src/apc/lexer.c index 6ef1b4c..30566df 100644 --- a/src/apc/lexer.c +++ b/src/apc/lexer.c @@ -30,6 +30,7 @@ /* Public */ int lexer_init(void); int lexer(void); +int lexer_lexfile(const char*); void lexer_pushtok(int, YYSTYPE); extern //lexer_lex.rl int lexer_lex(const char*); @@ -117,7 +118,7 @@ int lexer () {start: while (DE_LEN() > 0) //lex any directory entries in our stack - if (lexer_lex(DE_POP()->d_name) == 0) //fail if it generates no tokens + if (lexer_lexfile(DE_POP()->d_name) == 0) FAIL("Lexer failed to tokenize [%s]\n",(*DE_STACKP)->d_name); if (TK_EMPTY) //if there are no tokens, { TK_INIT(); //initialize the token stack back to 0 @@ -152,3 +153,31 @@ void lexer_pushtok TK_PUSH(tok, lval); printf("Pushed Token %i | %i\n", TK_STACK[TK_LEN() - 1].tok_t, TK_STACK[TK_LEN() - 1].lval.val); } + +/* Lexical analysis of a file + Strips a filename to its base name, then sends it to lexer_lex +*/ +int lexer_lexfile +#define MAX_FNAME 2048 +#define HIDDEN_WARNING "%s is hidden and will not be parsed!\n", filename +( const char *filename +) +{ static char fname[MAX_FNAME]; + char *last_period = NULL, *iter; + + if (*filename == '.') + { fprintf (stderr, HIDDEN_WARNING); + return 0; + } + strncpy(fname,filename,MAX_FNAME); + last_period = NULL; + for (iter = fname; *iter; iter++) + if (*iter == '.') + { if (iter == fname) + last_period = iter; + } + if (last_period) + *last_period = '\0'; + + return lexer_lex(fname); +}