1 /* Output the generated parsing program for bison,
2 Copyright (C) 1984, 1986, 1989, 1992, 2000 Free Software Foundation, Inc.
4 This file is part of Bison, the GNU Compiler Compiler.
6 Bison is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
11 Bison is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with Bison; see the file COPYING. If not, write to the Free
18 Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
22 /* functions to output parsing data to various files. Entries are:
26 Output constant strings to the beginning of certain files.
30 Output constant strings to the ends of certain files.
34 Output the parsing tables and the parser code to ftable.
36 The parser tables consist of these tables.
37 Starred ones needed only for the semantic parser.
38 Double starred are output only if switches are set.
40 yytranslate = vector mapping yylex's token numbers into bison's token numbers.
42 ** yytname = vector of string-names indexed by bison token number
44 ** yytoknum = vector of yylex token numbers corresponding to entries in yytname
46 yyrline = vector of line-numbers of all rules. For yydebug printouts.
48 yyrhs = vector of items of all rules.
49 This is exactly what ritems contains. For yydebug and for semantic
52 yyprhs[r] = index in yyrhs of first item for rule r.
54 yyr1[r] = symbol number of symbol that rule r derives.
56 yyr2[r] = number of symbols composing right hand side of rule r.
58 * yystos[s] = the symbol number of the symbol that leads to state s.
60 yydefact[s] = default rule to reduce with in state s,
61 when yytable doesn't specify something else to do.
62 Zero means the default is an error.
64 yydefgoto[i] = default state to go to after a reduction of a rule that
65 generates variable ntokens + i, except when yytable
66 specifies something else to do.
68 yypact[s] = index in yytable of the portion describing state s.
69 The lookahead token's type is used to index that portion
70 to find out what to do.
72 If the value in yytable is positive,
73 we shift the token and go to that state.
75 If the value is negative, it is minus a rule number to reduce by.
77 If the value is zero, the default action from yydefact[s] is used.
79 yypgoto[i] = the index in yytable of the portion describing
80 what to do after reducing a rule that derives variable i + ntokens.
81 This portion is indexed by the parser state number, s,
82 as of before the text for this nonterminal was read.
83 The value from yytable is the state to go to if
84 the corresponding value in yycheck is s.
86 yytable = a vector filled with portions for different uses,
87 found via yypact and yypgoto.
89 yycheck = a vector indexed in parallel with yytable.
90 It indicates, in a roundabout way, the bounds of the
91 portion you are trying to examine.
93 Suppose that the portion of yytable starts at index p
94 and the index to be examined within the portion is i.
95 Then if yycheck[p+i] != i, i is outside the bounds
96 of what is actually allocated, and the default
97 (from yydefact or yydefgoto) should be used.
98 Otherwise, yytable[p+i] should be used.
100 YYFINAL = the state number of the termination state.
101 YYFLAG = most negative short int. Used to flag ??
115 extern int debugflag
;
116 extern int nolinesflag
;
117 extern int noparserflag
;
118 extern int toknumflag
;
121 extern int *user_toknums
;
122 extern int tokensetsize
;
123 extern int final_state
;
124 extern core
**state_table
;
125 extern shifts
**shift_table
;
126 extern errs
**err_table
;
127 extern reductions
**reduction_table
;
128 extern short *accessing_symbol
;
130 extern short *LAruleno
;
131 extern short *lookaheads
;
132 extern char *consistent
;
133 extern short *goto_map
;
134 extern short *from_state
;
135 extern short *to_state
;
138 void output_headers
PARAMS((void));
139 void output_trailers
PARAMS((void));
140 void output
PARAMS((void));
141 void output_token_translations
PARAMS((void));
142 void output_gram
PARAMS((void));
143 void output_stos
PARAMS((void));
144 void output_rule_data
PARAMS((void));
145 void output_defines
PARAMS((void));
146 void output_actions
PARAMS((void));
147 void token_actions
PARAMS((void));
148 void save_row
PARAMS((int));
149 void goto_actions
PARAMS((void));
150 void save_column
PARAMS((int, int));
151 void sort_actions
PARAMS((void));
152 void pack_table
PARAMS((void));
153 void output_base
PARAMS((void));
154 void output_table
PARAMS((void));
155 void output_check
PARAMS((void));
156 void output_parser
PARAMS((void));
157 void output_program
PARAMS((void));
158 void free_shifts
PARAMS((void));
159 void free_reductions
PARAMS((void));
160 void free_itemsets
PARAMS((void));
161 int action_row
PARAMS((int));
162 int default_goto
PARAMS((int));
163 int matching_state
PARAMS((int));
164 int pack_vector
PARAMS((int));
166 extern void berror
PARAMS((char *));
167 extern void fatals
PARAMS((char *, char *));
168 extern char *int_to_string
PARAMS((int));
169 extern void reader_output_yylsp
PARAMS((FILE *));
173 static short **froms
;
177 static short *actrow
;
178 static short *state_count
;
189 #define GUARDSTR "\n#include \"%s\"\nextern int yyerror;\n\
190 extern int yycost;\nextern char * yymsg;\nextern YYSTYPE yyval;\n\n\
191 yyguard(n, yyvsp, yylsp)\nregister int n;\nregister YYSTYPE *yyvsp;\n\
192 register YYLTYPE *yylsp;\n\
193 {\n yyerror = 0;\nyycost = 0;\n yymsg = 0;\nswitch (n)\n {"
195 #define ACTSTR "\n#include \"%s\"\nextern YYSTYPE yyval;\
196 \nextern int yychar;\
197 yyaction(n, yyvsp, yylsp)\nregister int n;\nregister YYSTYPE *yyvsp;\n\
198 register YYLTYPE *yylsp;\n{\n switch (n)\n{"
200 #define ACTSTR_SIMPLE "\n switch (yyn) {\n"
204 output_headers (void)
207 fprintf(fguard
, GUARDSTR
, attrsfile
);
212 fprintf(faction
, (semantic_parser
? ACTSTR
: ACTSTR_SIMPLE
), attrsfile
);
213 /* if (semantic_parser) JF moved this below
214 fprintf(ftable, "#include \"%s\"\n", attrsfile);
215 fprintf(ftable, "#include <stdio.h>\n\n");
218 /* Rename certain symbols if -p was specified. */
219 if (spec_name_prefix
)
221 fprintf(ftable
, "#define yyparse %sparse\n", spec_name_prefix
);
222 fprintf(ftable
, "#define yylex %slex\n", spec_name_prefix
);
223 fprintf(ftable
, "#define yyerror %serror\n", spec_name_prefix
);
224 fprintf(ftable
, "#define yylval %slval\n", spec_name_prefix
);
225 fprintf(ftable
, "#define yychar %schar\n", spec_name_prefix
);
226 fprintf(ftable
, "#define yydebug %sdebug\n", spec_name_prefix
);
227 fprintf(ftable
, "#define yynerrs %snerrs\n", spec_name_prefix
);
233 output_trailers (void)
236 fprintf(fguard
, "\n }\n}\n");
238 fprintf(faction
, "\n");
244 fprintf(faction
, " }\n");
245 fprintf(faction
, "}\n");
254 /* output_token_defines(ftable); / * JF put out token defines FIRST */
255 if (!semantic_parser
) /* JF Put out other stuff */
258 while ((c
=getc(fattrs
))!=EOF
)
261 reader_output_yylsp(ftable
);
263 fprintf(ftable
, "#ifndef YYDEBUG\n#define YYDEBUG %d\n#endif\n\n",
267 fprintf(ftable
, "#include \"%s\"\n", attrsfile
);
270 fprintf(ftable
, "#include <stdio.h>\n\n");
272 /* Make "const" do nothing if not in ANSI C. */
273 fprintf (ftable
, "#ifndef __cplusplus\n#ifndef __STDC__\n#define const\n#endif\n#endif\n\n");
277 output_token_translations();
278 /* if (semantic_parser) */
279 /* This is now unconditional because debugging printouts can use it. */
293 output_token_translations (void)
296 /* register short *sp; JF unused */
301 "\n#define YYTRANSLATE(x) ((unsigned)(x) <= %d ? yytranslate[x] : %d)\n",
302 max_user_token_number
, nsyms
);
304 if (ntokens
< 127) /* play it very safe; check maximum element value. */
305 fprintf(ftable
, "\nstatic const char yytranslate[] = { 0");
307 fprintf(ftable
, "\nstatic const short yytranslate[] = { 0");
310 for (i
= 1; i
<= max_user_token_number
; i
++)
324 fprintf(ftable
, "%6d", token_translations
[i
]);
327 fprintf(ftable
, "\n};\n");
331 fprintf(ftable
, "\n#define YYTRANSLATE(x) (x)\n");
343 /* With the ordinary parser,
344 yyprhs and yyrhs are needed only for yydebug. */
345 /* With the noparser option, all tables are generated */
346 if (! semantic_parser
&& ! noparserflag
)
347 fprintf(ftable
, "\n#if YYDEBUG != 0");
349 fprintf(ftable
, "\nstatic const short yyprhs[] = { 0");
352 for (i
= 1; i
<= nrules
; i
++)
366 fprintf(ftable
, "%6d", rrhs
[i
]);
369 fprintf(ftable
, "\n};\n");
371 fprintf(ftable
, "\nstatic const short yyrhs[] = {%6d", ritem
[0]);
374 for (sp
= ritem
+ 1; *sp
; sp
++)
389 fprintf(ftable
, "%6d", *sp
);
391 fprintf(ftable
, " 0");
394 fprintf(ftable
, "\n};\n");
396 if (! semantic_parser
&& ! noparserflag
)
397 fprintf(ftable
, "\n#endif\n");
407 fprintf(ftable
, "\nstatic const short yystos[] = { 0");
410 for (i
= 1; i
< nstates
; i
++)
424 fprintf(ftable
, "%6d", accessing_symbol
[i
]);
427 fprintf(ftable
, "\n};\n");
432 output_rule_data (void)
439 /* YYRLINE[yyn]: source line where rule number YYN was defined. */\n\
440 static const short yyrline[] = { 0", ftable
);
443 for (i
= 1; i
<= nrules
; i
++)
457 fprintf(ftable
, "%6d", rline
[i
]);
459 fprintf(ftable
, "\n};\n#endif\n\n");
461 if (toknumflag
|| noparserflag
)
463 fprintf(ftable
, "#define YYNTOKENS %d\n", ntokens
);
464 fprintf(ftable
, "#define YYNNTS %d\n", nvars
);
465 fprintf(ftable
, "#define YYNRULES %d\n", nrules
);
466 fprintf(ftable
, "#define YYNSTATES %d\n", nstates
);
467 fprintf(ftable
, "#define YYMAXUTOK %d\n\n", max_user_token_number
);
470 if (! toknumflag
&& ! noparserflag
)
471 fprintf(ftable
, "\n#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)\n\n");
473 /* Output the table of symbol names. */
476 "static const char * const yytname[] = { \"%s\"",
479 j
= strlen (tags
[0]) + 44;
480 for (i
= 1; i
< nsyms
; i
++)
481 /* this used to be i<=nsyms, but that output a final "" symbol
482 almost by accident */
497 for (p
= tags
[i
]; p
&& *p
; p
++)
499 if (*p
== '"' || *p
== '\\')
501 fprintf(ftable
, "\\%c", *p
);
506 fprintf(ftable
, "\\n");
511 fprintf(ftable
, "\\t");
516 fprintf(ftable
, "\\b");
519 else if (*p
< 040 || *p
>= 0177)
521 fprintf(ftable
, "\\%03o", *p
);
534 /* add a NULL entry to list of tokens */
535 fprintf (ftable
, ", NULL\n};\n");
537 if (! toknumflag
&& ! noparserflag
)
538 fprintf (ftable
, "#endif\n\n");
540 /* Output YYTOKNUM. */
543 fprintf(ftable
, "static const short yytoknum[] = { 0");
545 for (i
= 1; i
<= ntokens
; i
++) {
554 fprintf(ftable
, "%6d", user_toknums
[i
]);
556 fprintf(ftable
, "\n};\n\n");
561 /* YYR1[YYN]: Symbol number of symbol that rule YYN derives. */\n\
562 static const short yyr1[] = { 0", ftable
);
565 for (i
= 1; i
<= nrules
; i
++)
579 fprintf(ftable
, "%6d", rlhs
[i
]);
588 /* YYR2[YYN]: Number of symbols composing right hand side of rule YYN. */\n\
589 static const short yyr2[] = { 0", ftable
);
591 for (i
= 1; i
< nrules
; i
++)
605 fprintf(ftable
, "%6d", rrhs
[i
+ 1] - rrhs
[i
] - 1);
612 fprintf(ftable
, "%6d\n};\n", nitems
- rrhs
[nrules
] - 1);
618 output_defines (void)
620 fprintf(ftable
, "\n\n#define\tYYFINAL\t\t%d\n", final_state
);
621 fprintf(ftable
, "#define\tYYFLAG\t\t%d\n", MINSHORT
);
622 fprintf(ftable
, "#define\tYYNTBASE\t%d\n", ntokens
);
627 /* compute and output yydefact, yydefgoto, yypact, yypgoto, yytable and yycheck. */
630 output_actions (void)
632 nvectors
= nstates
+ nvars
;
634 froms
= NEW2(nvectors
, short *);
635 tos
= NEW2(nvectors
, short *);
636 tally
= NEW2(nvectors
, short);
637 width
= NEW2(nvectors
, short);
645 FREE(accessing_symbol
);
648 FREE(goto_map
+ ntokens
);
661 /* figure out the actions for the specified state, indexed by lookahead token type.
663 The yydefact table is output now. The detailed info
664 is saved for putting into yytable later. */
673 actrow
= NEW2(ntokens
, short);
676 fprintf(ftable
, "\nstatic const short yydefact[] = {%6d", k
);
680 for (i
= 1; i
< nstates
; i
++)
695 fprintf(ftable
, "%6d", k
);
699 fprintf(ftable
, "\n};\n");
705 /* Decide what to do for each type of token if seen as the lookahead token in specified state.
706 The value returned is used as the default action (yydefact) for the state.
707 In addition, actrow is filled with what to do for each kind of token,
708 index by symbol number, with zero meaning do the default action.
709 The value MINSHORT, a very negative number, means this situation
710 is an error. The parser recognizes this value specially.
712 This is where conflicts are resolved. The loop over lookahead rules
713 considered lower-numbered rules last, and the last rule considered that likes
714 a token gets to handle it. */
717 action_row (int state
)
725 register int default_rule
;
729 register int shift_state
;
731 register unsigned mask
;
732 register unsigned *wordp
;
733 register reductions
*redp
;
734 register shifts
*shiftp
;
736 int nodefault
= 0; /* set nonzero to inhibit having any default reduction */
738 for (i
= 0; i
< ntokens
; i
++)
743 redp
= reduction_table
[state
];
751 /* loop over all the rules available here which require lookahead */
752 m
= lookaheads
[state
];
753 n
= lookaheads
[state
+ 1];
755 for (i
= n
- 1; i
>= m
; i
--)
757 rule
= - LAruleno
[i
];
758 wordp
= LA
+ i
* tokensetsize
;
761 /* and find each token which the rule finds acceptable to come next */
762 for (j
= 0; j
< ntokens
; j
++)
764 /* and record this rule as the rule to use if that token follows. */
779 shiftp
= shift_table
[state
];
781 /* now see which tokens are allowed for shifts in this state.
782 For them, record the shift as the thing to do. So shift is preferred to reduce. */
788 for (i
= 0; i
< k
; i
++)
790 shift_state
= shiftp
->shifts
[i
];
791 if (! shift_state
) continue;
793 symbol
= accessing_symbol
[shift_state
];
798 actrow
[symbol
] = shift_state
;
800 /* do not use any default reduction if there is a shift for error */
802 if (symbol
== error_token_number
) nodefault
= 1;
806 errp
= err_table
[state
];
808 /* See which tokens are an explicit error in this state
809 (due to %nonassoc). For them, record MINSHORT as the action. */
815 for (i
= 0; i
< k
; i
++)
817 symbol
= errp
->errs
[i
];
818 actrow
[symbol
] = MINSHORT
;
822 /* now find the most common reduction and make it the default action for this state. */
824 if (nreds
>= 1 && ! nodefault
)
826 if (consistent
[state
])
827 default_rule
= redp
->rules
[0];
831 for (i
= m
; i
< n
; i
++)
834 rule
= - LAruleno
[i
];
836 for (j
= 0; j
< ntokens
; j
++)
838 if (actrow
[j
] == rule
)
849 /* actions which match the default are replaced with zero,
850 which means "use the default" */
854 for (j
= 0; j
< ntokens
; j
++)
856 if (actrow
[j
] == default_rule
)
860 default_rule
= - default_rule
;
865 /* If have no default rule, the default is an error.
866 So replace any action which says "error" with "use default". */
868 if (default_rule
== 0)
869 for (j
= 0; j
< ntokens
; j
++)
871 if (actrow
[j
] == MINSHORT
)
875 return (default_rule
);
889 for (i
= 0; i
< ntokens
; i
++)
898 froms
[state
] = sp1
= sp
= NEW2(count
, short);
899 tos
[state
] = sp2
= NEW2(count
, short);
901 for (i
= 0; i
< ntokens
; i
++)
910 tally
[state
] = count
;
911 width
[state
] = sp1
[-1] - sp
[0] + 1;
916 /* figure out what to do after reducing with each rule,
917 depending on the saved state from before the beginning
918 of parsing the data that matched this rule.
920 The yydefgoto table is output now. The detailed info
921 is saved for putting into yytable later. */
930 state_count
= NEW2(nstates
, short);
932 k
= default_goto(ntokens
);
933 fprintf(ftable
, "\nstatic const short yydefgoto[] = {%6d", k
);
934 save_column(ntokens
, k
);
937 for (i
= ntokens
+ 1; i
< nsyms
; i
++)
952 fprintf(ftable
, "%6d", k
);
956 fprintf(ftable
, "\n};\n");
963 default_goto (int symbol
)
968 register int default_state
;
971 m
= goto_map
[symbol
];
972 n
= goto_map
[symbol
+ 1];
977 for (i
= 0; i
< nstates
; i
++)
980 for (i
= m
; i
< n
; i
++)
981 state_count
[to_state
[i
]]++;
986 for (i
= 0; i
< nstates
; i
++)
988 if (state_count
[i
] > max
)
990 max
= state_count
[i
];
995 return (default_state
);
1000 save_column (int symbol
, int default_state
)
1006 register short *sp1
;
1007 register short *sp2
;
1011 m
= goto_map
[symbol
];
1012 n
= goto_map
[symbol
+ 1];
1015 for (i
= m
; i
< n
; i
++)
1017 if (to_state
[i
] != default_state
)
1024 symno
= symbol
- ntokens
+ nstates
;
1026 froms
[symno
] = sp1
= sp
= NEW2(count
, short);
1027 tos
[symno
] = sp2
= NEW2(count
, short);
1029 for (i
= m
; i
< n
; i
++)
1031 if (to_state
[i
] != default_state
)
1033 *sp1
++ = from_state
[i
];
1034 *sp2
++ = to_state
[i
];
1038 tally
[symno
] = count
;
1039 width
[symno
] = sp1
[-1] - sp
[0] + 1;
1044 /* The next few functions decide how to pack the actions and gotos
1045 information into yytable. */
1056 order
= NEW2(nvectors
, short);
1059 for (i
= 0; i
< nvectors
; i
++)
1067 while (j
>= 0 && (width
[order
[j
]] < w
))
1070 while (j
>= 0 && (width
[order
[j
]] == w
) && (tally
[order
[j
]] < t
))
1073 for (k
= nentries
- 1; k
> j
; k
--)
1074 order
[k
+ 1] = order
[k
];
1090 base
= NEW2(nvectors
, short);
1091 pos
= NEW2(nentries
, short);
1092 table
= NEW2(MAXTABLE
, short);
1093 check
= NEW2(MAXTABLE
, short);
1098 for (i
= 0; i
< nvectors
; i
++)
1101 for (i
= 0; i
< MAXTABLE
; i
++)
1104 for (i
= 0; i
< nentries
; i
++)
1106 state
= matching_state(i
);
1109 place
= pack_vector(i
);
1111 place
= base
[state
];
1114 base
[order
[i
]] = place
;
1117 for (i
= 0; i
< nvectors
; i
++)
1133 matching_state (int vector
)
1150 for (prev
= vector
- 1; prev
>= 0; prev
--)
1153 if (width
[j
] != w
|| tally
[j
] != t
)
1157 for (k
= 0; match
&& k
< t
; k
++)
1159 if (tos
[j
][k
] != tos
[i
][k
] || froms
[j
][k
] != froms
[i
][k
])
1173 pack_vector (int vector
)
1179 register int loc
= 0;
1181 register short *from
;
1188 berror("pack_vector");
1193 for (j
= lowzero
- from
[0]; j
< MAXTABLE
; j
++)
1197 for (k
= 0; ok
&& k
< t
; k
++)
1201 fatals(_("maximum table size (%s) exceeded"), int_to_string(MAXTABLE
));
1203 if (table
[loc
] != 0)
1207 for (k
= 0; ok
&& k
< vector
; k
++)
1215 for (k
= 0; k
< t
; k
++)
1219 check
[loc
] = from
[k
];
1222 while (table
[lowzero
] != 0)
1232 berror("pack_vector");
1233 return 0; /* JF keep lint happy */
1238 /* the following functions output yytable, yycheck
1239 and the vectors whose elements index the portion starts */
1247 fprintf(ftable
, "\nstatic const short yypact[] = {%6d", base
[0]);
1250 for (i
= 1; i
< nstates
; i
++)
1264 fprintf(ftable
, "%6d", base
[i
]);
1267 fprintf(ftable
, "\n};\n\nstatic const short yypgoto[] = {%6d", base
[nstates
]);
1270 for (i
= nstates
+ 1; i
< nvectors
; i
++)
1284 fprintf(ftable
, "%6d", base
[i
]);
1287 fprintf(ftable
, "\n};\n");
1298 fprintf(ftable
, "\n\n#define\tYYLAST\t\t%d\n\n", high
);
1299 fprintf(ftable
, "\nstatic const short yytable[] = {%6d", table
[0]);
1302 for (i
= 1; i
<= high
; i
++)
1316 fprintf(ftable
, "%6d", table
[i
]);
1319 fprintf(ftable
, "\n};\n");
1330 fprintf(ftable
, "\nstatic const short yycheck[] = {%6d", check
[0]);
1333 for (i
= 1; i
<= high
; i
++)
1347 fprintf(ftable
, "%6d", check
[i
]);
1350 fprintf(ftable
, "\n};\n");
1356 /* copy the parser code into the ftable file at the end. */
1359 output_parser (void)
1365 #define fpars fparser
1369 fprintf(ftable
, "#define YYPURE 1\n\n");
1371 #ifdef DONTDEF /* JF no longer needed 'cuz open_extra_files changes the
1372 currently open parser from bison.simple to bison.hairy */
1373 if (semantic_parser
)
1375 else fpars
= fparser1
;
1378 /* Loop over lines in the standard parser file. */
1386 /* See if the line starts with `#line.
1387 If so, set write_line to 0. */
1404 fprintf(ftable
, "#lin");
1407 fprintf(ftable
, "#li");
1410 fprintf(ftable
, "#l");
1413 fprintf(ftable
, "#");
1416 /* now write out the line... */
1417 for (; c
!= '\n' && c
!= EOF
; c
= getc(fpars
))
1421 /* `$' in the parser file indicates where to put the actions.
1422 Copy them in at this point. */
1424 for(c
=getc(faction
);c
!=EOF
;c
=getc(faction
))
1437 output_program (void)
1442 fprintf(ftable
, "#line %d \"%s\"\n", lineno
, infile
);
1454 free_itemsets (void)
1456 register core
*cp
,*cptmp
;
1460 for (cp
= first_state
; cp
; cp
= cptmp
) {
1470 register shifts
*sp
,*sptmp
;/* JF derefrenced freed ptr */
1474 for (sp
= first_shift
; sp
; sp
= sptmp
) {
1482 free_reductions (void)
1484 register reductions
*rp
,*rptmp
;/* JF fixed freed ptr */
1486 FREE(reduction_table
);
1488 for (rp
= first_reduction
; rp
; rp
= rptmp
) {