]> git.saurik.com Git - bison.git/blame - src/main.c
* src/symtab.c (symbol_free): Remove dead deactivated code:
[bison.git] / src / main.c
CommitLineData
54bd0db4 1/* Top level entry point of bison,
bb0027a9 2 Copyright (C) 1984, 1986, 1989, 1992, 1995, 2000, 2001, 2002
ceed8467 3 Free Software Foundation, Inc.
54bd0db4 4
e87b5700 5 This file is part of Bison, the GNU Compiler Compiler.
54bd0db4 6
e87b5700
AD
7 Bison is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
54bd0db4 11
e87b5700
AD
12 Bison is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
54bd0db4 16
e87b5700
AD
17 You should have received a copy of the GNU General Public License
18 along with Bison; see the file COPYING. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
54bd0db4
RS
21
22
54bd0db4 23#include "system.h"
613f5e1a 24#include "bitset_stats.h"
602bbf31 25#include "bitset.h"
ceed8467 26#include "getargs.h"
3e6656f9 27#include "struniq.h"
62a3e4f0
AD
28#include "symtab.h"
29#include "gram.h"
a0f6b076
AD
30#include "files.h"
31#include "complain.h"
cc84fd5d 32#include "derives.h"
c6f1a33c 33#include "tables.h"
6c89f1c1 34#include "output.h"
a70083a3
AD
35#include "reader.h"
36#include "lalr.h"
015acc48 37#include "reduce.h"
3519ec76 38#include "nullable.h"
07a58c13 39#include "print.h"
403b315b 40#include "LR0.h"
d7913476 41#include "conflicts.h"
c4b66126 42#include "print_graph.h"
11d82f03 43#include "muscle_tab.h"
54bd0db4 44
a98ad01e 45/* The name this program was run with, for messages. */
54bd0db4
RS
46char *program_name;
47
caf23d24 48
caf23d24 49
54bd0db4 50int
d2729d44 51main (int argc, char *argv[])
54bd0db4
RS
52{
53 program_name = argv[0];
29340571 54 setlocale (LC_ALL, "");
c81bad89
PE
55 (void) bindtextdomain (PACKAGE, LOCALEDIR);
56 (void) textdomain (PACKAGE);
29340571 57
cc84fd5d 58 getargs (argc, argv);
a0f6b076 59
1509d42f
AD
60 time_report = trace_flag & trace_time;
61 init_timevar ();
62 timevar_start (TV_TOTAL);
63
273a74fa 64 if (trace_flag & trace_bitsets)
613f5e1a
AD
65 bitset_stats_enable ();
66
3e6656f9 67 struniqs_new ();
11d82f03 68 muscle_init ();
54bd0db4 69
cc84fd5d
AD
70 /* Read the input. Copy some parts of it to FGUARD, FACTION, FTABLE
71 and FATTRS. In file reader.c. The other parts are recorded in
72 the grammar; see gram.h. */
640748ee 73
1509d42f
AD
74 timevar_push (TV_READER);
75 reader ();
76 timevar_pop (TV_READER);
640748ee 77
5ca3209b 78 if (complaint_issued)
f6d0c239 79 goto finish;
54bd0db4 80
00238958 81 /* Find useless nonterminals and productions and reduce the grammar. */
1509d42f 82 timevar_push (TV_REDUCE);
cc84fd5d 83 reduce_grammar ();
1509d42f 84 timevar_pop (TV_REDUCE);
640748ee 85
7da99ede
AD
86 /* Record other info about the grammar. In files derives and
87 nullable. */
1509d42f 88 timevar_push (TV_SETS);
bb0027a9
AD
89 derives_compute ();
90 nullable_compute ();
1509d42f 91 timevar_pop (TV_SETS);
54bd0db4 92
7da99ede 93 /* Convert to nondeterministic finite state machine. In file LR0.
54bd0db4 94 See state.h for more info. */
1509d42f 95 timevar_push (TV_LR0);
cc84fd5d 96 generate_states ();
1509d42f 97 timevar_pop (TV_LR0);
54bd0db4
RS
98
99 /* make it deterministic. In file lalr. */
1509d42f 100 timevar_push (TV_LALR);
cc84fd5d 101 lalr ();
1509d42f 102 timevar_pop (TV_LALR);
54bd0db4 103
cc84fd5d
AD
104 /* Find and record any conflicts: places where one token of
105 lookahead is not enough to disambiguate the parsing. In file
106 conflicts. Also resolve s/r conflicts based on precedence
107 declarations. */
1509d42f 108 timevar_push (TV_CONFLICTS);
b408954b 109 conflicts_solve ();
0df87bb6 110 conflicts_print ();
1509d42f 111 timevar_pop (TV_CONFLICTS);
342b8b6e 112
c8f002c7
AD
113 /* Compute the parser tables. */
114 timevar_push (TV_ACTIONS);
115 tables_generate ();
116 timevar_pop (TV_ACTIONS);
117
118 grammar_rules_never_reduced_report
119 (_("rule never reduced because of conflicts"));
120
342b8b6e
AD
121 /* Output file names. */
122 compute_output_file_names ();
123
b7c49edf 124 /* Output the detailed report on the grammar. */
ec3bc396 125 if (report_flag)
1509d42f
AD
126 {
127 timevar_push (TV_REPORT);
128 print_results ();
129 timevar_pop (TV_REPORT);
130 }
b7c49edf 131
e8cb70b9 132 /* Output the VCG graph. */
64d15509 133 if (graph_flag)
1509d42f
AD
134 {
135 timevar_push (TV_GRAPH);
136 print_graph ();
137 timevar_pop (TV_GRAPH);
138 }
c4b66126 139
c8f002c7
AD
140 /* Stop if there were errors, to avoid trashing previous output
141 files. */
5ca3209b 142 if (complaint_issued)
f6d0c239 143 goto finish;
c6f1a33c 144
3325ddc4
AD
145 /* Lookaheads are no longer needed. */
146 timevar_push (TV_FREE);
147 lalr_free ();
148 timevar_pop (TV_FREE);
149
cc84fd5d 150 /* Output the tables and the parser to ftable. In file output. */
1509d42f 151 timevar_push (TV_PARSER);
cc84fd5d 152 output ();
1509d42f 153 timevar_pop (TV_PARSER);
a0f6b076 154
1509d42f 155 timevar_push (TV_FREE);
cd08e51e
AD
156 nullable_free ();
157 derives_free ();
c6f1a33c 158 tables_free ();
c7ca99d4 159 states_free ();
337c5bd1 160 reduce_free ();
b408954b 161 conflicts_free ();
76514394 162 grammar_free ();
900c5db5
AD
163 /* FIXME: We are leaking all the other file names. */
164 free (infile);
4515534c
AD
165
166 /* The scanner memory cannot be released right after parsing, as it
167 contains things such as user actions, prologue, epilogue etc. */
168 scanner_free ();
592e8d4d 169 muscle_free ();
3e6656f9 170 struniqs_free ();
722c4bfe
AD
171 /* If using alloca.c, flush the alloca'ed memory for the benefit of
172 people running Bison as a library in IDEs. */
173#if C_ALLOCA
640748ee 174 alloca (0);
722c4bfe 175#endif
1509d42f 176 timevar_pop (TV_FREE);
722c4bfe 177
273a74fa 178 if (trace_flag & trace_bitsets)
640748ee 179 bitset_stats_dump (stderr);
613f5e1a 180
f6d0c239
PE
181 finish:
182
1509d42f
AD
183 /* Stop timing and print the times. */
184 timevar_stop (TV_TOTAL);
185 timevar_print (stderr);
186
e95aed63 187 return complaint_issued ? EXIT_FAILURE : EXIT_SUCCESS;
54bd0db4 188}