|
|
- %{
-
- #include <stdio.h>
-
- #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
-
- %%
-
- <INITIAL>. p(code_common);
- <INITIAL>\n p(code_common);
-
- <INITIAL>"$export_common " BEGIN(LEX_STATE_EXPORT_COMMON);
- <INITIAL>"$$export_split " BEGIN(LEX_STATE_EXPORT_SPLIT);
-
- <LEX_STATE_EXPORT_COMMON>. p(code_common); p(interface_common);
- <LEX_STATE_EXPORT_COMMON>\n p(code_common); p(interface_common); BEGIN(INITIAL);
-
- <LEX_STATE_EXPORT_SPLIT>"function" p(code_g); p(code_w); p(interface_g); p(interface_w); BEGIN(LEX_STATE_EXPORT_SPLIT_FUNCTION);
- <LEX_STATE_EXPORT_SPLIT>"@" ps(code_g,"g"); ps(code_w,"w"); ps(interface_g,"g"); ps(interface_w,"w");
- <LEX_STATE_EXPORT_SPLIT>"$$" BEGIN(INITIAL);
- <LEX_STATE_EXPORT_SPLIT>. p(code_g); p(code_w); p(interface_g); p(interface_w);
-
- <LEX_STATE_EXPORT_SPLIT_FUNCTION>"{" p(code_g); p(code_w); ps(interface_g, "{return 0;}"); ps(interface_w, "{return 0;}"); BEGIN(LEX_STATE_EXPORT_SPLIT_FUNCTION_BODY);
- <LEX_STATE_EXPORT_SPLIT_FUNCTION>"@" ps(code_g,"g"); ps(code_w,"w"); ps(interface_g,"g"); ps(interface_w,"w");
- <LEX_STATE_EXPORT_SPLIT_FUNCTION>(.|\n) p(code_g); p(code_w); p(interface_g); p(interface_w);
- <LEX_STATE_EXPORT_SPLIT_FUNCTION_BODY>"@" ps(code_g,"g"); ps(code_w,"w");
- <LEX_STATE_EXPORT_SPLIT_FUNCTION_BODY>"$$" BEGIN(INITIAL);
- <LEX_STATE_EXPORT_SPLIT_FUNCTION_BODY>. p(code_g); p(code_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;
- }
|