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