]> git.saurik.com Git - bison.git/blame - src/main.c
Report rules which are never reduced by the parser: those hidden
[bison.git] / src / main.c
CommitLineData
54bd0db4 1/* Top level entry point of bison,
602bbf31 2 Copyright 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"
62a3e4f0
AD
27#include "symtab.h"
28#include "gram.h"
a0f6b076
AD
29#include "files.h"
30#include "complain.h"
cc84fd5d 31#include "derives.h"
6c89f1c1 32#include "output.h"
a70083a3
AD
33#include "reader.h"
34#include "lalr.h"
015acc48 35#include "reduce.h"
3519ec76 36#include "nullable.h"
07a58c13 37#include "print.h"
403b315b 38#include "LR0.h"
d7913476 39#include "conflicts.h"
c4b66126 40#include "print_graph.h"
11d82f03 41#include "muscle_tab.h"
54bd0db4 42
a98ad01e 43/* The name this program was run with, for messages. */
54bd0db4
RS
44char *program_name;
45
caf23d24
AD
46
47/*--------------------------.
48| Tracking space and time. |
49`--------------------------*/
50
51#if HAVE_MALLOC_H & HAVE_SYS_TIMES_H
52# include <malloc.h>
53# include <sys/times.h>
54#endif
55
640748ee
AD
56static void
57stage (const char *title)
58{
caf23d24
AD
59#if HAVE_MALLOC_H & HAVE_SYS_TIMES_H
60 if (trace_flag)
61 {
62 struct mallinfo minfo = mallinfo ();
63 struct tms tinfo;
64 times (&tinfo);
65 fprintf (stderr, "STAGE: %30s: %9d (%9d): %ldu %lds\n",
66 title,
67 minfo.uordblks, minfo.arena,
68 tinfo.tms_utime, tinfo.tms_stime);
69 }
70#endif
640748ee
AD
71}
72
caf23d24 73
54bd0db4 74int
d2729d44 75main (int argc, char *argv[])
54bd0db4
RS
76{
77 program_name = argv[0];
29340571
RS
78 setlocale (LC_ALL, "");
79 bindtextdomain (PACKAGE, LOCALEDIR);
80 textdomain (PACKAGE);
81
cc84fd5d 82 getargs (argc, argv);
a0f6b076 83
613f5e1a
AD
84 if (trace_flag)
85 bitset_stats_enable ();
86
11d82f03 87 muscle_init ();
54bd0db4 88
640748ee
AD
89 stage ("initialized muscles");
90
cc84fd5d
AD
91 /* Read the input. Copy some parts of it to FGUARD, FACTION, FTABLE
92 and FATTRS. In file reader.c. The other parts are recorded in
93 the grammar; see gram.h. */
a0f6b076 94 reader ();
640748ee
AD
95
96 stage ("reader");
97
a0f6b076
AD
98 if (complain_message_count)
99 exit (1);
54bd0db4 100
00238958 101 /* Find useless nonterminals and productions and reduce the grammar. */
cc84fd5d 102 reduce_grammar ();
54bd0db4 103
640748ee
AD
104 stage ("reduced grammar");
105
7da99ede
AD
106 /* Record other info about the grammar. In files derives and
107 nullable. */
cc84fd5d
AD
108 set_derives ();
109 set_nullable ();
54bd0db4 110
7da99ede 111 /* Convert to nondeterministic finite state machine. In file LR0.
54bd0db4 112 See state.h for more info. */
cc84fd5d 113 generate_states ();
54bd0db4 114
640748ee 115 stage ("generated states");
54bd0db4 116 /* make it deterministic. In file lalr. */
cc84fd5d 117 lalr ();
54bd0db4 118
640748ee 119 stage ("lalred");
cc84fd5d
AD
120 /* Find and record any conflicts: places where one token of
121 lookahead is not enough to disambiguate the parsing. In file
122 conflicts. Also resolve s/r conflicts based on precedence
123 declarations. */
b408954b 124 conflicts_solve ();
0df87bb6 125 conflicts_print ();
342b8b6e 126
640748ee 127 stage ("solved conflicts");
342b8b6e
AD
128 /* Output file names. */
129 compute_output_file_names ();
130
b7c49edf 131 /* Output the detailed report on the grammar. */
ec3bc396 132 if (report_flag)
b7c49edf
AD
133 print_results ();
134
640748ee 135 stage ("printed results");
342b8b6e
AD
136 /* Stop if there were errors, to avoid trashing previous output
137 files. */
138 if (complain_message_count)
139 exit (1);
54bd0db4 140
e8cb70b9 141 /* Output the VCG graph. */
64d15509
AD
142 if (graph_flag)
143 print_graph ();
c4b66126 144
cc84fd5d
AD
145 /* Output the tables and the parser to ftable. In file output. */
146 output ();
640748ee 147 stage ("made output");
a0f6b076 148
c7ca99d4 149 states_free ();
640748ee 150 stage ("freed states");
337c5bd1 151 reduce_free ();
640748ee 152 stage ("freed reduce");
b408954b 153 conflicts_free ();
640748ee 154 stage ("freed conflicts");
cc84fd5d 155 free_nullable ();
640748ee 156 stage ("freed nullable");
cc84fd5d 157 free_derives ();
640748ee 158 stage ("freed derives");
76514394 159 grammar_free ();
640748ee 160 stage ("freed grammar");
4515534c
AD
161
162 /* The scanner memory cannot be released right after parsing, as it
163 contains things such as user actions, prologue, epilogue etc. */
164 scanner_free ();
640748ee 165 stage ("freed scanner");
592e8d4d 166 muscle_free ();
640748ee 167 stage ("freed muscles");
722c4bfe
AD
168 /* If using alloca.c, flush the alloca'ed memory for the benefit of
169 people running Bison as a library in IDEs. */
170#if C_ALLOCA
640748ee 171 alloca (0);
722c4bfe
AD
172#endif
173
640748ee
AD
174 if (trace_flag)
175 bitset_stats_dump (stderr);
613f5e1a 176
0f37a994 177 return complain_message_count ? EXIT_FAILURE : EXIT_SUCCESS;
54bd0db4 178}