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