]> git.saurik.com Git - bison.git/blame - src/main.c
* src/main.c (main): Invoke scanner_free.
[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"
602bbf31 24#include "bitset.h"
ceed8467 25#include "getargs.h"
62a3e4f0
AD
26#include "symtab.h"
27#include "gram.h"
a0f6b076
AD
28#include "files.h"
29#include "complain.h"
cc84fd5d 30#include "derives.h"
6c89f1c1 31#include "output.h"
a70083a3
AD
32#include "reader.h"
33#include "lalr.h"
015acc48 34#include "reduce.h"
3519ec76 35#include "nullable.h"
07a58c13 36#include "print.h"
403b315b 37#include "LR0.h"
d7913476 38#include "conflicts.h"
c4b66126 39#include "print_graph.h"
11d82f03 40#include "muscle_tab.h"
54bd0db4 41
a98ad01e 42/* The name this program was run with, for messages. */
54bd0db4
RS
43char *program_name;
44
54bd0db4 45int
d2729d44 46main (int argc, char *argv[])
54bd0db4
RS
47{
48 program_name = argv[0];
29340571
RS
49 setlocale (LC_ALL, "");
50 bindtextdomain (PACKAGE, LOCALEDIR);
51 textdomain (PACKAGE);
52
914feea9
AD
53 bitset_stats_init ();
54
54bd0db4 55 lineno = 0;
cc84fd5d 56 getargs (argc, argv);
a0f6b076 57
11d82f03 58 muscle_init ();
54bd0db4 59
cc84fd5d
AD
60 /* Read the input. Copy some parts of it to FGUARD, FACTION, FTABLE
61 and FATTRS. In file reader.c. The other parts are recorded in
62 the grammar; see gram.h. */
a0f6b076
AD
63 reader ();
64 if (complain_message_count)
65 exit (1);
54bd0db4 66
00238958 67 /* Find useless nonterminals and productions and reduce the grammar. */
cc84fd5d 68 reduce_grammar ();
54bd0db4 69
7da99ede
AD
70 /* Record other info about the grammar. In files derives and
71 nullable. */
cc84fd5d
AD
72 set_derives ();
73 set_nullable ();
54bd0db4 74
7da99ede 75 /* Convert to nondeterministic finite state machine. In file LR0.
54bd0db4 76 See state.h for more info. */
cc84fd5d 77 generate_states ();
54bd0db4
RS
78
79 /* make it deterministic. In file lalr. */
cc84fd5d 80 lalr ();
54bd0db4 81
cc84fd5d
AD
82 /* Find and record any conflicts: places where one token of
83 lookahead is not enough to disambiguate the parsing. In file
84 conflicts. Also resolve s/r conflicts based on precedence
85 declarations. */
b408954b 86 conflicts_solve ();
0df87bb6 87 conflicts_print ();
342b8b6e
AD
88
89 /* Output file names. */
90 compute_output_file_names ();
91
b7c49edf 92 /* Output the detailed report on the grammar. */
ec3bc396 93 if (report_flag)
b7c49edf
AD
94 print_results ();
95
342b8b6e
AD
96 /* Stop if there were errors, to avoid trashing previous output
97 files. */
98 if (complain_message_count)
99 exit (1);
54bd0db4 100
e8cb70b9 101 /* Output the VCG graph. */
64d15509
AD
102 if (graph_flag)
103 print_graph ();
c4b66126 104
cc84fd5d
AD
105 /* Output the tables and the parser to ftable. In file output. */
106 output ();
a0f6b076 107
337c5bd1 108 reduce_free ();
b408954b 109 conflicts_free ();
cc84fd5d
AD
110 free_nullable ();
111 free_derives ();
76514394 112 grammar_free ();
4515534c
AD
113
114 /* The scanner memory cannot be released right after parsing, as it
115 contains things such as user actions, prologue, epilogue etc. */
116 scanner_free ();
592e8d4d 117 muscle_free ();
722c4bfe
AD
118 /* If using alloca.c, flush the alloca'ed memory for the benefit of
119 people running Bison as a library in IDEs. */
120#if C_ALLOCA
121 alloca (0);
122#endif
123
0f37a994 124 return complain_message_count ? EXIT_FAILURE : EXIT_SUCCESS;
54bd0db4 125}