skeleton.c 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. #include "defs.h"
  2. /* The banner used here should be replaced with an #ident directive */
  3. /* if the target C compiler supports #ident directives. */
  4. /* */
  5. /* If the skeleton is changed, the banner should be changed so that */
  6. /* the altered version can easily be distinguished from the original. */
  7. char *banner[] =
  8. {
  9. "#ifndef lint",
  10. "static char yysccsid[] = \"@(#)yaccpar 1.8 (Berkeley) 01/20/90\";",
  11. "#endif",
  12. "#define YYBYACC 1",
  13. 0
  14. };
  15. char *tables[] =
  16. {
  17. "extern short yylhs[];",
  18. "extern short yylen[];",
  19. "extern short yydefred[];",
  20. "extern short yydgoto[];",
  21. "extern short yysindex[];",
  22. "extern short yyrindex[];",
  23. "extern short yygindex[];",
  24. "extern short yytable[];",
  25. "extern short yycheck[];",
  26. "#if YYDEBUG",
  27. "extern char *yyname[];",
  28. "extern char *yyrule[];",
  29. "#endif",
  30. 0
  31. };
  32. char *header[] =
  33. {
  34. "#define yyclearin (yychar=(-1))",
  35. "#define yyerrok (yyerrflag=0)",
  36. "#ifdef YYSTACKSIZE",
  37. "#ifndef YYMAXDEPTH",
  38. "#define YYMAXDEPTH YYSTACKSIZE",
  39. "#endif",
  40. "#else",
  41. "#ifdef YYMAXDEPTH",
  42. "#define YYSTACKSIZE YYMAXDEPTH",
  43. "#else",
  44. "#define YYSTACKSIZE 200", /* ACK mod: Changed from 600 to 200 */
  45. "#define YYMAXDEPTH 200", /* ACK mod: Changed from 600 to 200 */
  46. "#endif",
  47. "#endif",
  48. "#if YYDEBUG",
  49. "int yydebug;",
  50. "#endif",
  51. "int yynerrs;",
  52. "int yyerrflag;",
  53. "int yychar;",
  54. "YYSTYPE yyval;",
  55. "YYSTYPE yylval;",
  56. "short yyss[YYSTACKSIZE];",
  57. "YYSTYPE yyvs[YYSTACKSIZE];",
  58. "#define yystacksize YYSTACKSIZE",
  59. 0
  60. };
  61. char *body[] =
  62. {
  63. "#define YYABORT goto yyabort",
  64. "#define YYACCEPT goto yyaccept",
  65. "#define YYERROR goto yyerrlab",
  66. "int",
  67. "yyparse()",
  68. "{",
  69. " register int yym, yyn, yystate;",
  70. " register short *yyssp;", /* ACK mod: made this a local */
  71. " register YYSTYPE *yyvsp;", /* ACK mod: made this a local */
  72. "#if YYDEBUG",
  73. " register char *yys;",
  74. " extern char *getenv();",
  75. "",
  76. " if (yys = getenv(\"YYDEBUG\"))",
  77. " {",
  78. " yyn = *yys;",
  79. " if (yyn >= '0' && yyn <= '9')",
  80. " yydebug = yyn - '0';",
  81. " }",
  82. "#endif",
  83. "",
  84. " yynerrs = 0;",
  85. " yyerrflag = 0;",
  86. " yychar = (-1);",
  87. "",
  88. " yyssp = yyss;",
  89. " yyvsp = yyvs;",
  90. " *yyssp = yystate = 0;",
  91. "",
  92. "yyloop:",
  93. " if (yyn = yydefred[yystate]) goto yyreduce;",
  94. " if (yychar < 0)",
  95. " {",
  96. " if ((yychar = yylex()) < 0) yychar = 0;",
  97. "#if YYDEBUG",
  98. " if (yydebug)",
  99. " {",
  100. " yys = 0;",
  101. " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
  102. " if (!yys) yys = \"illegal-symbol\";",
  103. " printf(\"yydebug: state %d, reading %d (%s)\\n\", yystate,",
  104. " yychar, yys);",
  105. " }",
  106. "#endif",
  107. " }",
  108. " if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&",
  109. " yyn <= YYTABLESIZE && yycheck[yyn] == yychar)",
  110. " {",
  111. "#if YYDEBUG",
  112. " if (yydebug)",
  113. " printf(\"yydebug: state %d, shifting to state %d\\n\",",
  114. " yystate, yytable[yyn]);",
  115. "#endif",
  116. " if (yyssp >= yyss + yystacksize - 1)",
  117. " {",
  118. " goto yyoverflow;",
  119. " }",
  120. " *++yyssp = yystate = yytable[yyn];",
  121. " *++yyvsp = yylval;",
  122. " yychar = (-1);",
  123. " if (yyerrflag > 0) --yyerrflag;",
  124. " goto yyloop;",
  125. " }",
  126. " if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&",
  127. " yyn <= YYTABLESIZE && yycheck[yyn] == yychar)",
  128. " {",
  129. " yyn = yytable[yyn];",
  130. " goto yyreduce;",
  131. " }",
  132. " if (yyerrflag) goto yyinrecovery;",
  133. "#ifdef lint",
  134. " goto yynewerror;",
  135. "#endif",
  136. "yynewerror:",
  137. " yyerror(\"syntax error\");",
  138. "#ifdef lint",
  139. " goto yyerrlab;",
  140. "#endif",
  141. "yyerrlab:",
  142. " ++yynerrs;",
  143. "yyinrecovery:",
  144. " if (yyerrflag < 3)",
  145. " {",
  146. " yyerrflag = 3;",
  147. " for (;;)",
  148. " {",
  149. " if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&",
  150. " yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)",
  151. " {",
  152. "#if YYDEBUG",
  153. " if (yydebug)",
  154. " printf(\"yydebug: state %d, error recovery shifting\\",
  155. " to state %d\\n\", *yyssp, yytable[yyn]);",
  156. "#endif",
  157. " if (yyssp >= yyss + yystacksize - 1)",
  158. " {",
  159. " goto yyoverflow;",
  160. " }",
  161. " *++yyssp = yystate = yytable[yyn];",
  162. " *++yyvsp = yylval;",
  163. " goto yyloop;",
  164. " }",
  165. " else",
  166. " {",
  167. "#if YYDEBUG",
  168. " if (yydebug)",
  169. " printf(\"yydebug: error recovery discarding state %d\
  170. \\n\",",
  171. " *yyssp);",
  172. "#endif",
  173. " if (yyssp <= yyss) goto yyabort;",
  174. " --yyssp;",
  175. " --yyvsp;",
  176. " }",
  177. " }",
  178. " }",
  179. " else",
  180. " {",
  181. " if (yychar == 0) goto yyabort;",
  182. "#if YYDEBUG",
  183. " if (yydebug)",
  184. " {",
  185. " yys = 0;",
  186. " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
  187. " if (!yys) yys = \"illegal-symbol\";",
  188. " printf(\"yydebug: state %d, error recovery discards token %d\
  189. (%s)\\n\",",
  190. " yystate, yychar, yys);",
  191. " }",
  192. "#endif",
  193. " yychar = (-1);",
  194. " goto yyloop;",
  195. " }",
  196. "yyreduce:",
  197. "#if YYDEBUG",
  198. " if (yydebug)",
  199. " printf(\"yydebug: state %d, reducing by rule %d (%s)\\n\",",
  200. " yystate, yyn, yyrule[yyn]);",
  201. "#endif",
  202. " yym = yylen[yyn];",
  203. " yyval = yyvsp[1-yym];",
  204. " switch (yyn)",
  205. " {",
  206. 0
  207. };
  208. char *trailer[] =
  209. {
  210. " }",
  211. " yyssp -= yym;",
  212. " yystate = *yyssp;",
  213. " yyvsp -= yym;",
  214. " yym = yylhs[yyn];",
  215. " if (yystate == 0 && yym == 0)",
  216. " {",
  217. "#if YYDEBUG",
  218. " if (yydebug)",
  219. " printf(\"yydebug: after reduction, shifting from state 0 to\\",
  220. " state %d\\n\", YYFINAL);",
  221. "#endif",
  222. " yystate = YYFINAL;",
  223. " *++yyssp = YYFINAL;",
  224. " *++yyvsp = yyval;",
  225. " if (yychar < 0)",
  226. " {",
  227. " if ((yychar = yylex()) < 0) yychar = 0;",
  228. "#if YYDEBUG",
  229. " if (yydebug)",
  230. " {",
  231. " yys = 0;",
  232. " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
  233. " if (!yys) yys = \"illegal-symbol\";",
  234. " printf(\"yydebug: state %d, reading %d (%s)\\n\",",
  235. " YYFINAL, yychar, yys);",
  236. " }",
  237. "#endif",
  238. " }",
  239. " if (yychar == 0) goto yyaccept;",
  240. " goto yyloop;",
  241. " }",
  242. " if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&",
  243. " yyn <= YYTABLESIZE && yycheck[yyn] == yystate)",
  244. " yystate = yytable[yyn];",
  245. " else",
  246. " yystate = yydgoto[yym];",
  247. "#if YYDEBUG",
  248. " if (yydebug)",
  249. " printf(\"yydebug: after reduction, shifting from state %d \\",
  250. "to state %d\\n\", *yyssp, yystate);",
  251. "#endif",
  252. " if (yyssp >= yyss + yystacksize - 1)",
  253. " {",
  254. " goto yyoverflow;",
  255. " }",
  256. " *++yyssp = yystate;",
  257. " *++yyvsp = yyval;",
  258. " goto yyloop;",
  259. "yyoverflow:",
  260. " yyerror(\"yacc stack overflow\");",
  261. "yyabort:",
  262. " return (1);",
  263. "yyaccept:",
  264. " return (0);",
  265. "}",
  266. 0
  267. };
  268. write_section(section)
  269. char *section[];
  270. {
  271. register int i;
  272. register FILE *fp;
  273. fp = code_file;
  274. for (i = 0; section[i]; ++i)
  275. {
  276. ++outline;
  277. fprintf(fp, "%s\n", section[i]);
  278. }
  279. }