]>
git.saurik.com Git - bison.git/blob - src/main.c
   1 /* Top level entry point of bison, 
   2    Copyright 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" 
  39 #include "conflicts.h" 
  40 #include "print_graph.h" 
  41 #include "muscle_tab.h" 
  43 /* The name this program was run with, for messages.  */ 
  47 /*--------------------------. 
  48 | Tracking space and time.  | 
  49 `--------------------------*/ 
  52 stage (const char *title
) 
  54 #if HAVE_MALLINFO && HAVE_STRUCT_MALLINFO & HAVE_TIMES & HAVE_STRUCT_TMS 
  55   if (trace_flag 
& trace_resource
) 
  57       struct mallinfo minfo 
= mallinfo (); 
  60       fprintf (stderr
, "STAGE: %30s: %9d (%9d): %ldu %lds\n", 
  62                minfo
.uordblks
, minfo
.arena
, 
  63                tinfo
.tms_utime
, tinfo
.tms_stime
); 
  70 main (int argc
, char *argv
[]) 
  72   program_name 
= argv
[0]; 
  73   setlocale (LC_ALL
, ""); 
  74   bindtextdomain (PACKAGE
, LOCALEDIR
); 
  79   if (trace_flag 
& trace_bitsets
) 
  80     bitset_stats_enable (); 
  84   stage ("initialized muscles"); 
  86   /* Read the input.  Copy some parts of it to FGUARD, FACTION, FTABLE 
  87      and FATTRS.  In file reader.c.  The other parts are recorded in 
  88      the grammar; see gram.h.  */ 
  93   if (complain_message_count
) 
  96   /* Find useless nonterminals and productions and reduce the grammar. */ 
  99   stage ("reduced grammar"); 
 101   /* Record other info about the grammar.  In files derives and 
 106   /* Convert to nondeterministic finite state machine.  In file LR0. 
 107      See state.h for more info.  */ 
 110   stage ("generated states"); 
 111   /* make it deterministic.  In file lalr.  */ 
 115   /* Find and record any conflicts: places where one token of 
 116      lookahead is not enough to disambiguate the parsing.  In file 
 117      conflicts.  Also resolve s/r conflicts based on precedence 
 122   stage ("solved conflicts"); 
 123   /* Output file names. */ 
 124   compute_output_file_names (); 
 126   /* Output the detailed report on the grammar.  */ 
 130   stage ("printed results"); 
 131   /* Stop if there were errors, to avoid trashing previous output 
 133   if (complain_message_count
) 
 136   /* Output the VCG graph.  */ 
 140   /* Output the tables and the parser to ftable.  In file output.  */ 
 142   stage ("made output"); 
 145   stage ("freed states"); 
 147   stage ("freed reduce"); 
 149   stage ("freed conflicts"); 
 151   stage ("freed nullable"); 
 153   stage ("freed derives"); 
 155   stage ("freed grammar"); 
 157   /* The scanner memory cannot be released right after parsing, as it 
 158      contains things such as user actions, prologue, epilogue etc.  */ 
 160   stage ("freed scanner"); 
 162   stage ("freed muscles"); 
 163   /* If using alloca.c, flush the alloca'ed memory for the benefit of 
 164      people running Bison as a library in IDEs.  */ 
 169   if (trace_flag 
& trace_bitsets
) 
 170     bitset_stats_dump (stderr
); 
 172   return complain_message_count 
? EXIT_FAILURE 
: EXIT_SUCCESS
;