Hi there, I ran into a problem: the language to be analyzed has a speciel expression, eg:
include foo.conf which means "find and open the file foo.conf, and parse it!". Here is how I solve that: in my lexer: <INITIAL>include[ \t]+[0-9A-Za-z_\/\.\-\*\:]+ { push_sym(); handle_include((const char *)yytext); return T_INCLUDE_DIRECTIVE_WITH_PATH; } in the parser: config_include: T_INCLUDE_DIRECTIVE_WITH_PATH { free($1); } ; the push_sym(): void push_sym() { yylval.s = strdup(yytext); if (yylval.s[strlen(yytext)-1] == '\n') { yylval.s[strlen(yytext)-1] = '\0'; } } the handle_include() does a split by space, to get the filename, and call open_and_parse(char * fname); There is a speciel function which opens the input file, and runs the parser: int file_inclusion_level = 0; // a global variable to count the inclusion depth int open_and_parse(char * fname) { FILE *fp; ... YY_BUFFER_STATE bufftemp = NULL; ... if(fp = fopen(...)) { file_inclusion_level++; if (file_inclusion_level == 1) { yy_scan_string(inputbuff); } if (file_inclusion_level > 1) { bufftemp = YY_CURRENT_BUFFER; yy_scan_string(inputbuff); } yyparse(); if (file_inclusion_level > 1) { yy_delete_buffer(YY_CURRENT_BUFFER); yy_switch_to_buffer(bufftemp); } fclose(fp); file_inclusion_level--; yy_flex_destroy(); } When I run the compiled code, I got a fault: malloc_consolidate(): invalid chunk size Aborted There is a "main" config file with name test_inc_01.conf, which hase two lines: include test_inc_02.conf include test_inc_03.conf Both files have 2 lines: include test_inc_21.conf include test_inc_22.conf and include test_inc_31.conf include test_inc_32.conf All 4 files have just a simple config line with few tokens. The parser works as well when I'm just parsing the files with "relevant" content. But if I pass the test_inc_02.conf (which have 2 relevant files - see above), the malloc_consolidate() comes again. What's the correct way to handle of "include" methods? Thanks, a.