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