Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

50 рядки
1.3 KiB

4 роки тому
  1. %{
  2. #include <stdio.h>
  3. FILE* outfile1 = NULL;
  4. FILE* outfile2 = NULL;
  5. FILE* interface_file = NULL;
  6. %}
  7. %option noyywrap
  8. %option nounput
  9. %option noinput
  10. %x LEX_STATE_EXPORT
  11. %x LEX_STATE_EXPORT_FUNCTION
  12. %%
  13. <INITIAL,LEX_STATE_EXPORT>. fprintf(outfile1, "%s", yytext); fprintf(outfile2, "%s", yytext);
  14. <INITIAL>\n fprintf(outfile1, "%s", yytext); fprintf(outfile2, "%s", yytext);
  15. <INITIAL>"$export_split" BEGIN(LEX_STATE_EXPORT);
  16. <LEX_STATE_EXPORT>"function" fprintf(outfile1, "function"); fprintf(outfile2, "function"); fprintf(interface_file, "function"); BEGIN(LEX_STATE_EXPORT_FUNCTION);
  17. <LEX_STATE_EXPORT_FUNCTION>"{" fprintf(outfile1, "{"); fprintf(outfile2, "{"); fprintf(interface_file, "{return 0;}"); BEGIN(INITIAL);
  18. <LEX_STATE_EXPORT_FUNCTION>(.|\n) fprintf(outfile1, "%s", yytext); fprintf(outfile2, "%s", yytext); fprintf(interface_file, "%s", yytext);
  19. <LEX_STATE_EXPORT>\n fprintf(outfile1, "\n"); fprintf(outfile2, "\n"); fprintf(interface_file, "\n"); BEGIN(INITIAL);
  20. %%
  21. int main(int argn, char** argv)
  22. {
  23. if(argn < 4)
  24. {
  25. printf("Give output file as argument.\n");
  26. return 1;
  27. }
  28. outfile1 = fopen(argv[1], "w");
  29. outfile2 = fopen(argv[2], "w");
  30. interface_file = fopen(argv[3], "w");
  31. yylex();
  32. fclose(outfile1);
  33. fclose(outfile2);
  34. fclose(interface_file);
  35. return 0;
  36. }