Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

167 lines
2.5 KiB

4 years ago
  1. %Start RULES EPILOG COMMENT ACTION
  2. #include <stdio.h>
  3. char *PgmName=0; int ShowLit=0;
  4. int ShowProd=1; int ShowBNF=0;
  5. int ProdNum=0; int FirstProd=0;
  6. int ErrorCnt=0; int DocStyle=0;
  7. int Number=1;
  8. void
  9. main(argc, argv)
  10. int argc;
  11. char **argv;
  12. {
  13. PgmName = *argv;
  14. --argc, ++argv;
  15. while (argc && ((**argv == '-') || (**argv == '+'))) {
  16. char *cp=&argv[0][1];
  17. while (*cp) {
  18. switch (*cp) {
  19. case 'p':
  20. case 'P':
  21. ShowProd = (**argv == '-') ? 0 : 1;
  22. break;
  23. case 'l':
  24. case 'L':
  25. ShowLit = (**argv == '-') ? 0 : 1;
  26. break;
  27. case 'b':
  28. case 'B':
  29. ShowBNF = (**argv == '-') ? 0 : 1;
  30. break;
  31. case 'd':
  32. case 'D':
  33. DocStyle = (**argv == '-') ? 0 : 1;
  34. break;
  35. case 'n':
  36. case 'N':
  37. Number = (**argv == '-') ? 0 : 1;
  38. break;
  39. default:
  40. fprintf(stderr,
  41. "Usage: %s [(-|+)dplb] [filename]\n",
  42. PgmName);
  43. exit(-1);
  44. }
  45. ++cp;
  46. }
  47. --argc, ++argv;
  48. }
  49. if (argc && (freopen(*argv, "r", stdin) == NULL)) {
  50. perror(PgmName);
  51. exit(-1);
  52. }
  53. yylex();
  54. exit(ErrorCnt);
  55. }
  56. %%
  57. "\n\n""\n"* printf("\n");
  58. ^"#line".*"\n" ;
  59. ^"%token"[ \t]* printf("\%token\t ");
  60. . ECHO;
  61. ^"%%" ECHO; printf("\n"); BEGIN RULES;
  62. <RULES>"/*" BEGIN COMMENT;
  63. <RULES>^[a-z][a-z0-9_]*":" {
  64. ++ProdNum; FirstProd=1;
  65. Derivation(DocStyle, ProdNum, yytext);
  66. }
  67. <RULES>^[ \t][ \t]*[|]?[ ]?[a-zA-Z'{}].*"\n" ECHO;
  68. <RULES>^[ \t]*";".*"\n" printf("%s", yytext); break;
  69. <RULES>^[ \t][ \t]*"\n" ;
  70. <RULES>^"%%\n" ECHO; BEGIN EPILOG;
  71. <EPILOG>.|"\n" ;
  72. %%
  73. /*
  74. <COMMENT>"*.../" BEGIN RULES;
  75. <COMMENT>.|"\n" ;
  76. <EPILOG>"<<"[a-zA-Z][a-zA-Z_0-9]*">>" Production(yytext);
  77. <EPILOG>r"[^"]*\" |
  78. \"\"\" Literal(yytext);
  79. <EPILOG>"::=" |
  80. ".." |
  81. "+" |
  82. "*" |
  83. "|" |
  84. "[" |
  85. "]" BNFStuff(yytext);
  86. <EPILOG>" " ;
  87. <EPILOG>"\t" ;
  88. <EPILOG>"\n" ;
  89. <EPILOG>. Unknown(yytext);
  90. */
  91. int
  92. Derivation(int docStyle, int prodNum, char * text)
  93. {
  94. if (ShowProd) {
  95. if (docStyle) {
  96. if (Number) {
  97. printf("%3d. %s\n", prodNum, yytext); }
  98. else {
  99. printf("%s\n", yytext); } }
  100. else {
  101. printf("%-60s %s %3d. %s ", yytext, "/*", ProdNum, "*/");
  102. }
  103. }
  104. }
  105. int
  106. Production(text)
  107. char *text;
  108. {
  109. if (ShowProd) {
  110. if (FirstProd) {
  111. FirstProd = 0;
  112. printf("%s\t00\t%02d\n", text, ProdNum);
  113. } else {
  114. printf("%s\t%02d\n", text, ProdNum);
  115. }
  116. }
  117. }
  118. int
  119. Literal(text)
  120. char *text;
  121. {
  122. if (ShowLit)
  123. printf("%s\t%02d\n", text, ProdNum);
  124. }
  125. int
  126. BNFStuff(text)
  127. char *text;
  128. {
  129. if (ShowBNF)
  130. printf("%s\tBNF\n", text);
  131. }
  132. int
  133. Unknown(text)
  134. char *text;
  135. {
  136. printf("%s\t%02d -Unknown-\n", text, ProdNum);
  137. ++ErrorCnt;
  138. }