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