]> git.saurik.com Git - bison.git/blame - src/main.c
* src/lex.c (parse_percent_token): Be sure to 0-end token_buffer
[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"
a0f6b076
AD
26#include "files.h"
27#include "complain.h"
cc84fd5d 28#include "derives.h"
6c89f1c1 29#include "output.h"
a70083a3
AD
30#include "reader.h"
31#include "lalr.h"
015acc48 32#include "reduce.h"
3519ec76 33#include "nullable.h"
07a58c13 34#include "print.h"
403b315b 35#include "LR0.h"
d7913476 36#include "conflicts.h"
c4b66126 37#include "print_graph.h"
11d82f03 38#include "muscle_tab.h"
342b8b6e
AD
39#include "symtab.h"
40#include "lex.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
54bd0db4 53 lineno = 0;
cc84fd5d 54 getargs (argc, argv);
a0f6b076 55
11d82f03 56 muscle_init ();
54bd0db4 57
cc84fd5d
AD
58 /* Read the input. Copy some parts of it to FGUARD, FACTION, FTABLE
59 and FATTRS. In file reader.c. The other parts are recorded in
60 the grammar; see gram.h. */
a0f6b076
AD
61 reader ();
62 if (complain_message_count)
63 exit (1);
54bd0db4 64
00238958 65 /* Find useless nonterminals and productions and reduce the grammar. */
cc84fd5d 66 reduce_grammar ();
54bd0db4 67
7da99ede
AD
68 /* Record other info about the grammar. In files derives and
69 nullable. */
cc84fd5d
AD
70 set_derives ();
71 set_nullable ();
54bd0db4 72
7da99ede 73 /* Convert to nondeterministic finite state machine. In file LR0.
54bd0db4 74 See state.h for more info. */
cc84fd5d 75 generate_states ();
54bd0db4
RS
76
77 /* make it deterministic. In file lalr. */
cc84fd5d 78 lalr ();
54bd0db4 79
cc84fd5d
AD
80 /* Find and record any conflicts: places where one token of
81 lookahead is not enough to disambiguate the parsing. In file
82 conflicts. Also resolve s/r conflicts based on precedence
83 declarations. */
342b8b6e 84 solve_conflicts ();
0df87bb6 85 conflicts_print ();
342b8b6e
AD
86
87 /* Output file names. */
88 compute_output_file_names ();
89
b7c49edf
AD
90 /* Output the detailed report on the grammar. */
91 if (verbose_flag)
92 print_results ();
93
342b8b6e
AD
94 /* Stop if there were errors, to avoid trashing previous output
95 files. */
96 if (complain_message_count)
97 exit (1);
54bd0db4 98
e8cb70b9 99 /* Output the VCG graph. */
64d15509
AD
100 if (graph_flag)
101 print_graph ();
c4b66126 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
337c5bd1 109 reduce_free ();
342b8b6e 110 free_conflicts ();
cc84fd5d
AD
111 free_nullable ();
112 free_derives ();
4a120d45 113
722c4bfe
AD
114 /* If using alloca.c, flush the alloca'ed memory for the benefit of
115 people running Bison as a library in IDEs. */
116#if C_ALLOCA
117 alloca (0);
118#endif
119
0f37a994 120 return complain_message_count ? EXIT_FAILURE : EXIT_SUCCESS;
54bd0db4 121}