%{ #include #define p(f) (fprintf(f, "%s", yytext)); #define ps(f, s) (fprintf(f, s)); FILE* code_common = NULL; FILE* code_g = NULL; FILE* code_w = NULL; FILE* interface_common = NULL; FILE* interface_w = NULL; FILE* interface_g = NULL; %} %option noyywrap %x LEX_STATE_EXPORT_COMMON %x LEX_STATE_EXPORT_SPLIT %x LEX_STATE_EXPORT_SPLIT_FUNCTION %x LEX_STATE_EXPORT_SPLIT_FUNCTION_BODY %x LEX_STATE_EXPORT_OPTION %x LEX_STATE_EXPORT_OPTION_2 %% . p(code_common); \n p(code_common); "$export_common " BEGIN(LEX_STATE_EXPORT_COMMON); "$$export_split " BEGIN(LEX_STATE_EXPORT_SPLIT); "$$export_split" BEGIN(LEX_STATE_EXPORT_SPLIT); "$export_option " printf("Exporting an option.\n"); BEGIN(LEX_STATE_EXPORT_OPTION); . p(code_common); p(interface_common); \n p(code_common); p(interface_common); BEGIN(INITIAL); "function" p(code_g); p(code_w); p(interface_g); p(interface_w); BEGIN(LEX_STATE_EXPORT_SPLIT_FUNCTION); "@" ps(code_g,"g"); ps(code_w,"w"); ps(interface_g,"g"); ps(interface_w,"w"); "$$" BEGIN(INITIAL); (.|\n) p(code_g); p(code_w); p(interface_g); p(interface_w); "{" p(code_g); p(code_w); ps(interface_g, "{return 0;}\n"); ps(interface_w, "{return 0;}\n"); BEGIN(LEX_STATE_EXPORT_SPLIT_FUNCTION_BODY); "@" ps(code_g,"g"); ps(code_w,"w"); ps(interface_g,"g"); ps(interface_w,"w"); (.|\n) p(code_g); p(code_w); p(interface_g); p(interface_w); "@" ps(code_g,"g"); ps(code_w,"w"); "$$" BEGIN(INITIAL); (.|\n) p(code_g); p(code_w); "$" BEGIN(LEX_STATE_EXPORT_OPTION_2); (.|\n) p(code_g); p(interface_g); "$" BEGIN(INITIAL); (.|\n) p(code_w); p(interface_w); %% int main(int argn, char** argv) { if(argn < 7) { printf("Give output file as argument.\n"); return 1; } code_common = fopen(argv[1], "w"); code_g = fopen(argv[2], "w"); code_w = fopen(argv[3], "w"); interface_common = fopen(argv[4], "w"); interface_g = fopen(argv[5], "w"); interface_w = fopen(argv[6], "w"); yylex(); fclose(code_common); fclose(code_g); fclose(code_w); fclose(interface_common); fclose(interface_g); fclose(interface_w); return 0; }