]> git.saurik.com Git - bison.git/blame - src/main.c
* src/files.c: Formatting changes.
[bison.git] / src / main.c
CommitLineData
54bd0db4 1/* Top level entry point of bison,
ceed8467
AD
2 Copyright (C) 1984, 1986, 1989, 1992, 1995, 2000
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"
54bd0db4 31
cc84fd5d 32#if 0 /* XXX currently unused. */
54bd0db4 33/* Nonzero means failure has been detected; don't write a parser file. */
4a120d45
JT
34static int failure;
35#endif
54bd0db4 36
a98ad01e 37/* The name this program was run with, for messages. */
54bd0db4
RS
38char *program_name;
39
d019d655
AD
40extern void berror PARAMS((const char *));
41
cc84fd5d 42extern char *printable_version PARAMS ((int));
cc84fd5d 43
cc84fd5d
AD
44extern void reduce_grammar PARAMS ((void));
45extern void set_nullable PARAMS ((void));
46extern void free_nullable PARAMS ((void));
47extern void generate_states PARAMS ((void));
cc84fd5d
AD
48extern void initialize_conflicts PARAMS ((void));
49extern void finalize_conflicts PARAMS ((void));
50extern void verbose PARAMS ((void));
51extern void terse PARAMS ((void));
54bd0db4
RS
52
53
54/* VMS complained about using `int'. */
a98ad01e 55
54bd0db4 56int
d2729d44 57main (int argc, char *argv[])
54bd0db4
RS
58{
59 program_name = argv[0];
29340571
RS
60 setlocale (LC_ALL, "");
61 bindtextdomain (PACKAGE, LOCALEDIR);
62 textdomain (PACKAGE);
63
54bd0db4 64 lineno = 0;
cc84fd5d 65 getargs (argc, argv);
a0f6b076 66
cc84fd5d 67 /* Be ready to clean up if we exit. */
a0f6b076
AD
68 atexit (done);
69
8963a27b 70 open_files ();
54bd0db4 71
cc84fd5d
AD
72 /* Read the input. Copy some parts of it to FGUARD, FACTION, FTABLE
73 and FATTRS. In file reader.c. The other parts are recorded in
74 the grammar; see gram.h. */
a0f6b076
AD
75 reader ();
76 if (complain_message_count)
77 exit (1);
54bd0db4
RS
78
79 /* find useless nonterminals and productions and reduce the grammar. In
80 file reduce.c */
cc84fd5d 81 reduce_grammar ();
54bd0db4
RS
82
83 /* record other info about the grammar. In files derives and nullable. */
cc84fd5d
AD
84 set_derives ();
85 set_nullable ();
54bd0db4
RS
86
87 /* convert to nondeterministic finite state machine. In file LR0.
88 See state.h for more info. */
cc84fd5d 89 generate_states ();
54bd0db4
RS
90
91 /* make it deterministic. In file lalr. */
cc84fd5d 92 lalr ();
54bd0db4 93
cc84fd5d
AD
94 /* Find and record any conflicts: places where one token of
95 lookahead is not enough to disambiguate the parsing. In file
96 conflicts. Also resolve s/r conflicts based on precedence
97 declarations. */
98 initialize_conflicts ();
54bd0db4 99
cc84fd5d
AD
100 /* Print information about results, if requested. In file print.
101 */
54bd0db4 102 if (verboseflag)
cc84fd5d 103 verbose ();
54bd0db4 104 else
cc84fd5d 105 terse ();
54bd0db4 106
cc84fd5d
AD
107 /* Output the tables and the parser to ftable. In file output. */
108 output ();
a0f6b076 109
cc84fd5d
AD
110 finalize_conflicts ();
111 free_nullable ();
112 free_derives ();
4a120d45 113
a0f6b076 114 exit (complain_message_count ? 1 : 0);
54bd0db4 115}
a98ad01e 116\f
a98ad01e
RS
117/* Return a string containing a printable version of C:
118 either C itself, or the corresponding \DDD code. */
119
120char *
d2729d44 121printable_version (int c)
a98ad01e
RS
122{
123 static char buf[10];
124 if (c < ' ' || c >= '\177')
cc84fd5d 125 sprintf (buf, "\\%o", c);
a98ad01e
RS
126 else
127 {
128 buf[0] = c;
129 buf[1] = '\0';
130 }
131 return buf;
132}
133
a98ad01e 134/* Abort for an internal error denoted by string S. */
54bd0db4
RS
135
136void
4a120d45 137berror (const char *s)
54bd0db4 138{
a0f6b076 139 fprintf (stderr, _("%s: internal error: %s\n"), program_name, s);
cc84fd5d 140 abort ();
54bd0db4 141}