1 /* Top level entry point of bison, 
   2    Copyright (C) 1984, 1986, 1989, 1992, 1995, 2000, 2001, 2002 
   3    Free Software Foundation, Inc. 
   5    This file is part of Bison, the GNU Compiler Compiler. 
   7    Bison is free software; you can redistribute it and/or modify 
   8    it under the terms of the GNU General Public License as published by 
   9    the Free Software Foundation; either version 2, or (at your option) 
  12    Bison is distributed in the hope that it will be useful, 
  13    but WITHOUT ANY WARRANTY; without even the implied warranty of 
  14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  15    GNU General Public License for more details. 
  17    You should have received a copy of the GNU General Public License 
  18    along with Bison; see the file COPYING.  If not, write to 
  19    the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 
  20    Boston, MA 02111-1307, USA.  */ 
  24 #include "bitset_stats.h" 
  40 #include "conflicts.h" 
  41 #include "print_graph.h" 
  42 #include "muscle_tab.h" 
  44 /* The name this program was run with, for messages.  */ 
  50 main (int argc
, char *argv
[]) 
  52   program_name 
= argv
[0]; 
  53   setlocale (LC_ALL
, ""); 
  54   (void) bindtextdomain (PACKAGE
, LOCALEDIR
); 
  55   (void) textdomain (PACKAGE
); 
  59   time_report 
= trace_flag 
& trace_time
; 
  61   timevar_start (TV_TOTAL
); 
  63   if (trace_flag 
& trace_bitsets
) 
  64     bitset_stats_enable (); 
  68   /* Read the input.  Copy some parts of it to FGUARD, FACTION, FTABLE 
  69      and FATTRS.  In file reader.c.  The other parts are recorded in 
  70      the grammar; see gram.h.  */ 
  72   timevar_push (TV_READER
); 
  74   timevar_pop (TV_READER
); 
  79   /* Find useless nonterminals and productions and reduce the grammar. */ 
  80   timevar_push (TV_REDUCE
); 
  82   timevar_pop (TV_REDUCE
); 
  84   /* Record other info about the grammar.  In files derives and 
  86   timevar_push (TV_SETS
); 
  89   timevar_pop (TV_SETS
); 
  91   /* Convert to nondeterministic finite state machine.  In file LR0. 
  92      See state.h for more info.  */ 
  93   timevar_push (TV_LR0
); 
  97   /* make it deterministic.  In file lalr.  */ 
  98   timevar_push (TV_LALR
); 
 100   timevar_pop (TV_LALR
); 
 102   /* Find and record any conflicts: places where one token of 
 103      lookahead is not enough to disambiguate the parsing.  In file 
 104      conflicts.  Also resolve s/r conflicts based on precedence 
 106   timevar_push (TV_CONFLICTS
); 
 109   timevar_pop (TV_CONFLICTS
); 
 111   /* Compute the parser tables.  */ 
 112   timevar_push (TV_ACTIONS
); 
 114   timevar_pop (TV_ACTIONS
); 
 116   grammar_rules_never_reduced_report
 
 117     (_("rule never reduced because of conflicts")); 
 119   /* Output file names. */ 
 120   compute_output_file_names (); 
 122   /* Output the detailed report on the grammar.  */ 
 125       timevar_push (TV_REPORT
); 
 127       timevar_pop (TV_REPORT
); 
 130   /* Output the VCG graph.  */ 
 133       timevar_push (TV_GRAPH
); 
 135       timevar_pop (TV_GRAPH
); 
 138   /* Stop if there were errors, to avoid trashing previous output 
 140   if (complaint_issued
) 
 143   /* Lookaheads are no longer needed. */ 
 144   timevar_push (TV_FREE
); 
 146   timevar_pop (TV_FREE
); 
 148   /* Output the tables and the parser to ftable.  In file output.  */ 
 149   timevar_push (TV_PARSER
); 
 151   timevar_pop (TV_PARSER
); 
 153   timevar_push (TV_FREE
); 
 162   /* The scanner memory cannot be released right after parsing, as it 
 163      contains things such as user actions, prologue, epilogue etc.  */ 
 166   /* If using alloca.c, flush the alloca'ed memory for the benefit of 
 167      people running Bison as a library in IDEs.  */ 
 171   timevar_pop (TV_FREE
); 
 173   if (trace_flag 
& trace_bitsets
) 
 174     bitset_stats_dump (stderr
); 
 178   /* Stop timing and print the times.  */ 
 179   timevar_stop (TV_TOTAL
); 
 180   timevar_print (stderr
); 
 182   return complaint_issued 
? EXIT_FAILURE 
: EXIT_SUCCESS
;