1 /* Top level entry point of Bison. 
   3    Copyright (C) 1984, 1986, 1989, 1992, 1995, 2000, 2001, 2002 
   4    Free Software Foundation, Inc. 
   6    This file is part of Bison, the GNU Compiler Compiler. 
   8    Bison is free software; you can redistribute it and/or modify 
   9    it under the terms of the GNU General Public License as published by 
  10    the Free Software Foundation; either version 2, or (at your option) 
  13    Bison is distributed in the hope that it will be useful, 
  14    but WITHOUT ANY WARRANTY; without even the implied warranty of 
  15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  16    GNU General Public License for more details. 
  18    You should have received a copy of the GNU General Public License 
  19    along with Bison; see the file COPYING.  If not, write to 
  20    the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 
  21    Boston, MA 02111-1307, USA.  */ 
  26 #include <bitset_stats.h> 
  32 #include "conflicts.h" 
  38 #include "muscle_tab.h" 
  42 #include "print_graph.h" 
  49 /* The name this program was run with, for messages.  */ 
  55 main (int argc
, char *argv
[]) 
  57   program_name 
= argv
[0]; 
  58   setlocale (LC_ALL
, ""); 
  59   (void) bindtextdomain (PACKAGE
, LOCALEDIR
); 
  60   (void) textdomain (PACKAGE
); 
  66   timevar_report 
= trace_flag 
& trace_time
; 
  68   timevar_start (TV_TOTAL
); 
  70   if (trace_flag 
& trace_bitsets
) 
  71     bitset_stats_enable (); 
  75   /* Read the input.  Copy some parts of it to FGUARD, FACTION, FTABLE 
  76      and FATTRS.  In file reader.c.  The other parts are recorded in 
  77      the grammar; see gram.h.  */ 
  79   timevar_push (TV_READER
); 
  81   timevar_pop (TV_READER
); 
  86   /* Find useless nonterminals and productions and reduce the grammar. */ 
  87   timevar_push (TV_REDUCE
); 
  89   timevar_pop (TV_REDUCE
); 
  91   /* Record other info about the grammar.  In files derives and 
  93   timevar_push (TV_SETS
); 
  96   timevar_pop (TV_SETS
); 
  98   /* Convert to nondeterministic finite state machine.  In file LR0. 
  99      See state.h for more info.  */ 
 100   timevar_push (TV_LR0
); 
 102   timevar_pop (TV_LR0
); 
 104   /* make it deterministic.  In file lalr.  */ 
 105   timevar_push (TV_LALR
); 
 107   timevar_pop (TV_LALR
); 
 109   /* Find and record any conflicts: places where one token of 
 110      lookahead is not enough to disambiguate the parsing.  In file 
 111      conflicts.  Also resolve s/r conflicts based on precedence 
 113   timevar_push (TV_CONFLICTS
); 
 116   timevar_pop (TV_CONFLICTS
); 
 118   /* Compute the parser tables.  */ 
 119   timevar_push (TV_ACTIONS
); 
 121   timevar_pop (TV_ACTIONS
); 
 123   grammar_rules_never_reduced_report
 
 124     (_("rule never reduced because of conflicts")); 
 126   /* Output file names. */ 
 127   compute_output_file_names (); 
 129   /* Output the detailed report on the grammar.  */ 
 132       timevar_push (TV_REPORT
); 
 134       timevar_pop (TV_REPORT
); 
 137   /* Output the VCG graph.  */ 
 140       timevar_push (TV_GRAPH
); 
 142       timevar_pop (TV_GRAPH
); 
 145   /* Stop if there were errors, to avoid trashing previous output 
 147   if (complaint_issued
) 
 150   /* Lookaheads are no longer needed. */ 
 151   timevar_push (TV_FREE
); 
 153   timevar_pop (TV_FREE
); 
 155   /* Output the tables and the parser to ftable.  In file output.  */ 
 156   timevar_push (TV_PARSER
); 
 158   timevar_pop (TV_PARSER
); 
 160   timevar_push (TV_FREE
); 
 169   /* The scanner memory cannot be released right after parsing, as it 
 170      contains things such as user actions, prologue, epilogue etc.  */ 
 174   /* If using alloca.c, flush the alloca'ed memory for the benefit of 
 175      people running Bison as a library in IDEs.  */ 
 178     extern void *alloca (size_t); 
 182   timevar_pop (TV_FREE
); 
 184   if (trace_flag 
& trace_bitsets
) 
 185     bitset_stats_dump (stderr
); 
 189   /* Stop timing and print the times.  */ 
 190   timevar_stop (TV_TOTAL
); 
 191   timevar_print (stderr
); 
 193   return complaint_issued 
? EXIT_FAILURE 
: EXIT_SUCCESS
;