1cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Parse command line arguments for Bison. 2cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 305436638acc7c010349a69c3395f1a57c642dc62Ying Wang Copyright (C) 1984, 1986, 1989, 1992, 2000-2012 Free Software 405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 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 805436638acc7c010349a69c3395f1a57c642dc62Ying Wang This program is free software: you can redistribute it and/or modify 905436638acc7c010349a69c3395f1a57c642dc62Ying Wang it under the terms of the GNU General Public License as published by 1005436638acc7c010349a69c3395f1a57c642dc62Ying Wang the Free Software Foundation, either version 3 of the License, or 1105436638acc7c010349a69c3395f1a57c642dc62Ying Wang (at your option) any later version. 12cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 1305436638acc7c010349a69c3395f1a57c642dc62Ying Wang This program is distributed in the hope that it will be useful, 1405436638acc7c010349a69c3395f1a57c642dc62Ying Wang but WITHOUT ANY WARRANTY; without even the implied warranty of 1505436638acc7c010349a69c3395f1a57c642dc62Ying Wang MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1605436638acc7c010349a69c3395f1a57c642dc62Ying Wang GNU 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 1905436638acc7c010349a69c3395f1a57c642dc62Ying Wang along with this program. If not, see <http://www.gnu.org/licenses/>. */ 20cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 21cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <config.h> 22cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "system.h" 2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include "output.h" 24cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 25cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <argmatch.h> 2605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <c-strcase.h> 2705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <configmake.h> 28cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <error.h> 29cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 30cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Hack to get <getopt.h> to declare getopt with a prototype. */ 31cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#if lint && ! defined __GNU_LIBRARY__ 32cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define __GNU_LIBRARY__ 33cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define HACK_FOR___GNU_LIBRARY___PROTOTYPE 1 34cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif 35cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 36cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <getopt.h> 37cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 38cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifdef HACK_FOR___GNU_LIBRARY___PROTOTYPE 39cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef __GNU_LIBRARY__ 40cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef HACK_FOR___GNU_LIBRARY___PROTOTYPE 41cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif 42cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 4305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <progname.h> 4405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 45cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "complain.h" 46cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "files.h" 47cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "getargs.h" 4805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include "muscle-tab.h" 4905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include "quote.h" 50cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "uniqstr.h" 51cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 5205436638acc7c010349a69c3395f1a57c642dc62Ying Wangbool debug; 53cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool defines_flag; 54cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool graph_flag; 5505436638acc7c010349a69c3395f1a57c642dc62Ying Wangbool xml_flag; 56cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool locations_flag; 57cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool no_lines_flag; 58cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool token_table_flag; 59cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool yacc_flag; /* for -y */ 60cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 61cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool error_verbose = false; 62cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 63cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool nondeterministic_parser = false; 64cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool glr_parser = false; 65cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 6605436638acc7c010349a69c3395f1a57c642dc62Ying Wangint feature_flag = feature_none; 67cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint report_flag = report_none; 68cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint trace_flag = trace_none; 6905436638acc7c010349a69c3395f1a57c642dc62Ying Wangint warnings_flag = warnings_conflicts_sr | warnings_conflicts_rr 7005436638acc7c010349a69c3395f1a57c642dc62Ying Wang | warnings_other; 7105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 7205436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic struct bison_language const valid_languages[] = { 7305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { "c", "c-skel.m4", ".c", ".h", true }, 7405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { "c++", "c++-skel.m4", ".cc", ".hh", true }, 7505436638acc7c010349a69c3395f1a57c642dc62Ying Wang { "java", "java-skel.m4", ".java", ".java", false }, 7605436638acc7c010349a69c3395f1a57c642dc62Ying Wang { "", "", "", "", false } 7705436638acc7c010349a69c3395f1a57c642dc62Ying Wang}; 78cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 7905436638acc7c010349a69c3395f1a57c642dc62Ying Wangint skeleton_prio = default_prio; 80cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectconst char *skeleton = NULL; 8105436638acc7c010349a69c3395f1a57c642dc62Ying Wangint language_prio = default_prio; 8205436638acc7c010349a69c3395f1a57c642dc62Ying Wangstruct bison_language const *language = &valid_languages[0]; 83cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectconst char *include = NULL; 84cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 8505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 8605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Decode an option's set of keys. 8705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 8805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param option option being decoded. 8905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param keys array of valid subarguments. 9005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param values array of corresponding (int) values. 9105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param all the all value. 9205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param flags the flags to update 9305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param args comma separated list of effective subarguments to decode. 9405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * If 0, then activate all the flags. 9505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 9605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * If VALUE != 0 then KEY sets flags and no-KEY clears them. 9705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * If VALUE == 0 then KEY clears all flags from \c all and no-KEY sets all 9805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * flags from \c all. Thus no-none = all and no-all = none. 9905436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 10005436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic void 10105436638acc7c010349a69c3395f1a57c642dc62Ying Wangflags_argmatch (const char *option, 10205436638acc7c010349a69c3395f1a57c642dc62Ying Wang const char * const keys[], const int values[], 10305436638acc7c010349a69c3395f1a57c642dc62Ying Wang int all, int *flags, char *args) 10405436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 10505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (args) 10605436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 10705436638acc7c010349a69c3395f1a57c642dc62Ying Wang args = strtok (args, ","); 10805436638acc7c010349a69c3395f1a57c642dc62Ying Wang while (args) 10905436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 11005436638acc7c010349a69c3395f1a57c642dc62Ying Wang int no = strncmp (args, "no-", 3) == 0 ? 3 : 0; 11105436638acc7c010349a69c3395f1a57c642dc62Ying Wang int value = XARGMATCH (option, args + no, keys, values); 11205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (value == 0) 11305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 11405436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (no) 11505436638acc7c010349a69c3395f1a57c642dc62Ying Wang *flags |= all; 11605436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 11705436638acc7c010349a69c3395f1a57c642dc62Ying Wang *flags &= ~all; 11805436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 11905436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 12005436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 12105436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (no) 12205436638acc7c010349a69c3395f1a57c642dc62Ying Wang *flags &= ~value; 12305436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 12405436638acc7c010349a69c3395f1a57c642dc62Ying Wang *flags |= value; 12505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 12605436638acc7c010349a69c3395f1a57c642dc62Ying Wang args = strtok (NULL, ","); 12705436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 12805436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 12905436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 13005436638acc7c010349a69c3395f1a57c642dc62Ying Wang *flags |= all; 13105436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 13205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 13305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Decode a set of sub arguments. 13405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 13505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param FlagName the flag familly to update. 13605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \param Args the effective sub arguments to decode. 13705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 13805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \arg FlagName_args the list of keys. 13905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \arg FlagName_types the list of values. 14005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \arg FlagName_all the all value. 14105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \arg FlagName_flag the flag to update. 14205436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 14305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define FLAGS_ARGMATCH(FlagName, Args) \ 14405436638acc7c010349a69c3395f1a57c642dc62Ying Wang flags_argmatch ("--" #FlagName, FlagName ## _args, FlagName ## _types, \ 14505436638acc7c010349a69c3395f1a57c642dc62Ying Wang FlagName ## _all, &FlagName ## _flag, Args) 14605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 14705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 14805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/*----------------------. 14905436638acc7c010349a69c3395f1a57c642dc62Ying Wang| --report's handling. | 15005436638acc7c010349a69c3395f1a57c642dc62Ying Wang`----------------------*/ 15105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 15205436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic const char * const report_args[] = 15305436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 15405436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* In a series of synonyms, present the most meaningful first, so 15505436638acc7c010349a69c3395f1a57c642dc62Ying Wang that argmatch_valid be more readable. */ 15605436638acc7c010349a69c3395f1a57c642dc62Ying Wang "none", 15705436638acc7c010349a69c3395f1a57c642dc62Ying Wang "state", "states", 15805436638acc7c010349a69c3395f1a57c642dc62Ying Wang "itemset", "itemsets", 15905436638acc7c010349a69c3395f1a57c642dc62Ying Wang "lookahead", "lookaheads", "look-ahead", 16005436638acc7c010349a69c3395f1a57c642dc62Ying Wang "solved", 16105436638acc7c010349a69c3395f1a57c642dc62Ying Wang "all", 16205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 0 16305436638acc7c010349a69c3395f1a57c642dc62Ying Wang}; 16405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 16505436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic const int report_types[] = 16605436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 16705436638acc7c010349a69c3395f1a57c642dc62Ying Wang report_none, 16805436638acc7c010349a69c3395f1a57c642dc62Ying Wang report_states, report_states, 16905436638acc7c010349a69c3395f1a57c642dc62Ying Wang report_states | report_itemsets, report_states | report_itemsets, 17005436638acc7c010349a69c3395f1a57c642dc62Ying Wang report_states | report_lookahead_tokens, 17105436638acc7c010349a69c3395f1a57c642dc62Ying Wang report_states | report_lookahead_tokens, 17205436638acc7c010349a69c3395f1a57c642dc62Ying Wang report_states | report_lookahead_tokens, 17305436638acc7c010349a69c3395f1a57c642dc62Ying Wang report_states | report_solved_conflicts, 17405436638acc7c010349a69c3395f1a57c642dc62Ying Wang report_all 17505436638acc7c010349a69c3395f1a57c642dc62Ying Wang}; 17605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 17705436638acc7c010349a69c3395f1a57c642dc62Ying WangARGMATCH_VERIFY (report_args, report_types); 178cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 179cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 180cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*---------------------. 181cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| --trace's handling. | 182cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`---------------------*/ 183cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 184cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const char * const trace_args[] = 185cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 186cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* In a series of synonyms, present the most meaningful first, so 187cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project that argmatch_valid be more readable. */ 18805436638acc7c010349a69c3395f1a57c642dc62Ying Wang "none - no traces", 189cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project "scan - grammar scanner traces", 190cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project "parse - grammar parser traces", 19105436638acc7c010349a69c3395f1a57c642dc62Ying Wang "automaton - construction of the automaton", 192cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project "bitsets - use of bitsets", 19305436638acc7c010349a69c3395f1a57c642dc62Ying Wang "grammar - reading, reducing the grammar", 194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project "resource - memory consumption (where available)", 195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project "sets - grammar sets: firsts, nullable etc.", 19605436638acc7c010349a69c3395f1a57c642dc62Ying Wang "muscles - m4 definitions passed to the skeleton", 197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project "tools - m4 invocation", 198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project "m4 - m4 traces", 199cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project "skeleton - skeleton postprocessing", 200cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project "time - time consumption", 20105436638acc7c010349a69c3395f1a57c642dc62Ying Wang "ielr - IELR conversion", 202cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project "all - all of the above", 203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 0 204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}; 205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const int trace_types[] = 207cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 208cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project trace_none, 209cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project trace_scan, 210cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project trace_parse, 211cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project trace_automaton, 212cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project trace_bitsets, 213cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project trace_grammar, 214cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project trace_resource, 215cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project trace_sets, 21605436638acc7c010349a69c3395f1a57c642dc62Ying Wang trace_muscles, 217cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project trace_tools, 218cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project trace_m4, 219cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project trace_skeleton, 220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project trace_time, 22105436638acc7c010349a69c3395f1a57c642dc62Ying Wang trace_ielr, 222cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project trace_all 223cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}; 224cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 225cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectARGMATCH_VERIFY (trace_args, trace_types); 226cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 227cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 22805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/*------------------------. 22905436638acc7c010349a69c3395f1a57c642dc62Ying Wang| --warnings's handling. | 23005436638acc7c010349a69c3395f1a57c642dc62Ying Wang`------------------------*/ 231cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 23205436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic const char * const warnings_args[] = 233cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* In a series of synonyms, present the most meaningful first, so 235cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project that argmatch_valid be more readable. */ 23605436638acc7c010349a69c3395f1a57c642dc62Ying Wang "none - no warnings", 23705436638acc7c010349a69c3395f1a57c642dc62Ying Wang "midrule-values - unset or unused midrule values", 23805436638acc7c010349a69c3395f1a57c642dc62Ying Wang "yacc - incompatibilities with POSIX Yacc", 23905436638acc7c010349a69c3395f1a57c642dc62Ying Wang "conflicts-sr - S/R conflicts", 24005436638acc7c010349a69c3395f1a57c642dc62Ying Wang "conflicts-rr - R/R conflicts", 24105436638acc7c010349a69c3395f1a57c642dc62Ying Wang "other - all other warnings", 24205436638acc7c010349a69c3395f1a57c642dc62Ying Wang "all - all of the above", 24305436638acc7c010349a69c3395f1a57c642dc62Ying Wang "error - warnings are errors", 244cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 0 245cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}; 246cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 24705436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic const int warnings_types[] = 248cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 24905436638acc7c010349a69c3395f1a57c642dc62Ying Wang warnings_none, 25005436638acc7c010349a69c3395f1a57c642dc62Ying Wang warnings_midrule_values, 25105436638acc7c010349a69c3395f1a57c642dc62Ying Wang warnings_yacc, 25205436638acc7c010349a69c3395f1a57c642dc62Ying Wang warnings_conflicts_sr, 25305436638acc7c010349a69c3395f1a57c642dc62Ying Wang warnings_conflicts_rr, 25405436638acc7c010349a69c3395f1a57c642dc62Ying Wang warnings_other, 25505436638acc7c010349a69c3395f1a57c642dc62Ying Wang warnings_all, 25605436638acc7c010349a69c3395f1a57c642dc62Ying Wang warnings_error 257cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}; 258cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 25905436638acc7c010349a69c3395f1a57c642dc62Ying WangARGMATCH_VERIFY (warnings_args, warnings_types); 260cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 26105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/*-----------------------. 26205436638acc7c010349a69c3395f1a57c642dc62Ying Wang| --feature's handling. | 26305436638acc7c010349a69c3395f1a57c642dc62Ying Wang`-----------------------*/ 26405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 26505436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic const char * const feature_args[] = 266cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 26705436638acc7c010349a69c3395f1a57c642dc62Ying Wang "none", 26805436638acc7c010349a69c3395f1a57c642dc62Ying Wang "caret", "diagnostics-show-caret", 26905436638acc7c010349a69c3395f1a57c642dc62Ying Wang "all", 27005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 0 27105436638acc7c010349a69c3395f1a57c642dc62Ying Wang}; 27205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 27305436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic const int feature_types[] = 27405436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 27505436638acc7c010349a69c3395f1a57c642dc62Ying Wang feature_none, 27605436638acc7c010349a69c3395f1a57c642dc62Ying Wang feature_caret, feature_caret, 27705436638acc7c010349a69c3395f1a57c642dc62Ying Wang feature_all 27805436638acc7c010349a69c3395f1a57c642dc62Ying Wang}; 279cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 28005436638acc7c010349a69c3395f1a57c642dc62Ying WangARGMATCH_VERIFY (feature_args, feature_types); 281cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 282cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*-------------------------------------------. 283cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| Display the help message and exit STATUS. | 284cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`-------------------------------------------*/ 285cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 286cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void usage (int) ATTRIBUTE_NORETURN; 287cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 288cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 289cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectusage (int status) 290cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 291cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (status != 0) 292cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fprintf (stderr, _("Try `%s --help' for more information.\n"), 293cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project program_name); 294cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project else 295cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 29605436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* For ../build-aux/cross-options.pl to work, use the format: 29705436638acc7c010349a69c3395f1a57c642dc62Ying Wang ^ -S, --long[=ARGS] (whitespace) 29805436638acc7c010349a69c3395f1a57c642dc62Ying Wang A --long option is required. 29905436638acc7c010349a69c3395f1a57c642dc62Ying Wang Otherwise, add exceptions to ../build-aux/cross-options.pl. */ 300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 30105436638acc7c010349a69c3395f1a57c642dc62Ying Wang printf (_("Usage: %s [OPTION]... FILE\n"), program_name); 30205436638acc7c010349a69c3395f1a57c642dc62Ying Wang fputs (_("\ 30305436638acc7c010349a69c3395f1a57c642dc62Ying WangGenerate a deterministic LR or generalized LR (GLR) parser employing\n\ 30405436638acc7c010349a69c3395f1a57c642dc62Ying WangLALR(1), IELR(1), or canonical LR(1) parser tables. IELR(1) and\n\ 30505436638acc7c010349a69c3395f1a57c642dc62Ying Wangcanonical LR(1) support is experimental.\n\ 30605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\n\ 30705436638acc7c010349a69c3395f1a57c642dc62Ying Wang"), stdout); 308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 309cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fputs (_("\ 31005436638acc7c010349a69c3395f1a57c642dc62Ying WangMandatory arguments to long options are mandatory for short options too.\n\ 31105436638acc7c010349a69c3395f1a57c642dc62Ying Wang"), stdout); 31205436638acc7c010349a69c3395f1a57c642dc62Ying Wang fputs (_("\ 31305436638acc7c010349a69c3395f1a57c642dc62Ying WangThe same is true for optional arguments.\n\ 31405436638acc7c010349a69c3395f1a57c642dc62Ying Wang"), stdout); 315cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 316cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fputs (_("\ 31705436638acc7c010349a69c3395f1a57c642dc62Ying Wang\n\ 318cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectOperation modes:\n\ 319cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project -h, --help display this help and exit\n\ 320cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project -V, --version output version information and exit\n\ 321cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project --print-localedir output directory containing locale-dependent data\n\ 32205436638acc7c010349a69c3395f1a57c642dc62Ying Wang --print-datadir output directory containing skeletons and XSLT\n\ 32305436638acc7c010349a69c3395f1a57c642dc62Ying Wang -y, --yacc emulate POSIX Yacc\n\ 32405436638acc7c010349a69c3395f1a57c642dc62Ying Wang -W, --warnings[=CATEGORY] report the warnings falling in CATEGORY\n\ 32505436638acc7c010349a69c3395f1a57c642dc62Ying Wang -f, --feature[=FEATURE] activate miscellaneous features\n\ 32605436638acc7c010349a69c3395f1a57c642dc62Ying Wang\n\ 32705436638acc7c010349a69c3395f1a57c642dc62Ying Wang"), stdout); 328cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 329cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fputs (_("\ 330cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectParser:\n\ 33105436638acc7c010349a69c3395f1a57c642dc62Ying Wang -L, --language=LANGUAGE specify the output programming language\n\ 33205436638acc7c010349a69c3395f1a57c642dc62Ying Wang -S, --skeleton=FILE specify the skeleton to use\n\ 33305436638acc7c010349a69c3395f1a57c642dc62Ying Wang -t, --debug instrument the parser for debugging\n\ 33405436638acc7c010349a69c3395f1a57c642dc62Ying Wang --locations enable location support\n\ 33505436638acc7c010349a69c3395f1a57c642dc62Ying Wang -D, --define=NAME[=VALUE] similar to '%define NAME \"VALUE\"'\n\ 33605436638acc7c010349a69c3395f1a57c642dc62Ying Wang -F, --force-define=NAME[=VALUE] override '%define NAME \"VALUE\"'\n\ 33705436638acc7c010349a69c3395f1a57c642dc62Ying Wang -p, --name-prefix=PREFIX prepend PREFIX to the external symbols\n\ 33805436638acc7c010349a69c3395f1a57c642dc62Ying Wang deprecated by '-Dapi.prefix=PREFIX'\n\ 33905436638acc7c010349a69c3395f1a57c642dc62Ying Wang -l, --no-lines don't generate '#line' directives\n\ 34005436638acc7c010349a69c3395f1a57c642dc62Ying Wang -k, --token-table include a table of token names\n\ 341cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project"), stdout); 342cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project putc ('\n', stdout); 343cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 34405436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Keep -d and --defines separate so that ../build-aux/cross-options.pl 34505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * won't assume that -d also takes an argument. */ 346cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fputs (_("\ 347cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectOutput:\n\ 34805436638acc7c010349a69c3395f1a57c642dc62Ying Wang --defines[=FILE] also produce a header file\n\ 34905436638acc7c010349a69c3395f1a57c642dc62Ying Wang -d likewise but cannot specify FILE (for POSIX Yacc)\n\ 350cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project -r, --report=THINGS also produce details on the automaton\n\ 35105436638acc7c010349a69c3395f1a57c642dc62Ying Wang --report-file=FILE write report to FILE\n\ 352cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project -v, --verbose same as `--report=state'\n\ 353cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project -b, --file-prefix=PREFIX specify a PREFIX for output files\n\ 354cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project -o, --output=FILE leave output to FILE\n\ 35505436638acc7c010349a69c3395f1a57c642dc62Ying Wang -g, --graph[=FILE] also output a graph of the automaton\n\ 35605436638acc7c010349a69c3395f1a57c642dc62Ying Wang -x, --xml[=FILE] also output an XML report of the automaton\n\ 35705436638acc7c010349a69c3395f1a57c642dc62Ying Wang (the XML schema is experimental)\n\ 35805436638acc7c010349a69c3395f1a57c642dc62Ying Wang"), stdout); 35905436638acc7c010349a69c3395f1a57c642dc62Ying Wang putc ('\n', stdout); 36005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 36105436638acc7c010349a69c3395f1a57c642dc62Ying Wang fputs (_("\ 36205436638acc7c010349a69c3395f1a57c642dc62Ying WangWarning categories include:\n\ 36305436638acc7c010349a69c3395f1a57c642dc62Ying Wang `midrule-values' unset or unused midrule values\n\ 36405436638acc7c010349a69c3395f1a57c642dc62Ying Wang `yacc' incompatibilities with POSIX Yacc\n\ 36505436638acc7c010349a69c3395f1a57c642dc62Ying Wang `conflicts-sr' S/R conflicts (enabled by default)\n\ 36605436638acc7c010349a69c3395f1a57c642dc62Ying Wang `conflicts-rr' R/R conflicts (enabled by default)\n\ 36705436638acc7c010349a69c3395f1a57c642dc62Ying Wang `deprecated' obsolete constructs\n\ 36805436638acc7c010349a69c3395f1a57c642dc62Ying Wang `other' all other warnings (enabled by default)\n\ 36905436638acc7c010349a69c3395f1a57c642dc62Ying Wang `all' all the warnings\n\ 37005436638acc7c010349a69c3395f1a57c642dc62Ying Wang `no-CATEGORY' turn off warnings in CATEGORY\n\ 37105436638acc7c010349a69c3395f1a57c642dc62Ying Wang `none' turn off all the warnings\n\ 37205436638acc7c010349a69c3395f1a57c642dc62Ying Wang `error' treat warnings as errors\n\ 373cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project"), stdout); 374cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project putc ('\n', stdout); 375cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 376cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fputs (_("\ 377cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectTHINGS is a list of comma separated words that can include:\n\ 378cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project `state' describe the states\n\ 379cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project `itemset' complete the core item sets with their closure\n\ 38005436638acc7c010349a69c3395f1a57c642dc62Ying Wang `lookahead' explicitly associate lookahead tokens to items\n\ 381cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project `solved' describe shift/reduce conflicts solving\n\ 382cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project `all' include all the above information\n\ 383cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project `none' disable the report\n\ 384cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project"), stdout); 385cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project putc ('\n', stdout); 386cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 387cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fputs (_("\ 38805436638acc7c010349a69c3395f1a57c642dc62Ying WangFEATURE is a list of comma separated words that can include:\n\ 38905436638acc7c010349a69c3395f1a57c642dc62Ying Wang `caret' show errors with carets\n\ 39005436638acc7c010349a69c3395f1a57c642dc62Ying Wang `all' all of the above\n\ 39105436638acc7c010349a69c3395f1a57c642dc62Ying Wang `none' disable all of the above\n\ 39205436638acc7c010349a69c3395f1a57c642dc62Ying Wang "), stdout); 39305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 39405436638acc7c010349a69c3395f1a57c642dc62Ying Wang putc ('\n', stdout); 39505436638acc7c010349a69c3395f1a57c642dc62Ying Wang printf (_("Report bugs to <%s>.\n"), PACKAGE_BUGREPORT); 39605436638acc7c010349a69c3395f1a57c642dc62Ying Wang printf (_("%s home page: <%s>.\n"), PACKAGE_NAME, PACKAGE_URL); 39705436638acc7c010349a69c3395f1a57c642dc62Ying Wang fputs (_("General help using GNU software: " 39805436638acc7c010349a69c3395f1a57c642dc62Ying Wang "<http://www.gnu.org/gethelp/>.\n"), 39905436638acc7c010349a69c3395f1a57c642dc62Ying Wang stdout); 40005436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Don't output this redundant message for English locales. 40105436638acc7c010349a69c3395f1a57c642dc62Ying Wang Note we still output for 'C' so that it gets included in the 40205436638acc7c010349a69c3395f1a57c642dc62Ying Wang man page. */ 40305436638acc7c010349a69c3395f1a57c642dc62Ying Wang const char *lc_messages = setlocale (LC_MESSAGES, NULL); 40405436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (lc_messages && strcmp (lc_messages, "en_")) 40505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* TRANSLATORS: Replace LANG_CODE in this URL with your language 40605436638acc7c010349a69c3395f1a57c642dc62Ying Wang code <http://translationproject.org/team/LANG_CODE.html> to 40705436638acc7c010349a69c3395f1a57c642dc62Ying Wang form one of the URLs at http://translationproject.org/team/. 40805436638acc7c010349a69c3395f1a57c642dc62Ying Wang Otherwise, replace the entire URL with your translation team's 40905436638acc7c010349a69c3395f1a57c642dc62Ying Wang email address. */ 41005436638acc7c010349a69c3395f1a57c642dc62Ying Wang fputs (_("Report translation bugs to " 41105436638acc7c010349a69c3395f1a57c642dc62Ying Wang "<http://translationproject.org/team/>.\n"), stdout); 41205436638acc7c010349a69c3395f1a57c642dc62Ying Wang fputs (_("For complete documentation, run: info bison.\n"), stdout); 413cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project } 414cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 415cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project exit (status); 416cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 417cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 418cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 419cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*------------------------------. 420cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| Display the version message. | 421cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`------------------------------*/ 422cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 423cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 424cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectversion (void) 425cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 426cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Some efforts were made to ease the translators' task, please 427cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project continue. */ 428cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project printf (_("bison (GNU Bison) %s"), VERSION); 429cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project putc ('\n', stdout); 430cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fputs (_("Written by Robert Corbett and Richard Stallman.\n"), stdout); 431cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project putc ('\n', stdout); 432cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 433cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fprintf (stdout, 43405436638acc7c010349a69c3395f1a57c642dc62Ying Wang _("Copyright (C) %d Free Software Foundation, Inc.\n"), 43505436638acc7c010349a69c3395f1a57c642dc62Ying Wang PACKAGE_COPYRIGHT_YEAR); 436cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 437cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fputs (_("\ 438cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectThis is free software; see the source for copying conditions. There is NO\n\ 439cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ 440cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project"), 441cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project stdout); 442cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 443cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 444cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 44505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/*-------------------------------------. 44605436638acc7c010349a69c3395f1a57c642dc62Ying Wang| --skeleton and --language handling. | 44705436638acc7c010349a69c3395f1a57c642dc62Ying Wang`--------------------------------------*/ 44805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 44905436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid 45005436638acc7c010349a69c3395f1a57c642dc62Ying Wangskeleton_arg (char const *arg, int prio, location loc) 45105436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 45205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (prio < skeleton_prio) 45305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 45405436638acc7c010349a69c3395f1a57c642dc62Ying Wang skeleton_prio = prio; 45505436638acc7c010349a69c3395f1a57c642dc62Ying Wang skeleton = arg; 45605436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 45705436638acc7c010349a69c3395f1a57c642dc62Ying Wang else if (prio == skeleton_prio) 45805436638acc7c010349a69c3395f1a57c642dc62Ying Wang complain_at (loc, _("multiple skeleton declarations are invalid")); 45905436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 46005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 46105436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid 46205436638acc7c010349a69c3395f1a57c642dc62Ying Wanglanguage_argmatch (char const *arg, int prio, location loc) 46305436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 46405436638acc7c010349a69c3395f1a57c642dc62Ying Wang char const *msg; 46505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 46605436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (prio < language_prio) 46705436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 46805436638acc7c010349a69c3395f1a57c642dc62Ying Wang int i; 46905436638acc7c010349a69c3395f1a57c642dc62Ying Wang for (i = 0; valid_languages[i].language[0]; i++) 47005436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (c_strcasecmp (arg, valid_languages[i].language) == 0) 47105436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 47205436638acc7c010349a69c3395f1a57c642dc62Ying Wang language_prio = prio; 47305436638acc7c010349a69c3395f1a57c642dc62Ying Wang language = &valid_languages[i]; 47405436638acc7c010349a69c3395f1a57c642dc62Ying Wang return; 47505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 47605436638acc7c010349a69c3395f1a57c642dc62Ying Wang msg = _("%s: invalid language"); 47705436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 47805436638acc7c010349a69c3395f1a57c642dc62Ying Wang else if (language_prio == prio) 47905436638acc7c010349a69c3395f1a57c642dc62Ying Wang msg = _("multiple language declarations are invalid"); 48005436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 48105436638acc7c010349a69c3395f1a57c642dc62Ying Wang return; 48205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 48305436638acc7c010349a69c3395f1a57c642dc62Ying Wang complain_at (loc, msg, quotearg_colon (arg)); 48405436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 48505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 486cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*----------------------. 487cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| Process the options. | 488cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`----------------------*/ 489cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 49005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Shorts options. 49105436638acc7c010349a69c3395f1a57c642dc62Ying Wang Should be computed from long_options. */ 49205436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic char const short_options[] = 49305436638acc7c010349a69c3395f1a57c642dc62Ying Wang "D:" 49405436638acc7c010349a69c3395f1a57c642dc62Ying Wang "F:" 49505436638acc7c010349a69c3395f1a57c642dc62Ying Wang "L:" 49605436638acc7c010349a69c3395f1a57c642dc62Ying Wang "S:" 49705436638acc7c010349a69c3395f1a57c642dc62Ying Wang "T::" 49805436638acc7c010349a69c3395f1a57c642dc62Ying Wang "V" 49905436638acc7c010349a69c3395f1a57c642dc62Ying Wang "W::" 50005436638acc7c010349a69c3395f1a57c642dc62Ying Wang "b:" 50105436638acc7c010349a69c3395f1a57c642dc62Ying Wang "d" 50205436638acc7c010349a69c3395f1a57c642dc62Ying Wang "f::" 50305436638acc7c010349a69c3395f1a57c642dc62Ying Wang "e" 50405436638acc7c010349a69c3395f1a57c642dc62Ying Wang "g::" 50505436638acc7c010349a69c3395f1a57c642dc62Ying Wang "h" 50605436638acc7c010349a69c3395f1a57c642dc62Ying Wang "k" 50705436638acc7c010349a69c3395f1a57c642dc62Ying Wang "l" 50805436638acc7c010349a69c3395f1a57c642dc62Ying Wang "n" 50905436638acc7c010349a69c3395f1a57c642dc62Ying Wang "o:" 51005436638acc7c010349a69c3395f1a57c642dc62Ying Wang "p:" 51105436638acc7c010349a69c3395f1a57c642dc62Ying Wang "r:" 51205436638acc7c010349a69c3395f1a57c642dc62Ying Wang "t" 51305436638acc7c010349a69c3395f1a57c642dc62Ying Wang "v" 51405436638acc7c010349a69c3395f1a57c642dc62Ying Wang "x::" 51505436638acc7c010349a69c3395f1a57c642dc62Ying Wang "y" 51605436638acc7c010349a69c3395f1a57c642dc62Ying Wang ; 517cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 518cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Values for long options that do not have single-letter equivalents. */ 519cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectenum 520cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 521cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project LOCATIONS_OPTION = CHAR_MAX + 1, 52205436638acc7c010349a69c3395f1a57c642dc62Ying Wang PRINT_LOCALEDIR_OPTION, 52305436638acc7c010349a69c3395f1a57c642dc62Ying Wang PRINT_DATADIR_OPTION, 52405436638acc7c010349a69c3395f1a57c642dc62Ying Wang REPORT_FILE_OPTION 525cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}; 526cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 527cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic struct option const long_options[] = 528cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 529cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Operation modes. */ 53005436638acc7c010349a69c3395f1a57c642dc62Ying Wang { "help", no_argument, 0, 'h' }, 53105436638acc7c010349a69c3395f1a57c642dc62Ying Wang { "version", no_argument, 0, 'V' }, 53205436638acc7c010349a69c3395f1a57c642dc62Ying Wang { "print-localedir", no_argument, 0, PRINT_LOCALEDIR_OPTION }, 53305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { "print-datadir", no_argument, 0, PRINT_DATADIR_OPTION }, 53405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { "warnings", optional_argument, 0, 'W' }, 535cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 536cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Parser. */ 537cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { "name-prefix", required_argument, 0, 'p' }, 538cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { "include", required_argument, 0, 'I' }, 539cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 540cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Output. */ 541cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { "file-prefix", required_argument, 0, 'b' }, 542cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { "output", required_argument, 0, 'o' }, 543cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { "output-file", required_argument, 0, 'o' }, 544cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { "graph", optional_argument, 0, 'g' }, 54505436638acc7c010349a69c3395f1a57c642dc62Ying Wang { "xml", optional_argument, 0, 'x' }, 546cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { "report", required_argument, 0, 'r' }, 54705436638acc7c010349a69c3395f1a57c642dc62Ying Wang { "report-file", required_argument, 0, REPORT_FILE_OPTION }, 548cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { "verbose", no_argument, 0, 'v' }, 549cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 550cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Hidden. */ 551cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { "trace", optional_argument, 0, 'T' }, 552cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 553cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Output. */ 554cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { "defines", optional_argument, 0, 'd' }, 55505436638acc7c010349a69c3395f1a57c642dc62Ying Wang { "feature", optional_argument, 0, 'f' }, 556cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 557cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Operation modes. */ 558cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { "fixed-output-files", no_argument, 0, 'y' }, 559cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { "yacc", no_argument, 0, 'y' }, 560cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 561cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Parser. */ 562cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { "debug", no_argument, 0, 't' }, 56305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { "define", required_argument, 0, 'D' }, 56405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { "force-define", required_argument, 0, 'F' }, 565cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { "locations", no_argument, 0, LOCATIONS_OPTION }, 566cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { "no-lines", no_argument, 0, 'l' }, 567cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { "raw", no_argument, 0, 0 }, 568cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { "skeleton", required_argument, 0, 'S' }, 56905436638acc7c010349a69c3395f1a57c642dc62Ying Wang { "language", required_argument, 0, 'L' }, 570cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { "token-table", no_argument, 0, 'k' }, 571cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 572cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project {0, 0, 0, 0} 573cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}; 574cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 575cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Under DOS, there is no difference on the case. This can be 576cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project troublesome when looking for `.tab' etc. */ 577cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifdef MSDOS 578cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define AS_FILE_NAME(File) (strlwr (File), (File)) 579cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#else 580cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define AS_FILE_NAME(File) (File) 581cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif 582cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 58305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Build a location for the current command line argument. */ 58405436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic 58505436638acc7c010349a69c3395f1a57c642dc62Ying Wanglocation 58605436638acc7c010349a69c3395f1a57c642dc62Ying Wangcommand_line_location (void) 58705436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 58805436638acc7c010349a69c3395f1a57c642dc62Ying Wang location res; 58905436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* "<command line>" is used in GCC's messages about -D. */ 59005436638acc7c010349a69c3395f1a57c642dc62Ying Wang boundary_set (&res.start, uniqstr_new ("<command line>"), optind - 1, -1); 59105436638acc7c010349a69c3395f1a57c642dc62Ying Wang res.end = res.start; 59205436638acc7c010349a69c3395f1a57c642dc62Ying Wang return res; 59305436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 59405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 59505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 596cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid 597cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectgetargs (int argc, char *argv[]) 598cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 599cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project int c; 600cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 601cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project while ((c = getopt_long (argc, argv, short_options, long_options, NULL)) 602cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project != -1) 603cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project switch (c) 604cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 60505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* ASCII Sorting for short options (i.e., upper case then 60605436638acc7c010349a69c3395f1a57c642dc62Ying Wang lower case), and then long-only options. */ 60705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 608cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project case 0: 609cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Certain long options cause getopt_long to return 0. */ 610cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 611cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 61205436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 'D': /* -DNAME[=VALUE]. */ 61305436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 'F': /* -FNAME[=VALUE]. */ 61405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 61505436638acc7c010349a69c3395f1a57c642dc62Ying Wang char* name = optarg; 61605436638acc7c010349a69c3395f1a57c642dc62Ying Wang char* value = mbschr (optarg, '='); 61705436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (value) 61805436638acc7c010349a69c3395f1a57c642dc62Ying Wang *value++ = 0; 61905436638acc7c010349a69c3395f1a57c642dc62Ying Wang muscle_percent_define_insert (name, command_line_location (), 62005436638acc7c010349a69c3395f1a57c642dc62Ying Wang value ? value : "", 62105436638acc7c010349a69c3395f1a57c642dc62Ying Wang c == 'D' ? MUSCLE_PERCENT_DEFINE_D 62205436638acc7c010349a69c3395f1a57c642dc62Ying Wang : MUSCLE_PERCENT_DEFINE_F); 62305436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 624cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 625cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 62605436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 'I': 62705436638acc7c010349a69c3395f1a57c642dc62Ying Wang include = AS_FILE_NAME (optarg); 62805436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 62905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 63005436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 'L': 63105436638acc7c010349a69c3395f1a57c642dc62Ying Wang language_argmatch (optarg, command_line_prio, 63205436638acc7c010349a69c3395f1a57c642dc62Ying Wang command_line_location ()); 63305436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 63405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 63505436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 'S': 63605436638acc7c010349a69c3395f1a57c642dc62Ying Wang skeleton_arg (AS_FILE_NAME (optarg), command_line_prio, 63705436638acc7c010349a69c3395f1a57c642dc62Ying Wang command_line_location ()); 63805436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 63905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 64005436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 'T': 64105436638acc7c010349a69c3395f1a57c642dc62Ying Wang FLAGS_ARGMATCH (trace, optarg); 64205436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 643cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 644cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project case 'V': 645cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project version (); 646cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project exit (EXIT_SUCCESS); 647cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 64805436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 'f': 64905436638acc7c010349a69c3395f1a57c642dc62Ying Wang FLAGS_ARGMATCH (feature, optarg); 65005436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 651cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 65205436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 'W': 65305436638acc7c010349a69c3395f1a57c642dc62Ying Wang FLAGS_ARGMATCH (warnings, optarg); 654cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 655cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 65605436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 'b': 65705436638acc7c010349a69c3395f1a57c642dc62Ying Wang spec_file_prefix = AS_FILE_NAME (optarg); 658cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 659cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 66005436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 'd': 66105436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Here, the -d and --defines options are differentiated. */ 66205436638acc7c010349a69c3395f1a57c642dc62Ying Wang defines_flag = true; 66305436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (optarg) 66405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 66505436638acc7c010349a69c3395f1a57c642dc62Ying Wang free (spec_defines_file); 66605436638acc7c010349a69c3395f1a57c642dc62Ying Wang spec_defines_file = xstrdup (AS_FILE_NAME (optarg)); 66705436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 66805436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 669cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 67005436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 'g': 67105436638acc7c010349a69c3395f1a57c642dc62Ying Wang graph_flag = true; 67205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (optarg) 67305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 67405436638acc7c010349a69c3395f1a57c642dc62Ying Wang free (spec_graph_file); 67505436638acc7c010349a69c3395f1a57c642dc62Ying Wang spec_graph_file = xstrdup (AS_FILE_NAME (optarg)); 67605436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 677cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 678cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 67905436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 'h': 68005436638acc7c010349a69c3395f1a57c642dc62Ying Wang usage (EXIT_SUCCESS); 68105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 68205436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 'k': 68305436638acc7c010349a69c3395f1a57c642dc62Ying Wang token_table_flag = true; 684cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 685cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 686cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project case 'l': 687cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project no_lines_flag = true; 688cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 689cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 69005436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 'o': 69105436638acc7c010349a69c3395f1a57c642dc62Ying Wang spec_outfile = AS_FILE_NAME (optarg); 692cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 693cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 69405436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 'p': 69505436638acc7c010349a69c3395f1a57c642dc62Ying Wang spec_name_prefix = optarg; 696cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 697cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 69805436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 'r': 69905436638acc7c010349a69c3395f1a57c642dc62Ying Wang FLAGS_ARGMATCH (report, optarg); 700cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 701cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 702cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project case 't': 70305436638acc7c010349a69c3395f1a57c642dc62Ying Wang debug = true; 704cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 705cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 70605436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 'v': 70705436638acc7c010349a69c3395f1a57c642dc62Ying Wang report_flag |= report_states; 708cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 709cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 71005436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 'x': 71105436638acc7c010349a69c3395f1a57c642dc62Ying Wang xml_flag = true; 71205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (optarg) 71305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 71405436638acc7c010349a69c3395f1a57c642dc62Ying Wang free (spec_xml_file); 71505436638acc7c010349a69c3395f1a57c642dc62Ying Wang spec_xml_file = xstrdup (AS_FILE_NAME (optarg)); 71605436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 717cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 718cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 71905436638acc7c010349a69c3395f1a57c642dc62Ying Wang case 'y': 72005436638acc7c010349a69c3395f1a57c642dc62Ying Wang yacc_flag = true; 721cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 722cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 72305436638acc7c010349a69c3395f1a57c642dc62Ying Wang case LOCATIONS_OPTION: 72405436638acc7c010349a69c3395f1a57c642dc62Ying Wang locations_flag = true; 725cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 726cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 72705436638acc7c010349a69c3395f1a57c642dc62Ying Wang case PRINT_LOCALEDIR_OPTION: 72805436638acc7c010349a69c3395f1a57c642dc62Ying Wang printf ("%s\n", LOCALEDIR); 72905436638acc7c010349a69c3395f1a57c642dc62Ying Wang exit (EXIT_SUCCESS); 73005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 73105436638acc7c010349a69c3395f1a57c642dc62Ying Wang case PRINT_DATADIR_OPTION: 73205436638acc7c010349a69c3395f1a57c642dc62Ying Wang printf ("%s\n", compute_pkgdatadir ()); 73305436638acc7c010349a69c3395f1a57c642dc62Ying Wang exit (EXIT_SUCCESS); 73405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 73505436638acc7c010349a69c3395f1a57c642dc62Ying Wang case REPORT_FILE_OPTION: 73605436638acc7c010349a69c3395f1a57c642dc62Ying Wang free (spec_verbose_file); 73705436638acc7c010349a69c3395f1a57c642dc62Ying Wang spec_verbose_file = xstrdup (AS_FILE_NAME (optarg)); 738cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 739cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 740cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project default: 741cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project usage (EXIT_FAILURE); 742cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project } 743cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 744cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (argc - optind != 1) 745cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 746cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (argc - optind < 1) 74705436638acc7c010349a69c3395f1a57c642dc62Ying Wang error (0, 0, _("%s: missing operand"), quotearg_colon (argv[argc - 1])); 748cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project else 74905436638acc7c010349a69c3395f1a57c642dc62Ying Wang error (0, 0, _("extra operand %s"), quote (argv[optind + 1])); 750cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project usage (EXIT_FAILURE); 751cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project } 752cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 753cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project current_file = grammar_file = uniqstr_new (argv[optind]); 75405436638acc7c010349a69c3395f1a57c642dc62Ying Wang MUSCLE_INSERT_C_STRING ("file_name", grammar_file); 75505436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 75605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 75705436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid 75805436638acc7c010349a69c3395f1a57c642dc62Ying Wangtr (char *s, char from, char to) 75905436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 76005436638acc7c010349a69c3395f1a57c642dc62Ying Wang for (; *s; s++) 76105436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (*s == from) 76205436638acc7c010349a69c3395f1a57c642dc62Ying Wang *s = to; 763cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 764