1cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Parse command line arguments for Bison.
2cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002, 2003, 2004,
4cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   2005, 2006 Free Software Foundation, Inc.
5cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   This file is part of Bison, the GNU Compiler Compiler.
7cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Bison is free software; you can redistribute it and/or modify it
9cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   under the terms of the GNU General Public License as published by
10cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   the Free Software Foundation; either version 2, or (at your option)
11cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   any later version.
12cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
13cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Bison is distributed in the hope that it will be useful, but
14cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   WITHOUT ANY WARRANTY; without even the implied warranty of
15cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   General Public License for more details.
17cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
18cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   You should have received a copy of the GNU General Public License
19cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   along with Bison; see the file COPYING.  If not, write to the Free
20cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   02110-1301, USA.  */
22cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
23cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <config.h>
24cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "system.h"
25cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
26cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <argmatch.h>
27cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <error.h>
28cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
29cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Hack to get <getopt.h> to declare getopt with a prototype.  */
30cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#if lint && ! defined __GNU_LIBRARY__
31cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define __GNU_LIBRARY__
32cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define HACK_FOR___GNU_LIBRARY___PROTOTYPE 1
33cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
34cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
35cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <getopt.h>
36cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
37cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifdef HACK_FOR___GNU_LIBRARY___PROTOTYPE
38cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef __GNU_LIBRARY__
39cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef HACK_FOR___GNU_LIBRARY___PROTOTYPE
40cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
41cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
42cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "complain.h"
43cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "files.h"
44cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "getargs.h"
45cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "uniqstr.h"
46cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
47cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool debug_flag;
48cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool defines_flag;
49cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool graph_flag;
50cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool locations_flag;
51cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool no_lines_flag;
52cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool no_parser_flag;
53cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool token_table_flag;
54cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool yacc_flag;	/* for -y */
55cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
56cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool error_verbose = false;
57cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
58cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool nondeterministic_parser = false;
59cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool glr_parser = false;
60cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool pure_parser = false;
61cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
62cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint report_flag = report_none;
63cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint trace_flag = trace_none;
64cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
65cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectconst char *skeleton = NULL;
66cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectconst char *include = NULL;
67cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
68cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern char *program_name;
69cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
70cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
71cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*---------------------.
72cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| --trace's handling.  |
73cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`---------------------*/
74cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
75cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const char * const trace_args[] =
76cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
77cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* In a series of synonyms, present the most meaningful first, so
78cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     that argmatch_valid be more readable.  */
79cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "none       - no report",
80cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "scan       - grammar scanner traces",
81cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "parse      - grammar parser traces",
82cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "automaton  - contruction of the automaton",
83cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "bitsets    - use of bitsets",
84cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "grammar    - reading, reducing of the grammar",
85cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "resource   - memory consumption (where available)",
86cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "sets       - grammar sets: firsts, nullable etc.",
87cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "tools      - m4 invocation",
88cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "m4         - m4 traces",
89cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "skeleton   - skeleton postprocessing",
90cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "time       - time consumption",
91cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "all        - all of the above",
92cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  0
93cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
94cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
95cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const int trace_types[] =
96cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
97cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  trace_none,
98cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  trace_scan,
99cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  trace_parse,
100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  trace_automaton,
101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  trace_bitsets,
102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  trace_grammar,
103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  trace_resource,
104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  trace_sets,
105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  trace_tools,
106cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  trace_m4,
107cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  trace_skeleton,
108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  trace_time,
109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  trace_all
110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
111cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectARGMATCH_VERIFY (trace_args, trace_types);
113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
114cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
115cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttrace_argmatch (char *args)
116cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
117cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (args)
118cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
119cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      args = strtok (args, ",");
120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      do
121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	{
122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  int trace = XARGMATCH ("--trace", args,
123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project				 trace_args, trace_types);
124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  if (trace == trace_none)
125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	    trace_flag = trace_none;
126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  else
127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	    trace_flag |= trace;
128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	}
129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      while ((args = strtok (NULL, ",")));
130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    trace_flag = trace_all;
133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
135cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
136cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*----------------------.
137cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| --report's handling.  |
138cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`----------------------*/
139cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
140cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const char * const report_args[] =
141cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
142cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* In a series of synonyms, present the most meaningful first, so
143cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     that argmatch_valid be more readable.  */
144cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "none",
145cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "state", "states",
146cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "itemset", "itemsets",
147cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "look-ahead", "lookahead", "lookaheads",
148cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "solved",
149cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  "all",
150cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  0
151cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
152cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
153cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const int report_types[] =
154cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
155cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  report_none,
156cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  report_states, report_states,
157cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  report_states | report_itemsets, report_states | report_itemsets,
158cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  report_states | report_look_ahead_tokens,
159cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  report_states | report_look_ahead_tokens,
160cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  report_states | report_look_ahead_tokens,
161cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  report_states | report_solved_conflicts,
162cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  report_all
163cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
164cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
165cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectARGMATCH_VERIFY (report_args, report_types);
166cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
167cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
168cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectreport_argmatch (char *args)
169cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
170cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  args = strtok (args, ",");
171cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  do
172cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
173cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      int report = XARGMATCH ("--report", args,
174cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			      report_args, report_types);
175cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      if (report == report_none)
176cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	report_flag = report_none;
177cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      else
178cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	report_flag |= report;
179cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
180cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  while ((args = strtok (NULL, ",")));
181cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
182cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
183cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
184cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*-------------------------------------------.
185cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| Display the help message and exit STATUS.  |
186cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`-------------------------------------------*/
187cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
188cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void usage (int) ATTRIBUTE_NORETURN;
189cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
190cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
191cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectusage (int status)
192cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
193cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (status != 0)
194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    fprintf (stderr, _("Try `%s --help' for more information.\n"),
195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	     program_name);
196cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      /* Some efforts were made to ease the translators' task, please
199cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	 continue.  */
200cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      fputs (_("\
201cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectGNU bison generates parsers for LALR(1) grammars.\n"), stdout);
202cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      putc ('\n', stdout);
203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      fprintf (stdout, _("\
205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectUsage: %s [OPTION]... FILE\n"), program_name);
206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      putc ('\n', stdout);
207cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
208cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      fputs (_("\
209cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectIf a long option shows an argument as mandatory, then it is mandatory\n\
210cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectfor the equivalent short option also.  Similarly for optional arguments.\n"),
211cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	     stdout);
212cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      putc ('\n', stdout);
213cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
214cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      fputs (_("\
215cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectOperation modes:\n\
216cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  -h, --help                 display this help and exit\n\
217cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  -V, --version              output version information and exit\n\
218cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      --print-localedir      output directory containing locale-dependent data\n\
219cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  -y, --yacc                 emulate POSIX yacc\n"), stdout);
220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      putc ('\n', stdout);
221cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
222cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      fputs (_("\
223cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectParser:\n\
224cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  -S, --skeleton=FILE        specify the skeleton to use\n\
225cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  -t, --debug                instrument the parser for debugging\n\
226cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      --locations            enable locations computation\n\
227cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  -p, --name-prefix=PREFIX   prepend PREFIX to the external symbols\n\
228cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  -l, --no-lines             don't generate `#line' directives\n\
229cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  -n, --no-parser            generate the tables only\n\
230cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  -k, --token-table          include a table of token names\n\
231cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project"), stdout);
232cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      putc ('\n', stdout);
233cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      fputs (_("\
235cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectOutput:\n\
236cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  -d, --defines              also produce a header file\n\
237cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  -r, --report=THINGS        also produce details on the automaton\n\
238cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  -v, --verbose              same as `--report=state'\n\
239cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n\
240cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  -o, --output=FILE          leave output to FILE\n\
241cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  -g, --graph                also produce a VCG description of the automaton\n\
242cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project"), stdout);
243cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      putc ('\n', stdout);
244cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
245cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      fputs (_("\
246cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectTHINGS is a list of comma separated words that can include:\n\
247cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  `state'        describe the states\n\
248cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  `itemset'      complete the core item sets with their closure\n\
249cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  `look-ahead'   explicitly associate look-ahead tokens to items\n\
250cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  `solved'       describe shift/reduce conflicts solving\n\
251cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  `all'          include all the above information\n\
252cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  `none'         disable the report\n\
253cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project"), stdout);
254cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      putc ('\n', stdout);
255cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
256cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      fputs (_("\
257cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectReport bugs to <bug-bison@gnu.org>.\n"), stdout);
258cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
259cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
260cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  exit (status);
261cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
262cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
263cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
264cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*------------------------------.
265cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| Display the version message.  |
266cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`------------------------------*/
267cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
268cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
269cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectversion (void)
270cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
271cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Some efforts were made to ease the translators' task, please
272cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     continue.  */
273cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  printf (_("bison (GNU Bison) %s"), VERSION);
274cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  putc ('\n', stdout);
275cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fputs (_("Written by Robert Corbett and Richard Stallman.\n"), stdout);
276cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  putc ('\n', stdout);
277cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
278cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fprintf (stdout,
279cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	   _("Copyright (C) %d Free Software Foundation, Inc.\n"), 2006);
280cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
281cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fputs (_("\
282cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectThis is free software; see the source for copying conditions.  There is NO\n\
283cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
284cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project"),
285cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	 stdout);
286cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
287cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
288cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
289cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*----------------------.
290cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| Process the options.  |
291cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`----------------------*/
292cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
293cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Shorts options.  */
294cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic char const short_options[] = "yvegdhr:ltknVo:b:p:S:T::";
295cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
296cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Values for long options that do not have single-letter equivalents.  */
297cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectenum
298cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
299cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  LOCATIONS_OPTION = CHAR_MAX + 1,
300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  PRINT_LOCALEDIR_OPTION
301cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
302cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
303cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic struct option const long_options[] =
304cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
305cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Operation modes. */
306cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "help",            no_argument,	0,   'h' },
307cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "version",         no_argument,	0,   'V' },
308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "print-localedir", no_argument,	0,   PRINT_LOCALEDIR_OPTION },
309cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
310cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Parser. */
311cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "name-prefix",   required_argument,	  0,   'p' },
312cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "include",       required_argument,   0,   'I' },
313cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
314cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Output. */
315cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "file-prefix", required_argument,	0,   'b' },
316cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "output",	   required_argument,	0,   'o' },
317cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "output-file", required_argument,	0,   'o' },
318cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "graph",	   optional_argument,	0,   'g' },
319cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "report",	   required_argument,   0,   'r' },
320cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "verbose",	   no_argument,	        0,   'v' },
321cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
322cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Hidden. */
323cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "trace",         optional_argument,   0,     'T' },
324cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
325cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Output.  */
326cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "defines",     optional_argument,   0,   'd' },
327cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
328cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Operation modes.  */
329cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "fixed-output-files", no_argument,  0,   'y' },
330cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "yacc",	          no_argument,  0,   'y' },
331cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
332cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Parser.  */
333cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "debug",	      no_argument,               0,   't' },
334cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "locations",      no_argument,		 0, LOCATIONS_OPTION },
335cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "no-lines",       no_argument,               0,   'l' },
336cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "no-parser",      no_argument,               0,   'n' },
337cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "raw",            no_argument,               0,     0 },
338cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "skeleton",       required_argument,         0,   'S' },
339cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { "token-table",    no_argument,               0,   'k' },
340cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
341cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {0, 0, 0, 0}
342cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
343cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
344cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Under DOS, there is no difference on the case.  This can be
345cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   troublesome when looking for `.tab' etc.  */
346cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifdef MSDOS
347cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define AS_FILE_NAME(File) (strlwr (File), (File))
348cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#else
349cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define AS_FILE_NAME(File) (File)
350cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
351cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
352cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid
353cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectgetargs (int argc, char *argv[])
354cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
355cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int c;
356cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
357cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  while ((c = getopt_long (argc, argv, short_options, long_options, NULL))
358cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	 != -1)
359cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    switch (c)
360cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {
361cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 0:
362cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	/* Certain long options cause getopt_long to return 0.  */
363cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	break;
364cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
365cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 'y':
366cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	yacc_flag = true;
367cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	break;
368cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
369cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 'h':
370cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	usage (EXIT_SUCCESS);
371cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
372cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 'V':
373cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	version ();
374cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	exit (EXIT_SUCCESS);
375cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
376cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case PRINT_LOCALEDIR_OPTION:
377cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	printf ("%s\n", LOCALEDIR);
378cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	exit (EXIT_SUCCESS);
379cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
380cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 'g':
381cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	/* Here, the -g and --graph=FILE options are differentiated.  */
382cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	graph_flag = true;
383cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	if (optarg)
384cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  spec_graph_file = AS_FILE_NAME (optarg);
385cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	break;
386cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
387cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 'v':
388cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	report_flag |= report_states;
389cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	break;
390cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
391cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 'S':
392cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	skeleton = AS_FILE_NAME (optarg);
393cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	break;
394cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
395cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 'I':
396cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	include = AS_FILE_NAME (optarg);
397cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	break;
398cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
399cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 'd':
400cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	/* Here, the -d and --defines options are differentiated.  */
401cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	defines_flag = true;
402cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	if (optarg)
403cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  spec_defines_file = AS_FILE_NAME (optarg);
404cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	break;
405cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
406cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 'l':
407cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	no_lines_flag = true;
408cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	break;
409cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
410cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case LOCATIONS_OPTION:
411cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	locations_flag = true;
412cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	break;
413cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
414cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 'k':
415cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	token_table_flag = true;
416cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	break;
417cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
418cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 'n':
419cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	no_parser_flag = true;
420cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	break;
421cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
422cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 't':
423cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	debug_flag = true;
424cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	break;
425cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
426cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 'o':
427cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	spec_outfile = AS_FILE_NAME (optarg);
428cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	break;
429cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
430cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 'b':
431cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	spec_file_prefix = AS_FILE_NAME (optarg);
432cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	break;
433cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
434cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 'p':
435cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	spec_name_prefix = optarg;
436cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	break;
437cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
438cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 'r':
439cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	report_argmatch (optarg);
440cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	break;
441cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
442cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 'T':
443cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	trace_argmatch (optarg);
444cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	break;
445cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
446cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      default:
447cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	usage (EXIT_FAILURE);
448cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }
449cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
450cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (argc - optind != 1)
451cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
452cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      if (argc - optind < 1)
453cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	error (0, 0, _("missing operand after `%s'"), argv[argc - 1]);
454cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      else
455cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	error (0, 0, _("extra operand `%s'"), argv[optind + 1]);
456cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      usage (EXIT_FAILURE);
457cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
458cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
459cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  current_file = grammar_file = uniqstr_new (argv[optind]);
460cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
461