|
|
1.1 root 1: /* Top level entry point of bison,
2: Copyright (C) 1984, 1986, 1989 Free Software Foundation, Inc.
3:
4: This file is part of Bison, the GNU Compiler Compiler.
5:
6: Bison is free software; you can redistribute it and/or modify
7: it under the terms of the GNU General Public License as published by
8: the Free Software Foundation; either version 2, or (at your option)
9: any later version.
10:
11: Bison is distributed in the hope that it will be useful,
12: but WITHOUT ANY WARRANTY; without even the implied warranty of
13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14: GNU General Public License for more details.
15:
16: You should have received a copy of the GNU General Public License
17: along with Bison; see the file COPYING. If not, write to
18: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
19:
20:
21: #include <stdio.h>
22: #include "system.h"
23: #include "machine.h" /* JF for MAXSHORT */
24:
25: extern int lineno;
26: extern int verboseflag;
27:
28: /* Nonzero means failure has been detected; don't write a parser file. */
29: int failure;
30:
31: /* The name this program was run with, for messages. */
32: char *program_name;
33:
34: extern void getargs(), openfiles(), reader(), reduce_grammar();
35: extern void set_derives(), set_nullable(), generate_states();
36: extern void lalr(), initialize_conflicts(), verbose(), terse();
37: extern void output(), done();
38:
39:
40: /* VMS complained about using `int'. */
41: int
42: main(argc, argv)
43: int argc;
44: char *argv[];
45: {
46: program_name = argv[0];
47: failure = 0;
48: lineno = 0;
49: getargs(argc, argv);
50: openfiles();
51:
52: /* read the input. Copy some parts of it to fguard, faction, ftable and fattrs.
53: In file reader.c.
54: The other parts are recorded in the grammar; see gram.h. */
55: reader();
56:
57: /* find useless nonterminals and productions and reduce the grammar. In
58: file reduce.c */
59: reduce_grammar();
60:
61: /* record other info about the grammar. In files derives and nullable. */
62: set_derives();
63: set_nullable();
64:
65: /* convert to nondeterministic finite state machine. In file LR0.
66: See state.h for more info. */
67: generate_states();
68:
69: /* make it deterministic. In file lalr. */
70: lalr();
71:
72: /* Find and record any conflicts: places where one token of lookahead is not
73: enough to disambiguate the parsing. In file conflicts.
74: Currently this does not do anything to resolve them;
75: the trivial form of conflict resolution that exists is done in output. */
76: initialize_conflicts();
77:
78: /* print information about results, if requested. In file print. */
79: if (verboseflag)
80: verbose();
81: else
82: terse();
83:
84: /* output the tables and the parser to ftable. In file output. */
85: output();
86: done(failure);
87: }
88:
89: /* functions to report errors which prevent a parser from being generated */
90:
91: void
92: fatal(s)
93: char *s;
94: {
95: extern char *infile;
96:
97: if (infile == 0)
98: fprintf(stderr, "fatal error: %s\n", s);
99: else
100: fprintf(stderr, "\"%s\", line %d: %s\n", infile, lineno, s);
101: done(1);
102: }
103:
104:
105: /* JF changed to accept/deal with variable args.
106: DO NOT change this to use varargs. It will appear to work
107: but will break on systems that don't have the necessary library
108: functions. This is the ONLY safe way to write such a function. */
109: /*VARARGS1*/
110:
111: void
112: fatals(fmt,x1,x2,x3,x4,x5,x6,x7,x8)
113: char *fmt;
114: {
115: char buffer[200];
116:
117: sprintf(buffer, fmt, x1,x2,x3,x4,x5,x6,x7,x8);
118: fatal(buffer);
119: }
120:
121:
122: void
123: toomany(s)
124: char *s;
125: {
126: char buffer[200];
127:
128: /* JF new msg */
129: sprintf(buffer, "limit of %d exceeded, too many %s", MAXSHORT, s);
130: fatal(buffer);
131: }
132:
133:
134: void
135: berror(s)
136: char *s;
137: {
138: fprintf(stderr, "internal error, %s\n", s);
139: abort();
140: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.