]> git.saurik.com Git - bison.git/blame - src/getargs.c
Regen.
[bison.git] / src / getargs.c
CommitLineData
9f306f2a 1/* Parse command line arguments for bison.
06b00abc
AD
2 Copyright 1984, 1986, 1989, 1992, 2000, 2001, 2002
3 Free Software Foundation, Inc.
3d8fc6ca 4
9f306f2a 5 This file is part of Bison, the GNU Compiler Compiler.
3d8fc6ca 6
9f306f2a
AD
7 Bison is free software; you can redistribute it and/or modify it
8 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.
3d8fc6ca 11
9f306f2a
AD
12 Bison is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details.
3d8fc6ca 16
9f306f2a
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 the Free
19 Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA. */
3d8fc6ca 21
3d8fc6ca 22#include "system.h"
ec3bc396
AD
23#include "getopt.h"
24#include "argmatch.h"
b0ce6046 25#include "complain.h"
ceed8467 26#include "getargs.h"
82b6d266 27#include "options.h"
ec3bc396 28#include "files.h"
3d8fc6ca 29
89cab50d
AD
30int debug_flag = 0;
31int defines_flag = 0;
32int locations_flag = 0;
33int no_lines_flag = 0;
34int no_parser_flag = 0;
ec3bc396 35int report_flag = 0;
89cab50d 36int token_table_flag = 0;
89cab50d 37int yacc_flag = 0; /* for -y */
22c2cbc0 38int graph_flag = 0;
9bfe901c 39int trace_flag = 0;
d2729d44 40
b0ce6046 41const char *skeleton = NULL;
f6bd5427 42const char *include = NULL;
b0ce6046 43
cbd8ffc5 44extern char *program_name;
3d8fc6ca 45
ec3bc396
AD
46/*----------------------.
47| --report's handling. |
48`----------------------*/
49
50static const char * const report_args[] =
51{
52 /* In a series of synonyms, present the most meaningful first, so
53 that argmatch_valid be more readable. */
54 "none",
55 "state", "states",
56 "itemset", "itemsets",
57 "lookahead", "lookaheads",
b408954b 58 "solved",
ec3bc396
AD
59 "all",
60 0
61};
62
63static const int report_types[] =
64{
65 report_none,
66 report_states, report_states,
67 report_states | report_itemsets, report_states | report_itemsets,
68 report_states | report_lookaheads, report_states | report_lookaheads,
b408954b 69 report_states | report_solved_conflicts,
ec3bc396
AD
70 report_all
71};
72
73
74static void
75report_argmatch (char *args)
76{
77 ARGMATCH_ASSERT (report_args, report_types);
78 do
79 {
80 int report = XARGMATCH ("--report", args,
81 report_args, report_types);
82 if (report == report_none)
83 report_flag = report_none;
84 else
85 report_flag |= report;
86 }
87 while ((args = strtok (NULL, ",")));
88}
89
9f306f2a
AD
90/*---------------------------.
91| Display the help message. |
92`---------------------------*/
e79137ac 93
4a120d45 94static void
d2729d44 95usage (FILE *stream)
cbd8ffc5 96{
9f306f2a
AD
97 /* Some efforts were made to ease the translators' task, please
98 continue. */
a0f6b076
AD
99 fputs (_("\
100GNU bison generates parsers for LALR(1) grammars.\n"), stream);
9f306f2a
AD
101 putc ('\n', stream);
102
103 fprintf (stream, _("\
104Usage: %s [OPTION]... FILE\n"), program_name);
105 putc ('\n', stream);
106
107 fputs (_("\
108If a long option shows an argument as mandatory, then it is mandatory\n\
109for the equivalent short option also. Similarly for optional arguments.\n"),
110 stream);
111 putc ('\n', stream);
112
a0f6b076 113 fputs (_("\
9f306f2a
AD
114Operation modes:\n\
115 -h, --help display this help and exit\n\
116 -V, --version output version information and exit\n\
a0f6b076 117 -y, --yacc emulate POSIX yacc\n"), stream);
9f306f2a
AD
118 putc ('\n', stream);
119
a0f6b076 120 fputs (_("\
9f306f2a 121Parser:\n\
cd5bd6ac 122 -S, --skeleton=FILE specify the skeleton to use\n\
9f306f2a 123 -t, --debug instrument the parser for debugging\n\
89cab50d 124 --locations enable locations computation\n\
9f306f2a
AD
125 -p, --name-prefix=PREFIX prepend PREFIX to the external symbols\n\
126 -l, --no-lines don't generate `#line' directives\n\
127 -n, --no-parser generate the tables only\n\
9f306f2a 128 -k, --token-table include a table of token names\n\
a0f6b076 129"), stream);
9f306f2a
AD
130 putc ('\n', stream);
131
a0f6b076 132 fputs (_("\
9f306f2a
AD
133Output:\n\
134 -d, --defines also produce a header file\n\
ec3bc396
AD
135 -r, --report=THINGS also produce details on the automaton\n\
136 -v, --verbose same as `--report=state'\n\
9f306f2a 137 -b, --file-prefix=PREFIX specify a PREFIX for output files\n\
951366c1
AD
138 -o, --output=FILE leave output to FILE\n\
139 -g, --graph also produce a VCG description of the automaton\n\
ec3bc396
AD
140\n\
141THINGS is a list of comma separated words that can include:\n\
142 `state' describe the states\n\
143 `itemset' complete the core item sets with their closure\n\
144 `lookahead' explicitly associate lookaheads to items\n\
b408954b 145 `solved' describe shift/reduce conflicts solving\n\
ec3bc396
AD
146 `all' include all the above information\n\
147 `none' disable the report\n\
951366c1 148"), stream);
9f306f2a
AD
149 putc ('\n', stream);
150
a0f6b076
AD
151 fputs (_("\
152Report bugs to <bug-bison@gnu.org>.\n"), stream);
cbd8ffc5
DM
153}
154
e79137ac
AD
155
156/*------------------------------.
157| Display the version message. |
158`------------------------------*/
159
160static void
161version (FILE *stream)
162{
163 /* Some efforts were made to ease the translators' task, please
164 continue. */
06b00abc 165 fprintf (stream, _("bison (GNU Bison) %s"), VERSION);
e79137ac 166 putc ('\n', stream);
06b00abc 167 fputs (_("Written by Robert Corbett and Richard Stallman.\n"), stream);
e79137ac
AD
168 putc ('\n', stream);
169
06b00abc
AD
170 fprintf (stream,
171 _("Copyright (C) %d Free Software Foundation, Inc.\n"), 2002);
e79137ac
AD
172
173 fputs (_("\
174This is free software; see the source for copying conditions. There is NO\n\
175warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
176"),
177 stream);
178}
179
180
181/*----------------------.
182| Process the options. |
183`----------------------*/
184
ae404801
AD
185/* Under DOS, there is no difference on the case. This can be
186 troublesome when looking for `.tab' etc. */
187#ifdef MSDOS
188# define AS_FILE_NAME(File) (strlwr (File), (File))
189#else
190# define AS_FILE_NAME(File) (File)
191#endif
192
3d8fc6ca 193void
d2729d44 194getargs (int argc, char *argv[])
3d8fc6ca 195{
1916f98e 196 int c;
3d8fc6ca 197
f51cb8ff 198 struct option *longopts = long_option_table_new ();
cd5bd6ac
AD
199 while ((c = getopt_long (argc, argv, shortopts, longopts, NULL)) != EOF)
200 switch (c)
201 {
202 case 0:
203 /* Certain long options cause getopt_long to return 0. */
204 break;
205
206 case 'y':
207 yacc_flag = 1;
208 break;
209
210 case 'h':
211 usage (stdout);
212 exit (0);
213
214 case 'V':
215 version (stdout);
216 exit (0);
217
22c2cbc0 218 case 'g':
342b8b6e 219 /* Here, the -g and --graph=FILE options are differentiated. */
22c2cbc0 220 graph_flag = 1;
ae404801 221 spec_graph_file = AS_FILE_NAME (optarg);
22c2cbc0
AD
222 break;
223
cd5bd6ac 224 case 'v':
ec3bc396 225 report_flag |= report_states;
cd5bd6ac
AD
226 break;
227
228 case 'S':
ae404801 229 skeleton = AS_FILE_NAME (optarg);
cd5bd6ac
AD
230 break;
231
f6bd5427 232 case 'I':
ae404801 233 include = AS_FILE_NAME (optarg);
f6bd5427
MA
234 break;
235
cd5bd6ac 236 case 'd':
342b8b6e 237 /* Here, the -d and --defines options are differentiated. */
cd5bd6ac 238 defines_flag = 1;
ae404801
AD
239 if (optarg)
240 spec_defines_file = AS_FILE_NAME (optarg);
cd5bd6ac
AD
241 break;
242
243 case 'l':
244 no_lines_flag = 1;
245 break;
246
247 case 'k':
248 token_table_flag = 1;
249 break;
250
cd5bd6ac
AD
251 case 'n':
252 no_parser_flag = 1;
253 break;
254
255 case 't':
256 debug_flag = 1;
257 break;
258
259 case 'o':
ae404801 260 spec_outfile = AS_FILE_NAME (optarg);
cd5bd6ac
AD
261 break;
262
263 case 'b':
ae404801 264 spec_file_prefix = AS_FILE_NAME (optarg);
cd5bd6ac
AD
265 break;
266
267 case 'p':
268 spec_name_prefix = optarg;
269 break;
270
ec3bc396
AD
271 case 'r':
272 report_argmatch (optarg);
273 break;
274
cd5bd6ac
AD
275 default:
276 fprintf (stderr, _("Try `%s --help' for more information.\n"),
277 program_name);
278 exit (1);
279 }
3d8fc6ca 280
f51cb8ff
AD
281 free (longopts);
282
3d8fc6ca
RS
283 if (optind == argc)
284 {
e79137ac
AD
285 fprintf (stderr, _("%s: no grammar file given\n"), program_name);
286 exit (1);
3d8fc6ca
RS
287 }
288 if (optind < argc - 1)
e79137ac
AD
289 fprintf (stderr, _("%s: extra arguments ignored after `%s'\n"),
290 program_name, argv[optind]);
3d8fc6ca
RS
291
292 infile = argv[optind];
293}