]> git.saurik.com Git - bison.git/blame - src/main.c
* src/conflicts.c (print_reductions): Accept OUT as argument.
[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
d019d655
AD
44extern void berror PARAMS((const char *));
45
54bd0db4 46int
d2729d44 47main (int argc, char *argv[])
54bd0db4
RS
48{
49 program_name = argv[0];
29340571
RS
50 setlocale (LC_ALL, "");
51 bindtextdomain (PACKAGE, LOCALEDIR);
52 textdomain (PACKAGE);
53
54bd0db4 54 lineno = 0;
cc84fd5d 55 getargs (argc, argv);
a0f6b076 56
11d82f03 57 muscle_init ();
8963a27b 58 open_files ();
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
RS
66
67 /* find useless nonterminals and productions and reduce the grammar. In
68 file reduce.c */
cc84fd5d 69 reduce_grammar ();
54bd0db4
RS
70
71 /* record other info about the grammar. In files derives and nullable. */
cc84fd5d
AD
72 set_derives ();
73 set_nullable ();
54bd0db4
RS
74
75 /* convert to nondeterministic finite state machine. In file LR0.
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. */
342b8b6e 86 solve_conflicts ();
0df87bb6 87 conflicts_print ();
342b8b6e
AD
88
89 /* Output file names. */
90 compute_output_file_names ();
91
92 /* Stop if there were errors, to avoid trashing previous output
93 files. */
94 if (complain_message_count)
95 exit (1);
54bd0db4 96
0df87bb6 97 /* Output the detailed report on the grammar. */
07a58c13 98 print_results ();
54bd0db4 99
e8cb70b9 100 /* Output the VCG graph. */
c4b66126
AD
101 print_graph ();
102
cc84fd5d
AD
103 /* Output the tables and the parser to ftable. In file output. */
104 output ();
a0f6b076 105
342b8b6e
AD
106 /* Free the symbol table data structure. */
107 free_symtab ();
108
109 lex_free ();
110
111 /* Close the input files. */
112 close_files ();
113
114 free_conflicts ();
cc84fd5d
AD
115 free_nullable ();
116 free_derives ();
4a120d45 117
342b8b6e 118 output_files ();
d8880f69 119
a0f6b076 120 exit (complain_message_count ? 1 : 0);
54bd0db4 121}
a98ad01e 122\f
a98ad01e 123/* Abort for an internal error denoted by string S. */
54bd0db4
RS
124
125void
4a120d45 126berror (const char *s)
54bd0db4 127{
a0f6b076 128 fprintf (stderr, _("%s: internal error: %s\n"), program_name, s);
cc84fd5d 129 abort ();
54bd0db4 130}