]> git.saurik.com Git - bison.git/commitdiff
* data/bison.simple, data/bison.c++: Rename as...
authorAkim Demaille <akim@epita.fr>
Thu, 27 Jun 2002 12:08:20 +0000 (12:08 +0000)
committerAkim Demaille <akim@epita.fr>
Thu, 27 Jun 2002 12:08:20 +0000 (12:08 +0000)
* data/yacc.c, data/lalr1.cc: these.
* doc/bison.texinfo (Environment Variables): Remove.

ChangeLog
data/Makefile.am
data/bison.c++ [deleted file]
data/bison.simple [deleted file]
data/lalr1.cc [new file with mode: 0644]
data/yacc.c [new file with mode: 0644]
doc/bison.texinfo
src/output.c

index fe51f376fa96a02fde9699d0783e13cf19d08144..f38f8b9dc32ba3e161215db9502c853c549c0e6e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2002-06-27  Akim Demaille  <akim@epita.fr>
+
+       * data/bison.simple, data/bison.c++: Rename as...
+       * data/yacc.c, data/lalr1.cc: these.
+       * doc/bison.texinfo (Environment Variables): Remove.
+
 2002-06-25  Raja R Harinath  <harinath@cs.umn.edu>
 
        * src/getargs.c (report_argmatch): Initialize strtok().
index 57d89ac398e183025734c102576aef8357cc1736..605d5918ea8c57c354d7a538626d4f959c2ec5f6 100644 (file)
@@ -15,7 +15,7 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
 ## 02111-1307  USA
 
-dist_pkgdata_DATA = bison.simple bison.c++
+dist_pkgdata_DATA = yacc.c lalr1.cc
 
 m4sugardir = $(pkgdatadir)/m4sugar
 dist_m4sugar_DATA = m4sugar/m4sugar.m4 m4sugar/version.m4
diff --git a/data/bison.c++ b/data/bison.c++
deleted file mode 100644 (file)
index d95e793..0000000
+++ /dev/null
@@ -1,932 +0,0 @@
-m4_divert(-1)
-
-# b4_sint_type(MAX)
-# -----------------
-# Return the smallest signed int type able to handle the number MAX.
-m4_define([b4_sint_type],
-[m4_if(m4_eval([$1 <= 127]),        [1], [signed char],
-       m4_eval([$1 <= 32767]),      [1], [signed short],
-       [signed int])])
-
-
-# b4_uint_type(MAX)
-# -----------------
-# Return the smallest unsigned int type able to handle the number MAX.
-m4_define([b4_uint_type],
-[m4_if(m4_eval([$1 <= 255]),        [1], [unsigned char],
-       m4_eval([$1 <= 65535]),      [1], [unsigned short],
-       [unsigned int])])
-
-
-# b4_lhs_value([TYPE])
-# --------------------
-# Expansion of $<TYPE>$.
-m4_define([b4_lhs_value],
-[yyval[]m4_ifval([$1], [.$1])])
-
-
-# b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
-# --------------------------------------
-# Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
-# symbols on RHS.
-m4_define([b4_rhs_value],
-[semantic_stack_@<:@m4_eval([$1 - $2])@:>@m4_ifval([$3], [.$3])])
-
-
-# b4_lhs_location()
-# -----------------
-# Expansion of @$.
-m4_define([b4_lhs_location],
-[yyloc])
-
-
-# b4_rhs_location(RULE-LENGTH, NUM)
-# ---------------------------------
-# Expansion of @NUM, where the current rule has RULE-LENGTH symbols
-# on RHS.
-m4_define([b4_rhs_location],
-[location_stack_@<:@m4_eval([$1 - $2])@:>@])
-
-
-# b4_token_define(TOKEN-NAME, TOKEN-NUMBER)
-# -----------------------------------------
-# Output the definition of this token as #define.
-m4_define([b4_token_define],
-[#define $1 $2
-])
-
-
-# b4_token_defines(LIST-OF-PAIRS-TOKEN-NAME-TOKEN-NUMBER)
-# -------------------------------------------------------
-# Output the definition of the tokens as #define.
-m4_define([b4_token_defines],
-[m4_map([b4_token_define], [$@])])
-
-m4_define_default([b4_input_suffix], [.y])
-
-m4_define_default([b4_output_parser_suffix],
-[m4_translit(b4_input_suffix, [yY], [cC])])
-
-m4_define_default([b4_output_parser_name],
-[b4_output_prefix[]b4_output_infix[]b4_output_parser_suffix[]])
-
-
-m4_define_default([b4_output_header_suffix],
-[m4_translit(b4_input_suffix, [yY], [hH])])
-
-m4_define_default([b4_output_header_name],
-[b4_output_prefix[]b4_output_infix[]b4_output_header_suffix[]])
-
-m4_define_default([b4_header_guard],
-                  [m4_bpatsubst(m4_toupper([BISON_]b4_output_header_name),
-                                [[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]], [_])])
-
-m4_define([b4_inherit],
-          [m4_ifdef([b4_root],
-                   [: public b4_root
-],
-                   [])])
-
-m4_define([b4_param],
-         [m4_ifdef([b4_root],
-                   [,
-            const Param& param],
-                   [])])
-
-m4_define([b4_constructor],
-         [m4_ifdef([b4_root],
-                   [b4_root (param),
-      ],
-                   [])])
-
-m4_define([b4_copyright],
-          [/* -*- C++ -*- */
-/* A Bison parser, made from b4_filename,
-   by GNU bison b4_version.  */
-
-/* Skeleton output parser for bison,
-   Copyright 2002 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */])
-
-m4_divert(0)dnl
-#output "b4_output_header_name"
-b4_copyright
-#ifndef b4_header_guard
-# define b4_header_guard
-
-#include "stack.hh"
-#include "location.hh"
-
-#include <string>
-#include <iostream>
-
-/* Using locations.  */
-#define YYLSP_NEEDED b4_locations_flag
-
-/* Copy the first part of user declarations.  */
-b4_pre_prologue
-
-/* Line __line__ of __file__.  */
-#line __oline__ "__ofile__"
-
-/* Tokens.  */
-b4_token_defines(b4_tokens)
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG b4_debug
-#endif
-
-/* Enabling verbose error message.  */
-#ifndef YYERROR_VERBOSE
-# define YYERROR_VERBOSE b4_error_verbose
-#endif
-
-#ifndef YYSTYPE
-m4_ifdef([b4_stype],
-[#line b4_stype_line "b4_filename"
-typedef union b4_stype yystype;
-/* Line __line__ of __file__.  */
-#line __oline__ "__ofile__"],
-[typedef int yystype;])
-# define YYSTYPE yystype
-#endif
-
-/* Copy the second part of user declarations.  */
-b4_post_prologue
-
-/* Line __line__ of __file__.  */
-#line __oline__  "__ofile__"
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N) \
-   Current.last_line = Rhs[[N]].last_line; \
-   Current.last_column = Rhs[[N]].last_column;
-#endif
-
-m4_if(b4_locations_flag, [0], [],
-[#ifndef YYLTYPE
-typedef struct yyltype
-{
-  int first_line;
-  int first_column;
-  int last_line;
-  int last_column;
-} yyltype;
-# define YYLTYPE yyltype
-#endif])
-
-namespace yy
-{
-  class b4_name;
-
-  template < typename P >
-  struct Traits
-  {
-  };
-
-  template < >
-  struct Traits< b4_name >
-  {
-    typedef b4_uint_type(b4_translate_max) TokenNumberType;
-    typedef b4_sint_type(b4_rhs_max)       RhsNumberType;
-    typedef int      StateType;
-    typedef yystype  SemanticType;
-    typedef b4_ltype LocationType;
-  };
-}
-
-namespace yy
-{
-  class b4_name b4_inherit
-  {
-  public:
-
-    typedef Traits< b4_name >::TokenNumberType TokenNumberType;
-    typedef Traits< b4_name >::RhsNumberType   RhsNumberType;
-    typedef Traits< b4_name >::StateType       StateType;
-    typedef Traits< b4_name >::SemanticType    SemanticType;
-    typedef Traits< b4_name >::LocationType    LocationType;
-
-    typedef Stack< StateType >    StateStack;
-    typedef Stack< SemanticType > SemanticStack;
-    typedef Stack< LocationType > LocationStack;
-
-#if YYLSP_NEEDED
-    b4_name (bool debug,
-           LocationType initlocation[]b4_param) :
-      b4_constructor[]debug_ (debug),
-      cdebug_ (std::cerr),
-      initlocation_ (initlocation)
-#else
-    b4_name (bool debug[]b4_param) :
-      b4_constructor[]debug_ (debug),
-      cdebug_ (std::cerr)
-#endif
-    {
-    }
-
-    virtual ~b4_name ()
-    {
-    }
-
-    virtual int parse ();
-
-  private:
-
-    virtual void lex_ ();
-    virtual void error_ ();
-    virtual void print_ ();
-
-    /* Stacks.  */
-    StateStack    state_stack_;
-    SemanticStack semantic_stack_;
-    LocationStack location_stack_;
-
-    /* Tables.  */
-    static const short pact_[[]];
-    static const short defact_[[]];
-    static const short pgoto_[[]];
-    static const short defgoto_[[]];
-    static const short table_[[]];
-    static const short check_[[]];
-    static const b4_uint_type(b4_r1_max) r1_[[]];
-    static const b4_uint_type(b4_r2_max) r2_[[]];
-
-#if YYDEBUG || YYERROR_VERBOSE
-    static const char* const name_[[]];
-#endif
-
-    /* More tables, for debugging.  */
-#if YYDEBUG
-    static const RhsNumberType rhs_[[]];
-    static const b4_uint_type(b4_prhs_max) prhs_[[]];
-    static const b4_uint_type(b4_rline_max) rline_[[]];
-    static const b4_uint_type(b4_stos_max) stos_[[]];
-    static const short token_number_[[]];
-#endif
-
-    /* Even more tables.  */
-    static inline TokenNumberType translate_ (int token);
-
-    /* Constants.  */
-    static const int eof_;
-    static const int last_;
-    static const int flag_;
-    static const int nnts_;
-    static const int nsym_;
-    static const int empty_;
-    static const int final_;
-    static const int terror_;
-    static const int errcode_;
-    static const int ntokens_;
-    static const int initdepth_;
-    static const unsigned user_token_number_max_;
-    static const TokenNumberType undef_token_;
-
-    /* State.  */
-    int n_;
-    int len_;
-    int state_;
-
-    /* Debugging.  */
-    int debug_;
-    std::ostream &cdebug_;
-
-    /* Lookahead and lookahead in internal form.  */
-    int looka_;
-    int ilooka_;
-
-    /* Message.  */
-    std::string message;
-
-    /* Semantic value and location of lookahead token.  */
-    SemanticType value;
-    LocationType location;
-
-    /* @$ and $$.  */
-    SemanticType yyval;
-    LocationType yyloc;
-
-    /* Initial location.  */
-    LocationType initlocation_;
-  };
-}
-
-#endif /* not b4_header_guard */
-
-#output "b4_output_prefix[]b4_output_infix[].cc"
-b4_copyright
-
-#include "b4_output_header_name"
-
-/* Enable debugging if requested.  */
-#if YYDEBUG
-# define YYCDEBUG    if (debug_) cdebug_
-#else /* !YYDEBUG */
-# define YYCDEBUG    if (0) cdebug_
-#endif /* !YYDEBUG */
-
-int
-yy::b4_name::parse ()
-{
-  int nerrs = 0;
-  int errstatus = 0;
-
-  /* Initialize stack.  */
-  state_stack_ = StateStack (0);
-  semantic_stack_ = SemanticStack (1);
-  location_stack_ = LocationStack (1);
-
-  /* Start.  */
-  state_ = 0;
-  looka_ = empty_;
-#if YYLSP_NEEDED
-  location = initlocation_;
-#endif
-  YYCDEBUG << "Starting parse" << std::endl;
-
-  /* New state.  */
- yynewstate:
-  state_stack_.push (state_);
-  YYCDEBUG << "Entering state " << state_ << std::endl;
-  goto yybackup;
-
-  /* Backup.  */
- yybackup:
-
-  /* Try to take a decision without lookahead.  */
-  n_ = pact_[[state_]];
-  if (n_ == flag_)
-    goto yydefault;
-
-  /* Read a lookahead token.  */
-  if (looka_ == empty_)
-    {
-      YYCDEBUG << "Reading a token: ";
-      lex_ ();
-    }
-
-  /* Convert token to internal form.  */
-  if (looka_ <= 0)
-    {
-      looka_ = eof_;
-      ilooka_ = 0;
-      YYCDEBUG << "Now at end of input." << std::endl;
-    }
-  else
-    {
-      ilooka_ = translate_ (looka_);
-#if YYDEBUG
-      if (debug_)
-       {
-         YYCDEBUG << "Next token is " << looka_
-                << " (" << name_[[ilooka_]];
-         print_ ();
-         YYCDEBUG << ')' << std::endl;
-       }
-#endif
-    }
-
-  n_ += ilooka_;
-  if (n_ < 0 || n_ > last_ || check_[[n_]] != ilooka_)
-    goto yydefault;
-
-  /* Reduce or error.  */
-  n_ = table_[[n_]];
-  if (n_ < 0)
-    {
-      if (n_ == flag_)
-       goto yyerrlab;
-      else
-       {
-         n_ = -n_;
-         goto yyreduce;
-       }
-    }
-  else if (n_ == 0)
-    goto yyerrlab;
-
-  /* Accept?  */
-  if (n_ == final_)
-    goto yyacceptlab;
-
-  /* Shift the lookahead token.  */
-  YYCDEBUG << "Shifting token " << looka_
-        << " (" << name_[[ilooka_]] << "), ";
-
-  /* Discard the token being shifted unless it is eof.  */
-  if (looka_ != eof_)
-    looka_ = empty_;
-
-  semantic_stack_.push (value);
-  location_stack_.push (location);
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (errstatus)
-    --errstatus;
-
-  state_ = n_;
-  goto yynewstate;
-
-  /* Default action.  */
- yydefault:
-  n_ = defact_[[state_]];
-  if (n_ == 0)
-    goto yyerrlab;
-  goto yyreduce;
-
-  /* Reduce.  */
- yyreduce:
-  len_ = r2_[[n_]];
-  if (len_)
-    {
-      yyval = semantic_stack_[[len_ - 1]];
-      yyloc = location_stack_[[len_ - 1]];
-    }
-  else
-    {
-      yyval = semantic_stack_[[0]];
-      yyloc = location_stack_[[0]];
-    }
-
-#if YYDEBUG
-  if (debug_)
-    {
-      YYCDEBUG << "Reducing via rule " << n_ - 1
-            << " (line " << rline_[[n_]] << "), ";
-      for (b4_uint_type(b4_prhs_max) i = prhs_[[n_]];
-          rhs_[[i]] >= 0; ++i)
-       YYCDEBUG << name_[[rhs_[i]]] << ' ';
-      YYCDEBUG << "-> " << name_[[r1_[n_]]] << std::endl;
-    }
-#endif
-
-  if (len_)
-    {
-      Slice< LocationType, LocationStack > slice (location_stack_, len_);
-      YYLLOC_DEFAULT (yyloc, slice, len_);
-    }
-
-  switch (n_)
-    {
-      b4_actions
-    }
-
-/* Line __line__ of __file__.  */
-#line __oline__ "__ofile__"
-
-  state_stack_.pop (len_);
-  semantic_stack_.pop (len_);
-  location_stack_.pop (len_);
-
-#if YYDEBUG
-  if (debug_)
-    {
-      YYCDEBUG << "state stack now";
-      for (StateStack::ConstIterator i = state_stack_.begin ();
-          i != state_stack_.end (); ++i)
-       YYCDEBUG << ' ' << *i;
-      YYCDEBUG << std::endl;
-    }
-#endif
-
-  semantic_stack_.push (yyval);
-  location_stack_.push (yyloc);
-
-  /* Shift the result of the reduction.  */
-  n_ = r1_[[n_]];
-  state_ = pgoto_[[n_ - ntokens_]] + state_stack_[[0]];
-  if (state_ >= 0 && state_ <= last_ && check_[[state_]] == state_stack_[[0]])
-    state_ = table_[[state_]];
-  else
-    state_ = defgoto_[[n_ - ntokens_]];
-  goto yynewstate;
-
-  /* Report and recover from errors.  This is very incomplete.  */
- yyerrlab:
-  /* If not already recovering from an error, report this error.  */
-  if (!errstatus)
-    {
-      ++nerrs;
-
-#if YYERROR_VERBOSE
-      n_ = pact_[[state_]];
-      if (n_ > flag_ && n_ < last_)
-       {
-         message = "parse error, unexpected ";
-         message += name_[[ilooka_]];
-         {
-           int count = 0;
-           for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
-             if (check_[[x + n_]] == x)
-               ++count;
-           if (count < 5)
-             {
-               count = 0;
-               for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
-                 if (check_[[x + n_]] == x)
-                   {
-                     message += (!count++) ? ", expecting " : " or ";
-                     message += name_[[x]];
-                   }
-             }
-         }
-       }
-      else
-#endif
-       message = "parse error";
-      error_ ();
-    }
-  goto yyerrlab1;
-
-  /* Error raised explicitly by an action.  */
- yyerrlab1:
-  if (errstatus == 3)
-    {
-      /* If just tried and failed to reuse lookahead token after an
-        error, discard it.  */
-
-      /* Return failure if at end of input.  */
-      if (looka_ == eof_)
-       goto yyabortlab;
-      YYCDEBUG << "Discarding token " << looka_
-            << " (" << name_[[ilooka_]] << ")." << std::endl;
-      looka_ = empty_;
-    }
-
-  /* Else will try to reuse lookahead token after shifting the error
-     token.  */
-
-  errstatus = 3;
-
-  for (;;)
-    {
-      n_ = pact_[[state_]];
-      if (n_ != flag_)
-       {
-         n_ += terror_;
-         if (0 <= n_ && n_ <= last_ && check_[[n_]] == terror_)
-           {
-             n_ = table_[[n_]];
-             if (0 < n_)
-               break;
-           }
-       }
-
-      /* Pop the current state because it cannot handle the error token.  */
-      if (!state_stack_.height ())
-       goto yyabortlab;
-
-#if YYDEBUG
-      if (debug_)
-       {
-         if (stos_[[state_]] < ntokens_)
-           {
-             YYCDEBUG << "Error: popping token "
-                    << token_number_[[stos_[state_]]]
-                    << " (" << name_[[stos_[state_]]];
-# ifdef YYPRINT
-             YYPRINT (stderr, token_number_[[stos_[state_]]],
-                      semantic_stack_.top ());
-# endif
-             YYCDEBUG << ')' << std::endl;
-           }
-         else
-           {
-             YYCDEBUG << "Error: popping nonterminal ("
-                    << name_[[stos_[state_]]] << ')' << std::endl;
-           }
-       }
-#endif
-
-      state_ = (state_stack_.pop (), state_stack_[[0]]);
-      semantic_stack_.pop ();
-      location_stack_.pop ();;
-
-#if YYDEBUG
-      if (debug_)
-       {
-         YYCDEBUG << "Error: state stack now";
-         for (StateStack::ConstIterator i = state_stack_.begin ();
-              i != state_stack_.end (); ++i)
-           YYCDEBUG << ' ' << *i;
-         YYCDEBUG << std::endl;
-       }
-#endif
-    }
-
-  if (n_ == final_)
-    goto yyacceptlab;
-
-  YYCDEBUG << "Shifting error token, ";
-
-  semantic_stack_.push (value);
-  location_stack_.push (location);
-
-  state_ = n_;
-  goto yynewstate;
-
-  /* Accept.  */
- yyacceptlab:
-  return 0;
-
-  /* Abort.  */
- yyabortlab:
-  return 1;
-}
-
-void
-yy::b4_name::lex_ ()
-{
-#if YYLSP_NEEDED
-  looka_ = yylex (&value, &location);
-#else
-  looka_ = yylex (&value);
-#endif
-}
-
-/* YYPACT[[STATE-NUM]] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-const short
-yy::b4_name::pact_[[]] =
-{
-  b4_pact
-};
-
-/* YYDEFACT[[S]] -- default rule to reduce with in state S when YYTABLE
-   doesn't specify something else to do.  Zero means the default is an
-   error.  */
-const short
-yy::b4_name::defact_[[]] =
-{
-  b4_defact
-};
-
-/* YYPGOTO[[NTERM-NUM]].  */
-const short
-yy::b4_name::pgoto_[[]] =
-{
-  b4_pgoto
-};
-
-/* YYDEFGOTO[[NTERM-NUM]].  */
-const short
-yy::b4_name::defgoto_[[]] =
-{
-  b4_defgoto
-};
-
-/* YYTABLE[[YYPACT[STATE-NUM]]].  What to do in state STATE-NUM.  If
-   positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If zero, do what YYDEFACT says.  */
-const short
-yy::b4_name::table_[[]] =
-{
-  b4_table
-};
-
-/* YYCHECK.  */
-const short
-yy::b4_name::check_[[]] =
-{
-  b4_check
-};
-
-#if YYDEBUG
-/* STOS_[[STATE-NUM]] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-const b4_uint_type(b4_stos_max)
-yy::b4_name::stos_[[]] =
-{
-  b4_stos
-};
-
-/* TOKEN_NUMBER_[[YYLEX-NUM]] -- Internal token number corresponding
-   to YYLEX-NUM.  */
-const short
-yy::b4_name::token_number_[[]] =
-{
-  b4_toknum
-};
-#endif
-
-/* YYR1[[YYN]] -- Symbol number of symbol that rule YYN derives.  */
-const b4_uint_type(b4_r1_max)
-yy::b4_name::r1_[[]] =
-{
-  b4_r1
-};
-
-/* YYR2[[YYN]] -- Number of symbols composing right hand side of rule YYN.  */
-const b4_uint_type(b4_r2_max)
-yy::b4_name::r2_[[]] =
-{
-  b4_r2
-};
-
-#if YYDEBUG || YYERROR_VERBOSE
-/* YYTNAME[[SYMBOL-NUM]] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
-const char*
-const yy::b4_name::name_[[]] =
-{
-  b4_tname
-};
-#endif
-
-#if YYDEBUG
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-const yy::b4_name::RhsNumberType
-yy::b4_name::rhs_[[]] =
-{
-  b4_rhs
-};
-
-/* YYPRHS[[YYN]] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-const b4_uint_type(b4_prhs_max)
-yy::b4_name::prhs_[[]] =
-{
-  b4_prhs
-};
-
-/* YYRLINE[[YYN]] -- source line where rule number YYN was defined.  */
-const b4_uint_type(b4_rline_max)
-yy::b4_name::rline_[[]] =
-{
-  b4_rline
-};
-#endif
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-yy::b4_name::TokenNumberType
-yy::b4_name::translate_ (int token)
-{
-  static
-  const TokenNumberType
-  translate_[[]] =
-  {
-    b4_translate
-  };
-  if ((unsigned) token <= user_token_number_max_)
-    return translate_[[token]];
-  else
-    return undef_token_;
-}
-
-const int yy::b4_name::eof_ = 0;
-const int yy::b4_name::last_ = b4_last;
-const int yy::b4_name::flag_ = b4_flag;
-const int yy::b4_name::nnts_ = b4_nnts;
-const int yy::b4_name::nsym_ = b4_nsym;
-const int yy::b4_name::empty_ = -2;
-const int yy::b4_name::final_ = b4_final;
-const int yy::b4_name::terror_ = 1;
-const int yy::b4_name::errcode_ = 256;
-const int yy::b4_name::ntokens_ = b4_ntokens;
-const int yy::b4_name::initdepth_ = b4_initdepth;
-
-const unsigned yy::b4_name::user_token_number_max_ = b4_user_token_number_max;
-const yy::b4_name::TokenNumberType yy::b4_name::undef_token_ = b4_undef_token_number;
-
-b4_epilogue
-
-#output "stack.hh"
-b4_copyright
-
-#ifndef BISON_STACK_HH
-# define BISON_STACK_HH
-
-#include <deque>
-
-namespace yy
-{
-  template < class T, class S = std::deque< T > >
-  class Stack
-  {
-  public:
-
-    typedef typename S::iterator Iterator;
-    typedef typename S::const_iterator ConstIterator;
-
-    Stack () : seq_ ()
-    {
-    }
-
-    Stack (unsigned n) : seq_ (n)
-    {
-    }
-
-    inline
-    T&
-    operator [[]] (unsigned index)
-    {
-      return seq_[[index]];
-    }
-
-    inline
-    const T&
-    operator [[]] (unsigned index) const
-    {
-      return seq_[[index]];
-    }
-
-    inline
-    void
-    push (const T& t)
-    {
-      seq_.push_front (t);
-    }
-
-    inline
-    void
-    pop (unsigned n = 1)
-    {
-      for (; n; --n)
-       seq_.pop_front ();
-    }
-
-    inline
-    unsigned
-    height () const
-    {
-      return seq_.size ();
-    }
-
-    inline ConstIterator begin () const { return seq_.begin (); }
-    inline ConstIterator end () const { return seq_.end (); }
-
-  private:
-
-    S seq_;
-  };
-
-  template < class T, class S = Stack< T > >
-  class Slice
-  {
-  public:
-
-    Slice (const S& stack,
-          unsigned range) : stack_ (stack),
-                            range_ (range)
-    {
-    }
-
-    inline
-    const T&
-    operator [[]] (unsigned index) const
-    {
-      return stack_[[range_ - index]];
-    }
-
-  private:
-
-    const S& stack_;
-    unsigned range_;
-  };
-}
-
-#endif // not BISON_STACK_HH
-
-#output "location.hh"
-b4_copyright
-
-#ifndef BISON_LOCATION_HH
-# define BISON_LOCATION_HH
-
-namespace yy
-{
-  struct Position
-  {
-    int line;
-    int column;
-  };
-
-  struct Location
-  {
-    Position first;
-    Position last;
-  };
-}
-
-#endif // not BISON_LOCATION_HH
diff --git a/data/bison.simple b/data/bison.simple
deleted file mode 100644 (file)
index 5a4091e..0000000
+++ /dev/null
@@ -1,1325 +0,0 @@
-m4_divert(-1)                                                       -*- C -*-
-
-# b4_sint_type(MAX)
-# -----------------
-# Return the smallest signed int type able to handle the number MAX.
-m4_define([b4_sint_type],
-[m4_if(m4_eval([$1 <= 127]),        [1], [signed char],
-       m4_eval([$1 <= 32767]),      [1], [signed short],
-       [signed int])])
-
-
-# b4_uint_type(MAX)
-# -----------------
-# Return the smallest unsigned int type able to handle the number MAX.
-m4_define([b4_uint_type],
-[m4_if(m4_eval([$1 <= 255]),        [1], [unsigned char],
-       m4_eval([$1 <= 65535]),      [1], [unsigned short],
-       [unsigned int])])
-
-
-# b4_lhs_value([TYPE])
-# --------------------
-# Expansion of $<TYPE>$.
-m4_define([b4_lhs_value],
-[yyval[]m4_ifval([$1], [.$1])])
-
-
-# b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
-# --------------------------------------
-# Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
-# symbols on RHS.
-m4_define([b4_rhs_value],
-[yyvsp@<:@m4_eval([$2 - $1])@:>@m4_ifval([$3], [.$3])])
-
-
-
-## ----------- ##
-## Locations.  ##
-## ----------- ##
-
-# b4_location_if(IF-TRUE, IF-FALSE)
-# ---------------------------------
-# Expand IF-TRUE, if locations are used, IF-FALSE otherwise.
-m4_define([b4_location_if],
-[m4_if(b4_locations_flag, [1],
-       [$1],
-       [$2])])
-
-
-# b4_lhs_location()
-# -----------------
-# Expansion of @$.
-m4_define([b4_lhs_location],
-[yyloc])
-
-
-# b4_rhs_location(RULE-LENGTH, NUM)
-# ---------------------------------
-# Expansion of @NUM, where the current rule has RULE-LENGTH symbols
-# on RHS.
-m4_define([b4_rhs_location],
-[yylsp@<:@m4_eval([$2 - $1])@:>@])
-
-
-
-## -------------- ##
-## %pure-parser.  ##
-## -------------- ##
-
-# b4_pure_if(IF-TRUE, IF-FALSE)
-# -----------------------------
-# Expand IF-TRUE, if %pure-parser, IF-FALSE otherwise.
-m4_define([b4_pure_if],
-[m4_if(b4_pure, [1],
-       [$1],
-       [$2])])
-
-
-## ------------------- ##
-## Output file names.  ##
-## ------------------- ##
-
-m4_define_default([b4_input_suffix], [.y])
-
-m4_define_default([b4_output_parser_suffix],
-[m4_translit(b4_input_suffix, [yY], [cC])])
-
-m4_define_default([b4_output_parser_name],
-[b4_output_prefix[]b4_output_infix[]b4_output_parser_suffix[]])
-
-
-m4_define_default([b4_output_header_suffix],
-[m4_translit(b4_input_suffix, [yY], [hH])])
-
-m4_define_default([b4_output_header_name],
-[b4_output_prefix[]b4_output_infix[]b4_output_header_suffix[]])
-
-m4_define_default([b4_header_guard],
-                  [m4_bpatsubst(m4_toupper([BISON_]b4_output_header_name),
-                                [[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]], [_])])
-
-
-## ------------------------- ##
-## Assigning token numbers.  ##
-## ------------------------- ##
-
-# b4_token_define(TOKEN-NAME, TOKEN-NUMBER)
-# -----------------------------------------
-# Output the definition of this token as #define.
-m4_define([b4_token_define],
-[#define $1 $2
-])
-
-
-# b4_token_enum(TOKEN-NAME, TOKEN-NUMBER)
-# ---------------------------------------
-# Output the definition of this token as an enum.
-m4_define([b4_token_enum],
-[$1 = $2])
-
-
-# b4_token_defines(LIST-OF-PAIRS-TOKEN-NAME-TOKEN-NUMBER)
-# -------------------------------------------------------
-# Output the definition of the tokens (if there are) as enums and #define.
-m4_define([b4_token_defines],
-[m4_if([$@], [[]], [],
-[/* Tokens.  */
-#ifndef YYTOKENTYPE
-# if defined (__STDC__) || defined (__cplusplus)
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-m4_map_sep([     b4_token_enum], [,
-],
-           [$@])
-   };
-# endif
-  /* POSIX requires `int' for tokens in interfaces.  */
-# define YYTOKENTYPE int
-#endif /* !YYTOKENTYPE */
-m4_map([b4_token_define], [$@])
-])
-])
-
-
-## --------------------------------------------------------- ##
-## Defining symbol actions, e.g., printers and destructors.  ##
-## --------------------------------------------------------- ##
-
-# b4_symbol_actions(FILENAME, LINENO,
-#                   SYMBOL-TAG, SYMBOL-NUM,
-#                   SYMBOL-ACTION, SYMBOL-TYPENAME)
-# -------------------------------------------------
-m4_define([b4_symbol_actions],
-[m4_pushdef([b4_dollar_dollar], [yyvalue.$6])dnl
-m4_pushdef([b4_at_dollar], [yylocation])dnl
-      case $4: /* $3 */
-#line $2 "$1"
-        $5;
-#line __oline__ "__ofile__"
-        break;
-m4_popdef([b4_at_dollar])dnl
-m4_popdef([b4_dollar_dollar])dnl
-])
-
-
-
-m4_divert(0)dnl
-#output "b4_output_parser_name"
-/* A Bison parser, made from b4_filename
-   by GNU bison b4_version.  */
-
-/* Skeleton output parser for Bison,
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software
-   Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
-
-/* This is the parser code that is written into each bison parser when
-   the %semantic_parser declaration is not specified in the grammar.
-   It was written by Richard Stallman by simplifying the original so
-   called ``semantic'' parser.  */
-
-/* All symbols defined below should begin with yy or YY, to avoid
-   infringing on user name space.  This should be done even for local
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-/* Identify Bison output.  */
-#define YYBISON        1
-
-/* Pure parsers.  */
-#define YYPURE b4_pure
-
-/* Using locations.  */
-#define YYLSP_NEEDED b4_locations_flag
-
-m4_if(b4_prefix[], [yy], [],
-[/* If NAME_PREFIX is specified substitute the variables and functions
-   names.  */
-#define yyparse b4_prefix[]parse
-#define yylex   b4_prefix[]lex
-#define yyerror b4_prefix[]error
-#define yylval  b4_prefix[]lval
-#define yychar  b4_prefix[]char
-#define yydebug b4_prefix[]debug
-#define yynerrs b4_prefix[]nerrs
-b4_location_if([#define yylloc b4_prefix[]lloc])])
-
-/* Copy the first part of user declarations.  */
-b4_pre_prologue
-
-b4_token_defines(b4_tokens)
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG b4_debug
-#endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE b4_error_verbose
-#endif
-
-#ifndef YYSTYPE
-m4_ifdef([b4_stype],
-[#line b4_stype_line "b4_filename"
-typedef union b4_stype yystype;
-/* Line __line__ of __file__.  */
-#line __oline__ "__ofile__"],
-[typedef int yystype;])
-# define YYSTYPE yystype
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-
-#ifndef YYLTYPE
-typedef struct yyltype
-{
-  int first_line;
-  int first_column;
-  int last_line;
-  int last_column;
-} yyltype;
-# define YYLTYPE b4_ltype
-# define YYLTYPE_IS_TRIVIAL 1
-#endif
-
-/* Copy the second part of user declarations.  */
-b4_post_prologue
-
-/* Line __line__ of __file__.  */
-#line __oline__ "__ofile__"
-
-#if ! defined (yyoverflow) || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# if YYSTACK_USE_ALLOCA
-#  define YYSTACK_ALLOC alloca
-# else
-#  ifndef YYSTACK_USE_ALLOCA
-#   if defined (alloca) || defined (_ALLOCA_H)
-#    define YYSTACK_ALLOC alloca
-#   else
-#    ifdef __GNUC__
-#     define YYSTACK_ALLOC __builtin_alloca
-#    endif
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning. */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
-# else
-#  if defined (__STDC__) || defined (__cplusplus)
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   define YYSIZE_T size_t
-#  endif
-#  define YYSTACK_ALLOC malloc
-#  define YYSTACK_FREE free
-# endif
-#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
-
-
-#if (! defined (yyoverflow) \
-     && (! defined (__cplusplus) \
-        || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  short yyss;
-  YYSTYPE yyvs;
-  b4_location_if([  YYLTYPE yyls;
-])dnl
-};
-
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-b4_location_if(
-[# define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE))     \
-      + 2 * YYSTACK_GAP_MAX)],
-[# define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (short) + sizeof (YYSTYPE))                                \
-      + YYSTACK_GAP_MAX)])
-
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)             \
-      do                                       \
-       {                                       \
-         register YYSIZE_T yyi;                \
-         for (yyi = 0; yyi < (Count); yyi++)   \
-           (To)[[yyi]] = (From)[[yyi]];        \
-       }                                       \
-      while (0)
-#  endif
-# endif
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack)                                       \
-    do                                                                 \
-      {                                                                        \
-       YYSIZE_T yynewbytes;                                            \
-       YYCOPY (&yyptr->Stack, Stack, yysize);                          \
-       Stack = &yyptr->Stack;                                          \
-       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX;   \
-       yyptr += yynewbytes / sizeof (*yyptr);                          \
-      }                                                                        \
-    while (0)
-
-#endif
-
-/* YYFINAL -- State number of the termination state. */
-#define YYFINAL  b4_final
-#define YYFLAG  b4_flag
-#define YYLAST   b4_last
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS  b4_ntokens
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS  b4_nnts
-/* YYNRULES -- Number of rules. */
-#define YYNRULES  b4_nrules
-/* YYNRULES -- Number of states. */
-#define YYNSTATES  b4_nstates
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYUNDEFTOK  b4_undef_token_number
-#define YYMAXUTOK   b4_user_token_number_max
-
-#define YYTRANSLATE(X) \
-  ((unsigned)(X) <= YYMAXUTOK ? yytranslate[[X]] : YYUNDEFTOK)
-
-/* YYTRANSLATE[[YYLEX]] -- Bison symbol number corresponding to YYLEX.  */
-static const b4_uint_type(b4_translate_max) yytranslate[[]] =
-{
-  b4_translate
-};
-
-#if YYDEBUG
-/* YYPRHS[[YYN]] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const b4_uint_type(b4_prhs_max) yyprhs[[]] =
-{
-  b4_prhs
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const b4_sint_type(b4_rhs_max) yyrhs[[]] =
-{
-  b4_rhs
-};
-
-/* YYRLINE[[YYN]] -- source line where rule number YYN was defined.  */
-static const b4_uint_type(b4_rline_max) yyrline[[]] =
-{
-  b4_rline
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE
-/* YYTNME[[SYMBOL-NUM]] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
-static const char *const yytname[[]] =
-{
-  b4_tname
-};
-#endif
-
-/* YYTOKNUM[[YYLEX-NUM]] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
-static const short yytoknum[[]] =
-{
-  b4_toknum
-};
-
-/* YYR1[[YYN]] -- Symbol number of symbol that rule YYN derives.  */
-static const b4_uint_type(b4_r1_max) yyr1[[]] =
-{
-  b4_r1
-};
-
-/* YYR2[[YYN]] -- Number of symbols composing right hand side of rule YYN.  */
-static const b4_uint_type(b4_r2_max) yyr2[[]] =
-{
-  b4_r2
-};
-
-/* YYDEFACT[[STATE-NAME]] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
-   means the default is an error.  */
-static const short yydefact[[]] =
-{
-  b4_defact
-};
-
-/* YYPGOTO[[NTERM-NUM]]. */
-static const short yydefgoto[[]] =
-{
-  b4_defgoto
-};
-
-/* YYPACT[[STATE-NUM]] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-static const short yypact[[]] =
-{
-  b4_pact
-};
-
-/* YYPGOTO[[NTERM-NUM]].  */
-static const short yypgoto[[]] =
-{
-  b4_pgoto
-};
-
-/* YYTABLE[[YYPACT[STATE-NUM]]].  What to do in state STATE-NUM.  If
-   positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If zero, do what YYDEFACT says.  */
-static const short yytable[[]] =
-{
-  b4_table
-};
-
-static const short yycheck[[]] =
-{
-  b4_check
-};
-
-/* YYSTOS[[STATE-NUM]] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const b4_uint_type(b4_stos_max) yystos[[]] =
-{
-  b4_stos
-};
-
-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
-# define YYSIZE_T __SIZE_TYPE__
-#endif
-#if ! defined (YYSIZE_T) && defined (size_t)
-# define YYSIZE_T size_t
-#endif
-#if ! defined (YYSIZE_T)
-# if defined (__STDC__) || defined (__cplusplus)
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# endif
-#endif
-#if ! defined (YYSIZE_T)
-# define YYSIZE_T unsigned int
-#endif
-
-#define yyerrok                (yyerrstatus = 0)
-#define yyclearin      (yychar = YYEMPTY)
-#define YYEMPTY                -2
-#define YYEOF          0
-
-#define YYACCEPT       goto yyacceptlab
-#define YYABORT                goto yyabortlab
-#define YYERROR                goto yyerrlab1
-
-/* Like YYERROR except do call yyerror.  This remains here temporarily
-   to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
-
-#define YYFAIL         goto yyerrlab
-
-#define YYRECOVERING()  (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value)                                 \
-do                                                             \
-  if (yychar == YYEMPTY && yylen == 1)                         \
-    {                                                          \
-      yychar = (Token);                                                \
-      yylval = (Value);                                                \
-      yychar1 = YYTRANSLATE (yychar);                          \
-      YYPOPSTACK;                                              \
-      goto yybackup;                                           \
-    }                                                          \
-  else                                                         \
-    {                                                          \
-      yyerror ("syntax error: cannot back up");                        \
-      YYERROR;                                                 \
-    }                                                          \
-while (0)
-
-#define YYTERROR       1
-#define YYERRCODE      256
-
-/* YYLLOC_DEFAULT -- Compute the default location (before the actions
-   are run).  */
-
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)           \
-  Current.first_line   = Rhs[[1]].first_line;      \
-  Current.first_column = Rhs[[1]].first_column;    \
-  Current.last_line    = Rhs[[N]].last_line;       \
-  Current.last_column  = Rhs[[N]].last_column;
-#endif
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-
-b4_pure_if(
-[#ifdef YYLEX_PARAM
-# define YYLEX yylex (&yylval[]b4_location_if([, &yylloc]), YYLEX_PARAM)
-#else
-# define YYLEX yylex (&yylval[]b4_location_if([, &yylloc]))
-#endif],
-[#define YYLEX yylex ()])
-
-/* Enable debugging if requested.  */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args)                       \
-do {                                           \
-  if (yydebug)                                 \
-    YYFPRINTF Args;                            \
-} while (0)
-# define YYDSYMPRINT(Args)                     \
-do {                                           \
-  if (yydebug)                                 \
-    yysymprint Args;                           \
-} while (0)
-/* Nonzero means print parse trace.  It is left uninitialized so that
-   multiple parsers can coexist.  */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YYDSYMPRINT(Args)
-#endif /* !YYDEBUG */
-
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef        YYINITDEPTH
-# define YYINITDEPTH b4_initdepth
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-   if the built-in stack extension method is used).
-
-   Do not make this value too large; the results are undefined if
-   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
-   evaluated with infinite-precision integer arithmetic.  */
-
-#if YYMAXDEPTH == 0
-# undef YYMAXDEPTH
-#endif
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH b4_maxdepth
-#endif
-
-\f
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined (__GLIBC__) && defined (_STRING_H)
-#   define yystrlen strlen
-#  else
-/* Return the length of YYSTR.  */
-static YYSIZE_T
-#   if defined (__STDC__) || defined (__cplusplus)
-yystrlen (const char *yystr)
-#   else
-yystrlen (yystr)
-     const char *yystr;
-#   endif
-{
-  register const char *yys = yystr;
-
-  while (*yys++ != '\0')
-    continue;
-
-  return yys - yystr - 1;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
-#   define yystpcpy stpcpy
-#  else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-   YYDEST.  */
-static char *
-#   if defined (__STDC__) || defined (__cplusplus)
-yystpcpy (char *yydest, const char *yysrc)
-#   else
-yystpcpy (yydest, yysrc)
-     char *yydest;
-     const char *yysrc;
-#   endif
-{
-  register char *yyd = yydest;
-  register const char *yys = yysrc;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-
-#endif /* !YYERROR_VERBOSE */
-
-\f
-
-/* The user can define YYPARSE_PARAM as the name of an argument to be passed
-   into yyparse.  The argument should have type void *.
-   It should actually point to an object.
-   Grammar actions can access the variable by casting it
-   to the proper pointer type.  */
-
-#ifdef YYPARSE_PARAM
-# if defined (__STDC__) || defined (__cplusplus)
-#  define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
-#  define YYPARSE_PARAM_DECL
-# else
-#  define YYPARSE_PARAM_ARG YYPARSE_PARAM
-#  define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
-# endif
-#else /* !YYPARSE_PARAM */
-# define YYPARSE_PARAM_ARG
-# define YYPARSE_PARAM_DECL
-#endif /* !YYPARSE_PARAM */
-
-/* Prevent warning if -Wstrict-prototypes.  */
-#ifdef __GNUC__
-# ifdef YYPARSE_PARAM
-int yyparse (void *);
-# else
-int yyparse (void);
-# endif
-#endif
-
-#if defined (__STDC__) || defined (__cplusplus)
-static void yydestruct (int yytype,
-                       YYSTYPE yyvalue[]b4_location_if([, YYLTYPE yylocation]));
-# if YYDEBUG
-static void yysymprint (FILE* out, int yytype,
-                       YYSTYPE yyvalue[]b4_location_if([, YYLTYPE yylocation]));
-# endif
-#endif
-
-m4_divert_push([KILL])# ======================== M4 code.
-# b4_declare_parser_variables
-# ---------------------------
-# Declare the variables that are global, or local to YYPARSE if
-#  pure-parser
-m4_define([b4_declare_parser_variables],
-[/* The lookahead symbol.  */
-int yychar;
-
-/* The semantic value of the lookahead symbol.  */
-YYSTYPE yylval;
-
-/* Number of parse errors so far.  */
-int yynerrs;b4_location_if([
-/* Location data for the lookahead symbol.  */
-YYLTYPE yylloc;])
-])
-m4_divert_pop([KILL])dnl# ====================== End of M4 code.
-
-b4_pure_if([],
-           [b4_declare_parser_variables])
-
-int
-yyparse (YYPARSE_PARAM_ARG)
-     YYPARSE_PARAM_DECL
-{[
-  ]b4_pure_if([b4_declare_parser_variables])[
-  register int yystate;
-  register int yyn;
-  int yyresult;
-  /* Number of tokens to shift before error messages enabled.  */
-  int yyerrstatus;
-  /* Lookahead token as an internal (translated) token number.  */
-  int yychar1 = 0;
-
-  /* Three stacks and their tools:
-     `yyss': related to states,
-     `yyvs': related to semantic values,
-     `yyls': related to locations.
-
-     Refer to the stacks thru separate pointers, to allow yyoverflow
-     to reallocate them elsewhere.  */
-
-  /* The state stack.  */
-  short        yyssa[YYINITDEPTH];
-  short *yyss = yyssa;
-  register short *yyssp;
-
-  /* The semantic value stack.  */
-  YYSTYPE yyvsa[YYINITDEPTH];
-  YYSTYPE *yyvs = yyvsa;
-  register YYSTYPE *yyvsp;
-
-]b4_location_if(
-[[  /* The location stack.  */
-  YYLTYPE yylsa[YYINITDEPTH];
-  YYLTYPE *yyls = yylsa;
-  YYLTYPE *yylsp;]])[
-
-#define YYPOPSTACK   (yyvsp--, yyssp--]b4_location_if([, yylsp--])[)
-
-  YYSIZE_T yystacksize = YYINITDEPTH;
-
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-]b4_location_if([  YYLTYPE yyloc;])[
-
-  /* When reducing, the number of symbols on the RHS of the reduced
-     rule.  */
-  int yylen;
-
-  YYDPRINTF ((stderr, "Starting parse\n"));
-
-  yystate = 0;
-  yyerrstatus = 0;
-  yynerrs = 0;
-  yychar = YYEMPTY;            /* Cause a token to be read.  */
-
-  /* Initialize stack pointers.
-     Waste one element of value and location stack
-     so that they stay on the same level as the state stack.
-     The wasted elements are never initialized.  */
-
-  yyssp = yyss;
-  yyvsp = yyvs;
-]b4_location_if([  yylsp = yyls;])[
-  goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
-`------------------------------------------------------------*/
- yynewstate:
-  /* In all cases, when you get here, the value and location stacks
-     have just been pushed. so pushing a state here evens the stacks.
-     */
-  yyssp++;
-
- yysetstate:
-  *yyssp = yystate;
-
-  if (yyssp >= yyss + yystacksize - 1)
-    {
-      /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      {
-       /* Give user a chance to reallocate the stack. Use copies of
-          these so that the &'s don't force the real ones into
-          memory.  */
-       YYSTYPE *yyvs1 = yyvs;
-       short *yyss1 = yyss;
-]b4_location_if([      YYLTYPE *yyls1 = yyls;])[
-
-       /* Each stack pointer address is followed by the size of the
-          data in use in that stack, in bytes.  This used to be a
-          conditional around just the two extra args, but that might
-          be undefined if yyoverflow is a macro.  */
-       yyoverflow ("parser stack overflow",
-                   &yyss1, yysize * sizeof (*yyssp),
-                   &yyvs1, yysize * sizeof (*yyvsp),
-]b4_location_if([                  &yyls1, yysize * sizeof (*yylsp),])[
-                   &yystacksize);
-]b4_location_if([      yyls = yyls1;])[
-       yyss = yyss1;
-       yyvs = yyvs1;
-      }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyoverflowlab;
-# else
-      /* Extend the stack our own way.  */
-      if (yystacksize >= YYMAXDEPTH)
-       goto yyoverflowlab;
-      yystacksize *= 2;
-      if (yystacksize > YYMAXDEPTH)
-       yystacksize = YYMAXDEPTH;
-
-      {
-       short *yyss1 = yyss;
-       union yyalloc *yyptr =
-         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-       if (! yyptr)
-         goto yyoverflowlab;
-       YYSTACK_RELOCATE (yyss);
-       YYSTACK_RELOCATE (yyvs);
-]b4_location_if([      YYSTACK_RELOCATE (yyls);])[
-#  undef YYSTACK_RELOCATE
-       if (yyss1 != yyssa)
-         YYSTACK_FREE (yyss1);
-      }
-# endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
-]b4_location_if([      yylsp = yyls + yysize - 1;])[
-
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                 (unsigned long int) yystacksize));
-
-      if (yyssp >= yyss + yystacksize - 1)
-       YYABORT;
-    }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
-  goto yybackup;
-
-/*-----------.
-| yybackup.  |
-`-----------*/
-yybackup:
-
-/* Do appropriate processing given the current state.  */
-/* Read a lookahead token if we need one and don't already have one.  */
-/* yyresume: */
-
-  /* First try to decide what to do without reference to lookahead token.  */
-
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yydefault;
-
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* yychar is either YYEMPTY or YYEOF
-     or a valid token in external form.  */
-
-  if (yychar == YYEMPTY)
-    {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
-    }
-
-  /* Convert token to internal form (in yychar1) for indexing tables with.  */
-
-  if (yychar <= 0)             /* This means end of input.  */
-    {
-      yychar1 = 0;
-      yychar = YYEOF;          /* Don't call YYLEX any more.  */
-
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
-    }
-  else
-    {
-      yychar1 = YYTRANSLATE (yychar);
-
-      /* We have to keep this `#if YYDEBUG', since we use variables
-        which are defined only if `YYDEBUG' is set.  */
-      YYDPRINTF ((stderr, "Next token is "));
-      YYDSYMPRINT ((stderr, yychar1, yylval]b4_location_if([, yyloc])[));
-      YYDPRINTF ((stderr, "\n"));
-    }
-
-  yyn += yychar1;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
-    goto yydefault;
-
-  yyn = yytable[yyn];
-
-  /* yyn is what to do for this token type in this state.
-     Negative => reduce, -yyn is rule number.
-     Positive => shift, yyn is new state.
-       New state is final state => don't bother to shift,
-       just return success.
-     0, or most negative number => error.  */
-
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-       goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrlab;
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  /* Shift the lookahead token.  */
-  YYDPRINTF ((stderr, "Shifting token %d (%s), ",
-             yychar, yytname[yychar1]));
-
-  /* Discard the token being shifted unless it is eof.  */
-  if (yychar != YYEOF)
-    yychar = YYEMPTY;
-
-  *++yyvsp = yylval;
-]b4_location_if([  *++yylsp = yylloc;])[
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state.  |
-`-----------------------------------------------------------*/
-yydefault:
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-  goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction.  |
-`-----------------------------*/
-yyreduce:
-  /* yyn is the number of a rule to reduce with.  */
-  yylen = yyr2[yyn];
-
-  /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
-
-     Otherwise, the following line sets YYVAL to the semantic value of
-     the lookahead token.  This behavior is undocumented and Bison
-     users should not rely upon it.  Assigning to YYVAL
-     unconditionally makes the parser a bit smaller, and it avoids a
-     GCC warning that YYVAL may be used uninitialized.  */
-  yyval = yyvsp[1-yylen];
-
-]b4_location_if(
-[  /* Default location. */
-  YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);])[
-
-#if YYDEBUG
-  /* We have to keep this `#if YYDEBUG', since we use variables which
-     are defined only if `YYDEBUG' is set.  */
-  if (yydebug)
-    {
-      int yyi;
-
-      YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
-                yyn - 1, yyrline[yyn]);
-
-      /* Print the symbols being reduced, and their result.  */
-      for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++)
-       YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
-      YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
-    }
-#endif
-  switch (yyn)
-    ]{
-      b4_actions
-    }
-
-/* Line __line__ of __file__.  */
-#line __oline__ "__ofile__"
-\f
-[  yyvsp -= yylen;
-  yyssp -= yylen;
-]b4_location_if([  yylsp -= yylen;])[
-
-#if YYDEBUG
-  if (yydebug)
-    {
-      short *yyssp1 = yyss - 1;
-      YYFPRINTF (stderr, "state stack now");
-      while (yyssp1 != yyssp)
-       YYFPRINTF (stderr, " %d", *++yyssp1);
-      YYFPRINTF (stderr, "\n");
-    }
-#endif
-
-  *++yyvsp = yyval;
-]b4_location_if([  *++yylsp = yyloc;])[
-
-  /* Now `shift' the result of the reduction.  Determine what state
-     that goes to, based on the state we popped back to and the rule
-     number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
-
-  goto yynewstate;
-
-
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
-yyerrlab:
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
-    {
-      ++yynerrs;
-
-#if YYERROR_VERBOSE
-      yyn = yypact[yystate];
-
-      if (yyn > YYFLAG && yyn < YYLAST)
-       {
-         YYSIZE_T yysize = 0;
-         char *yymsg;
-         int yyx, yycount;
-
-         yycount = 0;
-         /* Start YYX at -YYN if negative to avoid negative indexes in
-            YYCHECK.  */
-         for (yyx = yyn < 0 ? -yyn : 0;
-              yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
-           if (yycheck[yyx + yyn] == yyx)
-             yysize += yystrlen (yytname[yyx]) + 15, yycount++;
-         yysize += yystrlen ("parse error, unexpected ") + 1;
-         yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
-         yymsg = (char *) YYSTACK_ALLOC (yysize);
-         if (yymsg != 0)
-           {
-             char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
-             yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
-
-             if (yycount < 5)
-               {
-                 yycount = 0;
-                 for (yyx = yyn < 0 ? -yyn : 0;
-                      yyx < (int) (sizeof (yytname) / sizeof (char *));
-                      yyx++)
-                   if (yycheck[yyx + yyn] == yyx)
-                     {
-                       const char *yyq = ! yycount ? ", expecting " : " or ";
-                       yyp = yystpcpy (yyp, yyq);
-                       yyp = yystpcpy (yyp, yytname[yyx]);
-                       yycount++;
-                     }
-               }
-             yyerror (yymsg);
-             YYSTACK_FREE (yymsg);
-           }
-         else
-           yyerror ("parse error; also virtual memory exhausted");
-        }
-      else
-#endif /* YYERROR_VERBOSE */
-        yyerror ("parse error");
-    }
-  goto yyerrlab1;
-
-
-/*----------------------------------------------------.
-| yyerrlab1 -- error raised explicitly by an action.  |
-`----------------------------------------------------*/
-yyerrlab1:
-  if (yyerrstatus == 3)
-    {
-      /* If just tried and failed to reuse lookahead token after an
-        error, discard it.  */
-
-      /* Return failure if at end of input.  */
-      if (yychar == YYEOF)
-        {
-         /* Pop the error token.  */
-          YYPOPSTACK;
-         /* Pop the rest of the stack.  */
-         while (yyssp > yyss)
-           {
-             YYDPRINTF ((stderr, "Error: popping "));
-             YYDSYMPRINT ((stderr,
-                           yystos[*yyssp],
-                           *yyvsp]b4_location_if([, *yylsp])[));
-             YYDPRINTF ((stderr, "\n"));
-             yydestruct (yystos[*yyssp], *yyvsp]b4_location_if([, *yylsp])[);
-             YYPOPSTACK;
-           }
-         YYABORT;
-        }
-
-      YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
-                 yychar, yytname[yychar1]));
-      yydestruct (yychar1, yylval]b4_location_if([, yylloc])[);
-      yychar = YYEMPTY;
-    }
-
-  /* Else will try to reuse lookahead token after shifting the error
-     token.  */
-
-  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
-
-  for (;;)
-    {
-      yyn = yypact[yystate];
-      if (yyn != YYFLAG)
-       {
-         yyn += YYTERROR;
-         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-           {
-             yyn = yytable[yyn];
-             if (0 < yyn)
-               break;
-           }
-       }
-
-      /* Pop the current state because it cannot handle the error token.  */
-      if (yyssp == yyss)
-       YYABORT;
-
-      YYDPRINTF ((stderr, "Error: popping "));
-      YYDSYMPRINT ((stderr,
-                   yystos[*yyssp], *yyvsp]b4_location_if([, *yylsp])[));
-      YYDPRINTF ((stderr, "\n"));
-
-      yydestruct (yystos[yystate], *yyvsp]b4_location_if([, *yylsp])[);
-      yyvsp--;
-      yystate = *--yyssp;
-]b4_location_if([      yylsp--;])[
-
-#if YYDEBUG
-      if (yydebug)
-       {
-         short *yyssp1 = yyss - 1;
-         YYFPRINTF (stderr, "Error: state stack now");
-         while (yyssp1 != yyssp)
-           YYFPRINTF (stderr, " %d", *++yyssp1);
-         YYFPRINTF (stderr, "\n");
-       }
-#endif
-    }
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  YYDPRINTF ((stderr, "Shifting error token, "));
-
-  *++yyvsp = yylval;
-]b4_location_if([  *++yylsp = yylloc;])[
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-#ifndef yyoverflow
-/*----------------------------------------------.
-| yyoverflowlab -- parser overflow comes here.  |
-`----------------------------------------------*/
-yyoverflowlab:
-  yyerror ("parser stack overflow");
-  yyresult = 2;
-  /* Fall through.  */
-#endif
-
-yyreturn:
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
-#endif
-  return yyresult;
-]}
-
-
-/*-----------------------------------------------.
-| Release the memory associated to this symbol.  |
-`-----------------------------------------------*/
-
-static void
-yydestruct (int yytype,
-           YYSTYPE yyvalue[]b4_location_if([, YYLTYPE yylocation]))
-{
-  switch (yytype)
-    {
-m4_map([b4_symbol_actions], m4_defn([b4_symbol_destructors]))dnl
-      default:
-        break;
-    }
-}
-
-
-#if YYDEBUG
-/*-----------------------------.
-| Print this symbol on YYOUT.  |
-`-----------------------------*/
-
-static void
-yysymprint (FILE* yyout, int yytype,
-           YYSTYPE yyvalue[]b4_location_if([, YYLTYPE yylocation]))
-{
-  if (yytype < YYNTOKENS)
-    {
-      YYFPRINTF (yyout, "token %s (", yytname[[yytype]]);
-# ifdef YYPRINT
-      YYPRINT (yyout, yytoknum[[yytype]], yyvalue);
-# endif
-    }
-  else
-    YYFPRINTF (yyout, "nterm %s (", yytname[[yytype]]);
-
-  switch (yytype)
-    {
-m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl
-      default:
-        break;
-    }
-  YYFPRINTF (yyout, ")");
-}
-#endif /* YYDEBUG. */
-
-b4_epilogue
-m4_if(b4_defines_flag, 0, [],
-[#output "b4_output_header_name"
-#ifndef b4_header_guard
-# define b4_header_guard
-
-b4_token_defines(b4_tokens)
-
-#ifndef YYSTYPE
-m4_ifdef([b4_stype],
-[#line b4_stype_line "b4_filename"
-typedef union b4_stype yystype;
-/* Line __line__ of __file__.  */
-#line __oline__ "__ofile__"],
-[typedef int yystype;])
-# define YYSTYPE yystype
-#endif
-
-b4_pure_if([],
-[extern YYSTYPE b4_prefix[]lval;])
-
-b4_location_if(
-[#ifndef YYLTYPE
-typedef struct yyltype
-{
-  int first_line;
-  int first_column;
-  int last_line;
-  int last_column;
-} yyltype;
-# define YYLTYPE yyltype
-#endif
-
-m4_if(b4_pure, [0],
-[extern YYLTYPE b4_prefix[]lloc;])
-])
-#endif /* not b4_header_guard */
-])
diff --git a/data/lalr1.cc b/data/lalr1.cc
new file mode 100644 (file)
index 0000000..4aa3689
--- /dev/null
@@ -0,0 +1,951 @@
+m4_divert(-1)
+
+# C++ skeleton for Bison
+# Copyright (C) 2002 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307  USA
+
+
+# b4_sint_type(MAX)
+# -----------------
+# Return the smallest signed int type able to handle the number MAX.
+m4_define([b4_sint_type],
+[m4_if(m4_eval([$1 <= 127]),        [1], [signed char],
+       m4_eval([$1 <= 32767]),      [1], [signed short],
+       [signed int])])
+
+
+# b4_uint_type(MAX)
+# -----------------
+# Return the smallest unsigned int type able to handle the number MAX.
+m4_define([b4_uint_type],
+[m4_if(m4_eval([$1 <= 255]),        [1], [unsigned char],
+       m4_eval([$1 <= 65535]),      [1], [unsigned short],
+       [unsigned int])])
+
+
+# b4_lhs_value([TYPE])
+# --------------------
+# Expansion of $<TYPE>$.
+m4_define([b4_lhs_value],
+[yyval[]m4_ifval([$1], [.$1])])
+
+
+# b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
+# --------------------------------------
+# Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
+# symbols on RHS.
+m4_define([b4_rhs_value],
+[semantic_stack_@<:@m4_eval([$1 - $2])@:>@m4_ifval([$3], [.$3])])
+
+
+# b4_lhs_location()
+# -----------------
+# Expansion of @$.
+m4_define([b4_lhs_location],
+[yyloc])
+
+
+# b4_rhs_location(RULE-LENGTH, NUM)
+# ---------------------------------
+# Expansion of @NUM, where the current rule has RULE-LENGTH symbols
+# on RHS.
+m4_define([b4_rhs_location],
+[location_stack_@<:@m4_eval([$1 - $2])@:>@])
+
+
+# b4_token_define(TOKEN-NAME, TOKEN-NUMBER)
+# -----------------------------------------
+# Output the definition of this token as #define.
+m4_define([b4_token_define],
+[#define $1 $2
+])
+
+
+# b4_token_defines(LIST-OF-PAIRS-TOKEN-NAME-TOKEN-NUMBER)
+# -------------------------------------------------------
+# Output the definition of the tokens as #define.
+m4_define([b4_token_defines],
+[m4_map([b4_token_define], [$@])])
+
+m4_define_default([b4_input_suffix], [.y])
+
+m4_define_default([b4_output_parser_suffix],
+[m4_translit(b4_input_suffix, [yY], [cC])])
+
+m4_define_default([b4_output_parser_name],
+[b4_output_prefix[]b4_output_infix[]b4_output_parser_suffix[]])
+
+
+m4_define_default([b4_output_header_suffix],
+[m4_translit(b4_input_suffix, [yY], [hH])])
+
+m4_define_default([b4_output_header_name],
+[b4_output_prefix[]b4_output_infix[]b4_output_header_suffix[]])
+
+m4_define_default([b4_header_guard],
+                  [m4_bpatsubst(m4_toupper([BISON_]b4_output_header_name),
+                                [[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]], [_])])
+
+m4_define([b4_inherit],
+          [m4_ifdef([b4_root],
+                   [: public b4_root
+],
+                   [])])
+
+m4_define([b4_param],
+         [m4_ifdef([b4_root],
+                   [,
+            const Param& param],
+                   [])])
+
+m4_define([b4_constructor],
+         [m4_ifdef([b4_root],
+                   [b4_root (param),
+      ],
+                   [])])
+
+m4_define([b4_copyright],
+          [/* -*- C++ -*- */
+/* A Bison parser, made from b4_filename,
+   by GNU bison b4_version.  */
+
+/* Skeleton output parser for bison,
+   Copyright 2002 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* As a special exception, when this file is copied by Bison into a
+   Bison output file, you may use that output file without restriction.
+   This special exception was added by the Free Software Foundation
+   in version 1.24 of Bison.  */])
+
+m4_divert(0)dnl
+#output "b4_output_header_name"
+b4_copyright
+#ifndef b4_header_guard
+# define b4_header_guard
+
+#include "stack.hh"
+#include "location.hh"
+
+#include <string>
+#include <iostream>
+
+/* Using locations.  */
+#define YYLSP_NEEDED b4_locations_flag
+
+/* Copy the first part of user declarations.  */
+b4_pre_prologue
+
+/* Line __line__ of __file__.  */
+#line __oline__ "__ofile__"
+
+/* Tokens.  */
+b4_token_defines(b4_tokens)
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG b4_debug
+#endif
+
+/* Enabling verbose error message.  */
+#ifndef YYERROR_VERBOSE
+# define YYERROR_VERBOSE b4_error_verbose
+#endif
+
+#ifndef YYSTYPE
+m4_ifdef([b4_stype],
+[#line b4_stype_line "b4_filename"
+typedef union b4_stype yystype;
+/* Line __line__ of __file__.  */
+#line __oline__ "__ofile__"],
+[typedef int yystype;])
+# define YYSTYPE yystype
+#endif
+
+/* Copy the second part of user declarations.  */
+b4_post_prologue
+
+/* Line __line__ of __file__.  */
+#line __oline__  "__ofile__"
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+   Current.last_line = Rhs[[N]].last_line; \
+   Current.last_column = Rhs[[N]].last_column;
+#endif
+
+m4_if(b4_locations_flag, [0], [],
+[#ifndef YYLTYPE
+typedef struct yyltype
+{
+  int first_line;
+  int first_column;
+  int last_line;
+  int last_column;
+} yyltype;
+# define YYLTYPE yyltype
+#endif])
+
+namespace yy
+{
+  class b4_name;
+
+  template < typename P >
+  struct Traits
+  {
+  };
+
+  template < >
+  struct Traits< b4_name >
+  {
+    typedef b4_uint_type(b4_translate_max) TokenNumberType;
+    typedef b4_sint_type(b4_rhs_max)       RhsNumberType;
+    typedef int      StateType;
+    typedef yystype  SemanticType;
+    typedef b4_ltype LocationType;
+  };
+}
+
+namespace yy
+{
+  class b4_name b4_inherit
+  {
+  public:
+
+    typedef Traits< b4_name >::TokenNumberType TokenNumberType;
+    typedef Traits< b4_name >::RhsNumberType   RhsNumberType;
+    typedef Traits< b4_name >::StateType       StateType;
+    typedef Traits< b4_name >::SemanticType    SemanticType;
+    typedef Traits< b4_name >::LocationType    LocationType;
+
+    typedef Stack< StateType >    StateStack;
+    typedef Stack< SemanticType > SemanticStack;
+    typedef Stack< LocationType > LocationStack;
+
+#if YYLSP_NEEDED
+    b4_name (bool debug,
+           LocationType initlocation[]b4_param) :
+      b4_constructor[]debug_ (debug),
+      cdebug_ (std::cerr),
+      initlocation_ (initlocation)
+#else
+    b4_name (bool debug[]b4_param) :
+      b4_constructor[]debug_ (debug),
+      cdebug_ (std::cerr)
+#endif
+    {
+    }
+
+    virtual ~b4_name ()
+    {
+    }
+
+    virtual int parse ();
+
+  private:
+
+    virtual void lex_ ();
+    virtual void error_ ();
+    virtual void print_ ();
+
+    /* Stacks.  */
+    StateStack    state_stack_;
+    SemanticStack semantic_stack_;
+    LocationStack location_stack_;
+
+    /* Tables.  */
+    static const short pact_[[]];
+    static const short defact_[[]];
+    static const short pgoto_[[]];
+    static const short defgoto_[[]];
+    static const short table_[[]];
+    static const short check_[[]];
+    static const b4_uint_type(b4_r1_max) r1_[[]];
+    static const b4_uint_type(b4_r2_max) r2_[[]];
+
+#if YYDEBUG || YYERROR_VERBOSE
+    static const char* const name_[[]];
+#endif
+
+    /* More tables, for debugging.  */
+#if YYDEBUG
+    static const RhsNumberType rhs_[[]];
+    static const b4_uint_type(b4_prhs_max) prhs_[[]];
+    static const b4_uint_type(b4_rline_max) rline_[[]];
+    static const b4_uint_type(b4_stos_max) stos_[[]];
+    static const short token_number_[[]];
+#endif
+
+    /* Even more tables.  */
+    static inline TokenNumberType translate_ (int token);
+
+    /* Constants.  */
+    static const int eof_;
+    static const int last_;
+    static const int flag_;
+    static const int nnts_;
+    static const int nsym_;
+    static const int empty_;
+    static const int final_;
+    static const int terror_;
+    static const int errcode_;
+    static const int ntokens_;
+    static const int initdepth_;
+    static const unsigned user_token_number_max_;
+    static const TokenNumberType undef_token_;
+
+    /* State.  */
+    int n_;
+    int len_;
+    int state_;
+
+    /* Debugging.  */
+    int debug_;
+    std::ostream &cdebug_;
+
+    /* Lookahead and lookahead in internal form.  */
+    int looka_;
+    int ilooka_;
+
+    /* Message.  */
+    std::string message;
+
+    /* Semantic value and location of lookahead token.  */
+    SemanticType value;
+    LocationType location;
+
+    /* @$ and $$.  */
+    SemanticType yyval;
+    LocationType yyloc;
+
+    /* Initial location.  */
+    LocationType initlocation_;
+  };
+}
+
+#endif /* not b4_header_guard */
+
+#output "b4_output_prefix[]b4_output_infix[].cc"
+b4_copyright
+
+#include "b4_output_header_name"
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+# define YYCDEBUG    if (debug_) cdebug_
+#else /* !YYDEBUG */
+# define YYCDEBUG    if (0) cdebug_
+#endif /* !YYDEBUG */
+
+int
+yy::b4_name::parse ()
+{
+  int nerrs = 0;
+  int errstatus = 0;
+
+  /* Initialize stack.  */
+  state_stack_ = StateStack (0);
+  semantic_stack_ = SemanticStack (1);
+  location_stack_ = LocationStack (1);
+
+  /* Start.  */
+  state_ = 0;
+  looka_ = empty_;
+#if YYLSP_NEEDED
+  location = initlocation_;
+#endif
+  YYCDEBUG << "Starting parse" << std::endl;
+
+  /* New state.  */
+ yynewstate:
+  state_stack_.push (state_);
+  YYCDEBUG << "Entering state " << state_ << std::endl;
+  goto yybackup;
+
+  /* Backup.  */
+ yybackup:
+
+  /* Try to take a decision without lookahead.  */
+  n_ = pact_[[state_]];
+  if (n_ == flag_)
+    goto yydefault;
+
+  /* Read a lookahead token.  */
+  if (looka_ == empty_)
+    {
+      YYCDEBUG << "Reading a token: ";
+      lex_ ();
+    }
+
+  /* Convert token to internal form.  */
+  if (looka_ <= 0)
+    {
+      looka_ = eof_;
+      ilooka_ = 0;
+      YYCDEBUG << "Now at end of input." << std::endl;
+    }
+  else
+    {
+      ilooka_ = translate_ (looka_);
+#if YYDEBUG
+      if (debug_)
+       {
+         YYCDEBUG << "Next token is " << looka_
+                << " (" << name_[[ilooka_]];
+         print_ ();
+         YYCDEBUG << ')' << std::endl;
+       }
+#endif
+    }
+
+  n_ += ilooka_;
+  if (n_ < 0 || n_ > last_ || check_[[n_]] != ilooka_)
+    goto yydefault;
+
+  /* Reduce or error.  */
+  n_ = table_[[n_]];
+  if (n_ < 0)
+    {
+      if (n_ == flag_)
+       goto yyerrlab;
+      else
+       {
+         n_ = -n_;
+         goto yyreduce;
+       }
+    }
+  else if (n_ == 0)
+    goto yyerrlab;
+
+  /* Accept?  */
+  if (n_ == final_)
+    goto yyacceptlab;
+
+  /* Shift the lookahead token.  */
+  YYCDEBUG << "Shifting token " << looka_
+        << " (" << name_[[ilooka_]] << "), ";
+
+  /* Discard the token being shifted unless it is eof.  */
+  if (looka_ != eof_)
+    looka_ = empty_;
+
+  semantic_stack_.push (value);
+  location_stack_.push (location);
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (errstatus)
+    --errstatus;
+
+  state_ = n_;
+  goto yynewstate;
+
+  /* Default action.  */
+ yydefault:
+  n_ = defact_[[state_]];
+  if (n_ == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+  /* Reduce.  */
+ yyreduce:
+  len_ = r2_[[n_]];
+  if (len_)
+    {
+      yyval = semantic_stack_[[len_ - 1]];
+      yyloc = location_stack_[[len_ - 1]];
+    }
+  else
+    {
+      yyval = semantic_stack_[[0]];
+      yyloc = location_stack_[[0]];
+    }
+
+#if YYDEBUG
+  if (debug_)
+    {
+      YYCDEBUG << "Reducing via rule " << n_ - 1
+            << " (line " << rline_[[n_]] << "), ";
+      for (b4_uint_type(b4_prhs_max) i = prhs_[[n_]];
+          rhs_[[i]] >= 0; ++i)
+       YYCDEBUG << name_[[rhs_[i]]] << ' ';
+      YYCDEBUG << "-> " << name_[[r1_[n_]]] << std::endl;
+    }
+#endif
+
+  if (len_)
+    {
+      Slice< LocationType, LocationStack > slice (location_stack_, len_);
+      YYLLOC_DEFAULT (yyloc, slice, len_);
+    }
+
+  switch (n_)
+    {
+      b4_actions
+    }
+
+/* Line __line__ of __file__.  */
+#line __oline__ "__ofile__"
+
+  state_stack_.pop (len_);
+  semantic_stack_.pop (len_);
+  location_stack_.pop (len_);
+
+#if YYDEBUG
+  if (debug_)
+    {
+      YYCDEBUG << "state stack now";
+      for (StateStack::ConstIterator i = state_stack_.begin ();
+          i != state_stack_.end (); ++i)
+       YYCDEBUG << ' ' << *i;
+      YYCDEBUG << std::endl;
+    }
+#endif
+
+  semantic_stack_.push (yyval);
+  location_stack_.push (yyloc);
+
+  /* Shift the result of the reduction.  */
+  n_ = r1_[[n_]];
+  state_ = pgoto_[[n_ - ntokens_]] + state_stack_[[0]];
+  if (state_ >= 0 && state_ <= last_ && check_[[state_]] == state_stack_[[0]])
+    state_ = table_[[state_]];
+  else
+    state_ = defgoto_[[n_ - ntokens_]];
+  goto yynewstate;
+
+  /* Report and recover from errors.  This is very incomplete.  */
+ yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!errstatus)
+    {
+      ++nerrs;
+
+#if YYERROR_VERBOSE
+      n_ = pact_[[state_]];
+      if (n_ > flag_ && n_ < last_)
+       {
+         message = "parse error, unexpected ";
+         message += name_[[ilooka_]];
+         {
+           int count = 0;
+           for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
+             if (check_[[x + n_]] == x)
+               ++count;
+           if (count < 5)
+             {
+               count = 0;
+               for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
+                 if (check_[[x + n_]] == x)
+                   {
+                     message += (!count++) ? ", expecting " : " or ";
+                     message += name_[[x]];
+                   }
+             }
+         }
+       }
+      else
+#endif
+       message = "parse error";
+      error_ ();
+    }
+  goto yyerrlab1;
+
+  /* Error raised explicitly by an action.  */
+ yyerrlab1:
+  if (errstatus == 3)
+    {
+      /* If just tried and failed to reuse lookahead token after an
+        error, discard it.  */
+
+      /* Return failure if at end of input.  */
+      if (looka_ == eof_)
+       goto yyabortlab;
+      YYCDEBUG << "Discarding token " << looka_
+            << " (" << name_[[ilooka_]] << ")." << std::endl;
+      looka_ = empty_;
+    }
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+
+  errstatus = 3;
+
+  for (;;)
+    {
+      n_ = pact_[[state_]];
+      if (n_ != flag_)
+       {
+         n_ += terror_;
+         if (0 <= n_ && n_ <= last_ && check_[[n_]] == terror_)
+           {
+             n_ = table_[[n_]];
+             if (0 < n_)
+               break;
+           }
+       }
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (!state_stack_.height ())
+       goto yyabortlab;
+
+#if YYDEBUG
+      if (debug_)
+       {
+         if (stos_[[state_]] < ntokens_)
+           {
+             YYCDEBUG << "Error: popping token "
+                    << token_number_[[stos_[state_]]]
+                    << " (" << name_[[stos_[state_]]];
+# ifdef YYPRINT
+             YYPRINT (stderr, token_number_[[stos_[state_]]],
+                      semantic_stack_.top ());
+# endif
+             YYCDEBUG << ')' << std::endl;
+           }
+         else
+           {
+             YYCDEBUG << "Error: popping nonterminal ("
+                    << name_[[stos_[state_]]] << ')' << std::endl;
+           }
+       }
+#endif
+
+      state_ = (state_stack_.pop (), state_stack_[[0]]);
+      semantic_stack_.pop ();
+      location_stack_.pop ();;
+
+#if YYDEBUG
+      if (debug_)
+       {
+         YYCDEBUG << "Error: state stack now";
+         for (StateStack::ConstIterator i = state_stack_.begin ();
+              i != state_stack_.end (); ++i)
+           YYCDEBUG << ' ' << *i;
+         YYCDEBUG << std::endl;
+       }
+#endif
+    }
+
+  if (n_ == final_)
+    goto yyacceptlab;
+
+  YYCDEBUG << "Shifting error token, ";
+
+  semantic_stack_.push (value);
+  location_stack_.push (location);
+
+  state_ = n_;
+  goto yynewstate;
+
+  /* Accept.  */
+ yyacceptlab:
+  return 0;
+
+  /* Abort.  */
+ yyabortlab:
+  return 1;
+}
+
+void
+yy::b4_name::lex_ ()
+{
+#if YYLSP_NEEDED
+  looka_ = yylex (&value, &location);
+#else
+  looka_ = yylex (&value);
+#endif
+}
+
+/* YYPACT[[STATE-NUM]] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+const short
+yy::b4_name::pact_[[]] =
+{
+  b4_pact
+};
+
+/* YYDEFACT[[S]] -- default rule to reduce with in state S when YYTABLE
+   doesn't specify something else to do.  Zero means the default is an
+   error.  */
+const short
+yy::b4_name::defact_[[]] =
+{
+  b4_defact
+};
+
+/* YYPGOTO[[NTERM-NUM]].  */
+const short
+yy::b4_name::pgoto_[[]] =
+{
+  b4_pgoto
+};
+
+/* YYDEFGOTO[[NTERM-NUM]].  */
+const short
+yy::b4_name::defgoto_[[]] =
+{
+  b4_defgoto
+};
+
+/* YYTABLE[[YYPACT[STATE-NUM]]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.  */
+const short
+yy::b4_name::table_[[]] =
+{
+  b4_table
+};
+
+/* YYCHECK.  */
+const short
+yy::b4_name::check_[[]] =
+{
+  b4_check
+};
+
+#if YYDEBUG
+/* STOS_[[STATE-NUM]] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+const b4_uint_type(b4_stos_max)
+yy::b4_name::stos_[[]] =
+{
+  b4_stos
+};
+
+/* TOKEN_NUMBER_[[YYLEX-NUM]] -- Internal token number corresponding
+   to YYLEX-NUM.  */
+const short
+yy::b4_name::token_number_[[]] =
+{
+  b4_toknum
+};
+#endif
+
+/* YYR1[[YYN]] -- Symbol number of symbol that rule YYN derives.  */
+const b4_uint_type(b4_r1_max)
+yy::b4_name::r1_[[]] =
+{
+  b4_r1
+};
+
+/* YYR2[[YYN]] -- Number of symbols composing right hand side of rule YYN.  */
+const b4_uint_type(b4_r2_max)
+yy::b4_name::r2_[[]] =
+{
+  b4_r2
+};
+
+#if YYDEBUG || YYERROR_VERBOSE
+/* YYTNAME[[SYMBOL-NUM]] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+const char*
+const yy::b4_name::name_[[]] =
+{
+  b4_tname
+};
+#endif
+
+#if YYDEBUG
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+const yy::b4_name::RhsNumberType
+yy::b4_name::rhs_[[]] =
+{
+  b4_rhs
+};
+
+/* YYPRHS[[YYN]] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+const b4_uint_type(b4_prhs_max)
+yy::b4_name::prhs_[[]] =
+{
+  b4_prhs
+};
+
+/* YYRLINE[[YYN]] -- source line where rule number YYN was defined.  */
+const b4_uint_type(b4_rline_max)
+yy::b4_name::rline_[[]] =
+{
+  b4_rline
+};
+#endif
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+yy::b4_name::TokenNumberType
+yy::b4_name::translate_ (int token)
+{
+  static
+  const TokenNumberType
+  translate_[[]] =
+  {
+    b4_translate
+  };
+  if ((unsigned) token <= user_token_number_max_)
+    return translate_[[token]];
+  else
+    return undef_token_;
+}
+
+const int yy::b4_name::eof_ = 0;
+const int yy::b4_name::last_ = b4_last;
+const int yy::b4_name::flag_ = b4_flag;
+const int yy::b4_name::nnts_ = b4_nnts;
+const int yy::b4_name::nsym_ = b4_nsym;
+const int yy::b4_name::empty_ = -2;
+const int yy::b4_name::final_ = b4_final;
+const int yy::b4_name::terror_ = 1;
+const int yy::b4_name::errcode_ = 256;
+const int yy::b4_name::ntokens_ = b4_ntokens;
+const int yy::b4_name::initdepth_ = b4_initdepth;
+
+const unsigned yy::b4_name::user_token_number_max_ = b4_user_token_number_max;
+const yy::b4_name::TokenNumberType yy::b4_name::undef_token_ = b4_undef_token_number;
+
+b4_epilogue
+
+#output "stack.hh"
+b4_copyright
+
+#ifndef BISON_STACK_HH
+# define BISON_STACK_HH
+
+#include <deque>
+
+namespace yy
+{
+  template < class T, class S = std::deque< T > >
+  class Stack
+  {
+  public:
+
+    typedef typename S::iterator Iterator;
+    typedef typename S::const_iterator ConstIterator;
+
+    Stack () : seq_ ()
+    {
+    }
+
+    Stack (unsigned n) : seq_ (n)
+    {
+    }
+
+    inline
+    T&
+    operator [[]] (unsigned index)
+    {
+      return seq_[[index]];
+    }
+
+    inline
+    const T&
+    operator [[]] (unsigned index) const
+    {
+      return seq_[[index]];
+    }
+
+    inline
+    void
+    push (const T& t)
+    {
+      seq_.push_front (t);
+    }
+
+    inline
+    void
+    pop (unsigned n = 1)
+    {
+      for (; n; --n)
+       seq_.pop_front ();
+    }
+
+    inline
+    unsigned
+    height () const
+    {
+      return seq_.size ();
+    }
+
+    inline ConstIterator begin () const { return seq_.begin (); }
+    inline ConstIterator end () const { return seq_.end (); }
+
+  private:
+
+    S seq_;
+  };
+
+  template < class T, class S = Stack< T > >
+  class Slice
+  {
+  public:
+
+    Slice (const S& stack,
+          unsigned range) : stack_ (stack),
+                            range_ (range)
+    {
+    }
+
+    inline
+    const T&
+    operator [[]] (unsigned index) const
+    {
+      return stack_[[range_ - index]];
+    }
+
+  private:
+
+    const S& stack_;
+    unsigned range_;
+  };
+}
+
+#endif // not BISON_STACK_HH
+
+#output "location.hh"
+b4_copyright
+
+#ifndef BISON_LOCATION_HH
+# define BISON_LOCATION_HH
+
+namespace yy
+{
+  struct Position
+  {
+    int line;
+    int column;
+  };
+
+  struct Location
+  {
+    Position first;
+    Position last;
+  };
+}
+
+#endif // not BISON_LOCATION_HH
diff --git a/data/yacc.c b/data/yacc.c
new file mode 100644 (file)
index 0000000..3b88522
--- /dev/null
@@ -0,0 +1,1343 @@
+m4_divert(-1)                                                       -*- C -*-
+
+# Yacc compatible skeleton for Bison
+# Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307  USA
+
+# b4_sint_type(MAX)
+# -----------------
+# Return the smallest signed int type able to handle the number MAX.
+m4_define([b4_sint_type],
+[m4_if(m4_eval([$1 <= 127]),        [1], [signed char],
+       m4_eval([$1 <= 32767]),      [1], [signed short],
+       [signed int])])
+
+
+# b4_uint_type(MAX)
+# -----------------
+# Return the smallest unsigned int type able to handle the number MAX.
+m4_define([b4_uint_type],
+[m4_if(m4_eval([$1 <= 255]),        [1], [unsigned char],
+       m4_eval([$1 <= 65535]),      [1], [unsigned short],
+       [unsigned int])])
+
+
+# b4_lhs_value([TYPE])
+# --------------------
+# Expansion of $<TYPE>$.
+m4_define([b4_lhs_value],
+[yyval[]m4_ifval([$1], [.$1])])
+
+
+# b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
+# --------------------------------------
+# Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
+# symbols on RHS.
+m4_define([b4_rhs_value],
+[yyvsp@<:@m4_eval([$2 - $1])@:>@m4_ifval([$3], [.$3])])
+
+
+
+## ----------- ##
+## Locations.  ##
+## ----------- ##
+
+# b4_location_if(IF-TRUE, IF-FALSE)
+# ---------------------------------
+# Expand IF-TRUE, if locations are used, IF-FALSE otherwise.
+m4_define([b4_location_if],
+[m4_if(b4_locations_flag, [1],
+       [$1],
+       [$2])])
+
+
+# b4_lhs_location()
+# -----------------
+# Expansion of @$.
+m4_define([b4_lhs_location],
+[yyloc])
+
+
+# b4_rhs_location(RULE-LENGTH, NUM)
+# ---------------------------------
+# Expansion of @NUM, where the current rule has RULE-LENGTH symbols
+# on RHS.
+m4_define([b4_rhs_location],
+[yylsp@<:@m4_eval([$2 - $1])@:>@])
+
+
+
+## -------------- ##
+## %pure-parser.  ##
+## -------------- ##
+
+# b4_pure_if(IF-TRUE, IF-FALSE)
+# -----------------------------
+# Expand IF-TRUE, if %pure-parser, IF-FALSE otherwise.
+m4_define([b4_pure_if],
+[m4_if(b4_pure, [1],
+       [$1],
+       [$2])])
+
+
+## ------------------- ##
+## Output file names.  ##
+## ------------------- ##
+
+m4_define_default([b4_input_suffix], [.y])
+
+m4_define_default([b4_output_parser_suffix],
+[m4_translit(b4_input_suffix, [yY], [cC])])
+
+m4_define_default([b4_output_parser_name],
+[b4_output_prefix[]b4_output_infix[]b4_output_parser_suffix[]])
+
+
+m4_define_default([b4_output_header_suffix],
+[m4_translit(b4_input_suffix, [yY], [hH])])
+
+m4_define_default([b4_output_header_name],
+[b4_output_prefix[]b4_output_infix[]b4_output_header_suffix[]])
+
+m4_define_default([b4_header_guard],
+                  [m4_bpatsubst(m4_toupper([BISON_]b4_output_header_name),
+                                [[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]], [_])])
+
+
+## ------------------------- ##
+## Assigning token numbers.  ##
+## ------------------------- ##
+
+# b4_token_define(TOKEN-NAME, TOKEN-NUMBER)
+# -----------------------------------------
+# Output the definition of this token as #define.
+m4_define([b4_token_define],
+[#define $1 $2
+])
+
+
+# b4_token_enum(TOKEN-NAME, TOKEN-NUMBER)
+# ---------------------------------------
+# Output the definition of this token as an enum.
+m4_define([b4_token_enum],
+[$1 = $2])
+
+
+# b4_token_defines(LIST-OF-PAIRS-TOKEN-NAME-TOKEN-NUMBER)
+# -------------------------------------------------------
+# Output the definition of the tokens (if there are) as enums and #define.
+m4_define([b4_token_defines],
+[m4_if([$@], [[]], [],
+[/* Tokens.  */
+#ifndef YYTOKENTYPE
+# if defined (__STDC__) || defined (__cplusplus)
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+m4_map_sep([     b4_token_enum], [,
+],
+           [$@])
+   };
+# endif
+  /* POSIX requires `int' for tokens in interfaces.  */
+# define YYTOKENTYPE int
+#endif /* !YYTOKENTYPE */
+m4_map([b4_token_define], [$@])
+])
+])
+
+
+## --------------------------------------------------------- ##
+## Defining symbol actions, e.g., printers and destructors.  ##
+## --------------------------------------------------------- ##
+
+# b4_symbol_actions(FILENAME, LINENO,
+#                   SYMBOL-TAG, SYMBOL-NUM,
+#                   SYMBOL-ACTION, SYMBOL-TYPENAME)
+# -------------------------------------------------
+m4_define([b4_symbol_actions],
+[m4_pushdef([b4_dollar_dollar], [yyvalue.$6])dnl
+m4_pushdef([b4_at_dollar], [yylocation])dnl
+      case $4: /* $3 */
+#line $2 "$1"
+        $5;
+#line __oline__ "__ofile__"
+        break;
+m4_popdef([b4_at_dollar])dnl
+m4_popdef([b4_dollar_dollar])dnl
+])
+
+
+
+m4_divert(0)dnl
+#output "b4_output_parser_name"
+/* A Bison parser, made from b4_filename
+   by GNU bison b4_version.  */
+
+/* Skeleton output parser for Bison,
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software
+   Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* As a special exception, when this file is copied by Bison into a
+   Bison output file, you may use that output file without restriction.
+   This special exception was added by the Free Software Foundation
+   in version 1.24 of Bison.  */
+
+/* This is the parser code that is written into each bison parser when
+   the %semantic_parser declaration is not specified in the grammar.
+   It was written by Richard Stallman by simplifying the original so
+   called ``semantic'' parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON        1
+
+/* Pure parsers.  */
+#define YYPURE b4_pure
+
+/* Using locations.  */
+#define YYLSP_NEEDED b4_locations_flag
+
+m4_if(b4_prefix[], [yy], [],
+[/* If NAME_PREFIX is specified substitute the variables and functions
+   names.  */
+#define yyparse b4_prefix[]parse
+#define yylex   b4_prefix[]lex
+#define yyerror b4_prefix[]error
+#define yylval  b4_prefix[]lval
+#define yychar  b4_prefix[]char
+#define yydebug b4_prefix[]debug
+#define yynerrs b4_prefix[]nerrs
+b4_location_if([#define yylloc b4_prefix[]lloc])])
+
+/* Copy the first part of user declarations.  */
+b4_pre_prologue
+
+b4_token_defines(b4_tokens)
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG b4_debug
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE b4_error_verbose
+#endif
+
+#ifndef YYSTYPE
+m4_ifdef([b4_stype],
+[#line b4_stype_line "b4_filename"
+typedef union b4_stype yystype;
+/* Line __line__ of __file__.  */
+#line __oline__ "__ofile__"],
+[typedef int yystype;])
+# define YYSTYPE yystype
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+#ifndef YYLTYPE
+typedef struct yyltype
+{
+  int first_line;
+  int first_column;
+  int last_line;
+  int last_column;
+} yyltype;
+# define YYLTYPE b4_ltype
+# define YYLTYPE_IS_TRIVIAL 1
+#endif
+
+/* Copy the second part of user declarations.  */
+b4_post_prologue
+
+/* Line __line__ of __file__.  */
+#line __oline__ "__ofile__"
+
+#if ! defined (yyoverflow) || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# if YYSTACK_USE_ALLOCA
+#  define YYSTACK_ALLOC alloca
+# else
+#  ifndef YYSTACK_USE_ALLOCA
+#   if defined (alloca) || defined (_ALLOCA_H)
+#    define YYSTACK_ALLOC alloca
+#   else
+#    ifdef __GNUC__
+#     define YYSTACK_ALLOC __builtin_alloca
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning. */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+# else
+#  if defined (__STDC__) || defined (__cplusplus)
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   define YYSIZE_T size_t
+#  endif
+#  define YYSTACK_ALLOC malloc
+#  define YYSTACK_FREE free
+# endif
+#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
+
+
+#if (! defined (yyoverflow) \
+     && (! defined (__cplusplus) \
+        || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  short yyss;
+  YYSTYPE yyvs;
+  b4_location_if([  YYLTYPE yyls;
+])dnl
+};
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+b4_location_if(
+[# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE))     \
+      + 2 * YYSTACK_GAP_MAX)],
+[# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (short) + sizeof (YYSTYPE))                                \
+      + YYSTACK_GAP_MAX)])
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)             \
+      do                                       \
+       {                                       \
+         register YYSIZE_T yyi;                \
+         for (yyi = 0; yyi < (Count); yyi++)   \
+           (To)[[yyi]] = (From)[[yyi]];        \
+       }                                       \
+      while (0)
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack)                                       \
+    do                                                                 \
+      {                                                                        \
+       YYSIZE_T yynewbytes;                                            \
+       YYCOPY (&yyptr->Stack, Stack, yysize);                          \
+       Stack = &yyptr->Stack;                                          \
+       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX;   \
+       yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                        \
+    while (0)
+
+#endif
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL  b4_final
+#define YYFLAG  b4_flag
+#define YYLAST   b4_last
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS  b4_ntokens
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS  b4_nnts
+/* YYNRULES -- Number of rules. */
+#define YYNRULES  b4_nrules
+/* YYNRULES -- Number of states. */
+#define YYNSTATES  b4_nstates
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  b4_undef_token_number
+#define YYMAXUTOK   b4_user_token_number_max
+
+#define YYTRANSLATE(X) \
+  ((unsigned)(X) <= YYMAXUTOK ? yytranslate[[X]] : YYUNDEFTOK)
+
+/* YYTRANSLATE[[YYLEX]] -- Bison symbol number corresponding to YYLEX.  */
+static const b4_uint_type(b4_translate_max) yytranslate[[]] =
+{
+  b4_translate
+};
+
+#if YYDEBUG
+/* YYPRHS[[YYN]] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const b4_uint_type(b4_prhs_max) yyprhs[[]] =
+{
+  b4_prhs
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const b4_sint_type(b4_rhs_max) yyrhs[[]] =
+{
+  b4_rhs
+};
+
+/* YYRLINE[[YYN]] -- source line where rule number YYN was defined.  */
+static const b4_uint_type(b4_rline_max) yyrline[[]] =
+{
+  b4_rline
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE
+/* YYTNME[[SYMBOL-NUM]] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[[]] =
+{
+  b4_tname
+};
+#endif
+
+/* YYTOKNUM[[YYLEX-NUM]] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const short yytoknum[[]] =
+{
+  b4_toknum
+};
+
+/* YYR1[[YYN]] -- Symbol number of symbol that rule YYN derives.  */
+static const b4_uint_type(b4_r1_max) yyr1[[]] =
+{
+  b4_r1
+};
+
+/* YYR2[[YYN]] -- Number of symbols composing right hand side of rule YYN.  */
+static const b4_uint_type(b4_r2_max) yyr2[[]] =
+{
+  b4_r2
+};
+
+/* YYDEFACT[[STATE-NAME]] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const short yydefact[[]] =
+{
+  b4_defact
+};
+
+/* YYPGOTO[[NTERM-NUM]]. */
+static const short yydefgoto[[]] =
+{
+  b4_defgoto
+};
+
+/* YYPACT[[STATE-NUM]] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+static const short yypact[[]] =
+{
+  b4_pact
+};
+
+/* YYPGOTO[[NTERM-NUM]].  */
+static const short yypgoto[[]] =
+{
+  b4_pgoto
+};
+
+/* YYTABLE[[YYPACT[STATE-NUM]]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.  */
+static const short yytable[[]] =
+{
+  b4_table
+};
+
+static const short yycheck[[]] =
+{
+  b4_check
+};
+
+/* YYSTOS[[STATE-NUM]] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const b4_uint_type(b4_stos_max) yystos[[]] =
+{
+  b4_stos
+};
+
+#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+# define YYSIZE_T __SIZE_TYPE__
+#endif
+#if ! defined (YYSIZE_T) && defined (size_t)
+# define YYSIZE_T size_t
+#endif
+#if ! defined (YYSIZE_T)
+# if defined (__STDC__) || defined (__cplusplus)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# endif
+#endif
+#if ! defined (YYSIZE_T)
+# define YYSIZE_T unsigned int
+#endif
+
+#define yyerrok                (yyerrstatus = 0)
+#define yyclearin      (yychar = YYEMPTY)
+#define YYEMPTY                -2
+#define YYEOF          0
+
+#define YYACCEPT       goto yyacceptlab
+#define YYABORT                goto yyabortlab
+#define YYERROR                goto yyerrlab1
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL         goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)                                 \
+do                                                             \
+  if (yychar == YYEMPTY && yylen == 1)                         \
+    {                                                          \
+      yychar = (Token);                                                \
+      yylval = (Value);                                                \
+      yychar1 = YYTRANSLATE (yychar);                          \
+      YYPOPSTACK;                                              \
+      goto yybackup;                                           \
+    }                                                          \
+  else                                                         \
+    {                                                          \
+      yyerror ("syntax error: cannot back up");                        \
+      YYERROR;                                                 \
+    }                                                          \
+while (0)
+
+#define YYTERROR       1
+#define YYERRCODE      256
+
+/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+   are run).  */
+
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)           \
+  Current.first_line   = Rhs[[1]].first_line;      \
+  Current.first_column = Rhs[[1]].first_column;    \
+  Current.last_line    = Rhs[[N]].last_line;       \
+  Current.last_column  = Rhs[[N]].last_column;
+#endif
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+b4_pure_if(
+[#ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval[]b4_location_if([, &yylloc]), YYLEX_PARAM)
+#else
+# define YYLEX yylex (&yylval[]b4_location_if([, &yylloc]))
+#endif],
+[#define YYLEX yylex ()])
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)                       \
+do {                                           \
+  if (yydebug)                                 \
+    YYFPRINTF Args;                            \
+} while (0)
+# define YYDSYMPRINT(Args)                     \
+do {                                           \
+  if (yydebug)                                 \
+    yysymprint Args;                           \
+} while (0)
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YYDSYMPRINT(Args)
+#endif /* !YYDEBUG */
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef        YYINITDEPTH
+# define YYINITDEPTH b4_initdepth
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#if YYMAXDEPTH == 0
+# undef YYMAXDEPTH
+#endif
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH b4_maxdepth
+#endif
+
+\f
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined (__GLIBC__) && defined (_STRING_H)
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+static YYSIZE_T
+#   if defined (__STDC__) || defined (__cplusplus)
+yystrlen (const char *yystr)
+#   else
+yystrlen (yystr)
+     const char *yystr;
+#   endif
+{
+  register const char *yys = yystr;
+
+  while (*yys++ != '\0')
+    continue;
+
+  return yys - yystr - 1;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+static char *
+#   if defined (__STDC__) || defined (__cplusplus)
+yystpcpy (char *yydest, const char *yysrc)
+#   else
+yystpcpy (yydest, yysrc)
+     char *yydest;
+     const char *yysrc;
+#   endif
+{
+  register char *yyd = yydest;
+  register const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+#endif /* !YYERROR_VERBOSE */
+
+\f
+
+/* The user can define YYPARSE_PARAM as the name of an argument to be passed
+   into yyparse.  The argument should have type void *.
+   It should actually point to an object.
+   Grammar actions can access the variable by casting it
+   to the proper pointer type.  */
+
+#ifdef YYPARSE_PARAM
+# if defined (__STDC__) || defined (__cplusplus)
+#  define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
+#  define YYPARSE_PARAM_DECL
+# else
+#  define YYPARSE_PARAM_ARG YYPARSE_PARAM
+#  define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
+# endif
+#else /* !YYPARSE_PARAM */
+# define YYPARSE_PARAM_ARG
+# define YYPARSE_PARAM_DECL
+#endif /* !YYPARSE_PARAM */
+
+/* Prevent warning if -Wstrict-prototypes.  */
+#ifdef __GNUC__
+# ifdef YYPARSE_PARAM
+int yyparse (void *);
+# else
+int yyparse (void);
+# endif
+#endif
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void yydestruct (int yytype,
+                       YYSTYPE yyvalue[]b4_location_if([, YYLTYPE yylocation]));
+# if YYDEBUG
+static void yysymprint (FILE* out, int yytype,
+                       YYSTYPE yyvalue[]b4_location_if([, YYLTYPE yylocation]));
+# endif
+#endif
+
+m4_divert_push([KILL])# ======================== M4 code.
+# b4_declare_parser_variables
+# ---------------------------
+# Declare the variables that are global, or local to YYPARSE if
+#  pure-parser
+m4_define([b4_declare_parser_variables],
+[/* The lookahead symbol.  */
+int yychar;
+
+/* The semantic value of the lookahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of parse errors so far.  */
+int yynerrs;b4_location_if([
+/* Location data for the lookahead symbol.  */
+YYLTYPE yylloc;])
+])
+m4_divert_pop([KILL])dnl# ====================== End of M4 code.
+
+b4_pure_if([],
+           [b4_declare_parser_variables])
+
+int
+yyparse (YYPARSE_PARAM_ARG)
+     YYPARSE_PARAM_DECL
+{[
+  ]b4_pure_if([b4_declare_parser_variables])[
+  register int yystate;
+  register int yyn;
+  int yyresult;
+  /* Number of tokens to shift before error messages enabled.  */
+  int yyerrstatus;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yychar1 = 0;
+
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to reallocate them elsewhere.  */
+
+  /* The state stack.  */
+  short        yyssa[YYINITDEPTH];
+  short *yyss = yyssa;
+  register short *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  register YYSTYPE *yyvsp;
+
+]b4_location_if(
+[[  /* The location stack.  */
+  YYLTYPE yylsa[YYINITDEPTH];
+  YYLTYPE *yyls = yylsa;
+  YYLTYPE *yylsp;]])[
+
+#define YYPOPSTACK   (yyvsp--, yyssp--]b4_location_if([, yylsp--])[)
+
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+]b4_location_if([  YYLTYPE yyloc;])[
+
+  /* When reducing, the number of symbols on the RHS of the reduced
+     rule.  */
+  int yylen;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;            /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss;
+  yyvsp = yyvs;
+]b4_location_if([  yylsp = yyls;])[
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed. so pushing a state here evens the stacks.
+     */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyssp >= yyss + yystacksize - 1)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+       /* Give user a chance to reallocate the stack. Use copies of
+          these so that the &'s don't force the real ones into
+          memory.  */
+       YYSTYPE *yyvs1 = yyvs;
+       short *yyss1 = yyss;
+]b4_location_if([      YYLTYPE *yyls1 = yyls;])[
+
+       /* Each stack pointer address is followed by the size of the
+          data in use in that stack, in bytes.  This used to be a
+          conditional around just the two extra args, but that might
+          be undefined if yyoverflow is a macro.  */
+       yyoverflow ("parser stack overflow",
+                   &yyss1, yysize * sizeof (*yyssp),
+                   &yyvs1, yysize * sizeof (*yyvsp),
+]b4_location_if([                  &yyls1, yysize * sizeof (*yylsp),])[
+                   &yystacksize);
+]b4_location_if([      yyls = yyls1;])[
+       yyss = yyss1;
+       yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyoverflowlab;
+# else
+      /* Extend the stack our own way.  */
+      if (yystacksize >= YYMAXDEPTH)
+       goto yyoverflowlab;
+      yystacksize *= 2;
+      if (yystacksize > YYMAXDEPTH)
+       yystacksize = YYMAXDEPTH;
+
+      {
+       short *yyss1 = yyss;
+       union yyalloc *yyptr =
+         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+       if (! yyptr)
+         goto yyoverflowlab;
+       YYSTACK_RELOCATE (yyss);
+       YYSTACK_RELOCATE (yyvs);
+]b4_location_if([      YYSTACK_RELOCATE (yyls);])[
+#  undef YYSTACK_RELOCATE
+       if (yyss1 != yyssa)
+         YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+]b4_location_if([      yylsp = yyls + yysize - 1;])[
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+                 (unsigned long int) yystacksize));
+
+      if (yyssp >= yyss + yystacksize - 1)
+       YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+/* Do appropriate processing given the current state.  */
+/* Read a lookahead token if we need one and don't already have one.  */
+/* yyresume: */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+
+  yyn = yypact[yystate];
+  if (yyn == YYFLAG)
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* yychar is either YYEMPTY or YYEOF
+     or a valid token in external form.  */
+
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  /* Convert token to internal form (in yychar1) for indexing tables with.  */
+
+  if (yychar <= 0)             /* This means end of input.  */
+    {
+      yychar1 = 0;
+      yychar = YYEOF;          /* Don't call YYLEX any more.  */
+
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yychar1 = YYTRANSLATE (yychar);
+
+      /* We have to keep this `#if YYDEBUG', since we use variables
+        which are defined only if `YYDEBUG' is set.  */
+      YYDPRINTF ((stderr, "Next token is "));
+      YYDSYMPRINT ((stderr, yychar1, yylval]b4_location_if([, yyloc])[));
+      YYDPRINTF ((stderr, "\n"));
+    }
+
+  yyn += yychar1;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
+    goto yydefault;
+
+  yyn = yytable[yyn];
+
+  /* yyn is what to do for this token type in this state.
+     Negative => reduce, -yyn is rule number.
+     Positive => shift, yyn is new state.
+       New state is final state => don't bother to shift,
+       just return success.
+     0, or most negative number => error.  */
+
+  if (yyn < 0)
+    {
+      if (yyn == YYFLAG)
+       goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+  else if (yyn == 0)
+    goto yyerrlab;
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Shift the lookahead token.  */
+  YYDPRINTF ((stderr, "Shifting token %d (%s), ",
+             yychar, yytname[yychar1]));
+
+  /* Discard the token being shifted unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  *++yyvsp = yylval;
+]b4_location_if([  *++yylsp = yylloc;])[
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to the semantic value of
+     the lookahead token.  This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+]b4_location_if(
+[  /* Default location. */
+  YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);])[
+
+#if YYDEBUG
+  /* We have to keep this `#if YYDEBUG', since we use variables which
+     are defined only if `YYDEBUG' is set.  */
+  if (yydebug)
+    {
+      int yyi;
+
+      YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
+                yyn - 1, yyrline[yyn]);
+
+      /* Print the symbols being reduced, and their result.  */
+      for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++)
+       YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
+      YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
+    }
+#endif
+  switch (yyn)
+    ]{
+      b4_actions
+    }
+
+/* Line __line__ of __file__.  */
+#line __oline__ "__ofile__"
+\f
+[  yyvsp -= yylen;
+  yyssp -= yylen;
+]b4_location_if([  yylsp -= yylen;])[
+
+#if YYDEBUG
+  if (yydebug)
+    {
+      short *yyssp1 = yyss - 1;
+      YYFPRINTF (stderr, "state stack now");
+      while (yyssp1 != yyssp)
+       YYFPRINTF (stderr, " %d", *++yyssp1);
+      YYFPRINTF (stderr, "\n");
+    }
+#endif
+
+  *++yyvsp = yyval;
+]b4_location_if([  *++yylsp = yyloc;])[
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+
+#if YYERROR_VERBOSE
+      yyn = yypact[yystate];
+
+      if (yyn > YYFLAG && yyn < YYLAST)
+       {
+         YYSIZE_T yysize = 0;
+         char *yymsg;
+         int yyx, yycount;
+
+         yycount = 0;
+         /* Start YYX at -YYN if negative to avoid negative indexes in
+            YYCHECK.  */
+         for (yyx = yyn < 0 ? -yyn : 0;
+              yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
+           if (yycheck[yyx + yyn] == yyx)
+             yysize += yystrlen (yytname[yyx]) + 15, yycount++;
+         yysize += yystrlen ("parse error, unexpected ") + 1;
+         yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
+         yymsg = (char *) YYSTACK_ALLOC (yysize);
+         if (yymsg != 0)
+           {
+             char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
+             yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
+
+             if (yycount < 5)
+               {
+                 yycount = 0;
+                 for (yyx = yyn < 0 ? -yyn : 0;
+                      yyx < (int) (sizeof (yytname) / sizeof (char *));
+                      yyx++)
+                   if (yycheck[yyx + yyn] == yyx)
+                     {
+                       const char *yyq = ! yycount ? ", expecting " : " or ";
+                       yyp = yystpcpy (yyp, yyq);
+                       yyp = yystpcpy (yyp, yytname[yyx]);
+                       yycount++;
+                     }
+               }
+             yyerror (yymsg);
+             YYSTACK_FREE (yymsg);
+           }
+         else
+           yyerror ("parse error; also virtual memory exhausted");
+        }
+      else
+#endif /* YYERROR_VERBOSE */
+        yyerror ("parse error");
+    }
+  goto yyerrlab1;
+
+
+/*----------------------------------------------------.
+| yyerrlab1 -- error raised explicitly by an action.  |
+`----------------------------------------------------*/
+yyerrlab1:
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse lookahead token after an
+        error, discard it.  */
+
+      /* Return failure if at end of input.  */
+      if (yychar == YYEOF)
+        {
+         /* Pop the error token.  */
+          YYPOPSTACK;
+         /* Pop the rest of the stack.  */
+         while (yyssp > yyss)
+           {
+             YYDPRINTF ((stderr, "Error: popping "));
+             YYDSYMPRINT ((stderr,
+                           yystos[*yyssp],
+                           *yyvsp]b4_location_if([, *yylsp])[));
+             YYDPRINTF ((stderr, "\n"));
+             yydestruct (yystos[*yyssp], *yyvsp]b4_location_if([, *yylsp])[);
+             YYPOPSTACK;
+           }
+         YYABORT;
+        }
+
+      YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
+                 yychar, yytname[yychar1]));
+      yydestruct (yychar1, yylval]b4_location_if([, yylloc])[);
+      yychar = YYEMPTY;
+    }
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+
+  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYFLAG)
+       {
+         yyn += YYTERROR;
+         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+           {
+             yyn = yytable[yyn];
+             if (0 < yyn)
+               break;
+           }
+       }
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+       YYABORT;
+
+      YYDPRINTF ((stderr, "Error: popping "));
+      YYDSYMPRINT ((stderr,
+                   yystos[*yyssp], *yyvsp]b4_location_if([, *yylsp])[));
+      YYDPRINTF ((stderr, "\n"));
+
+      yydestruct (yystos[yystate], *yyvsp]b4_location_if([, *yylsp])[);
+      yyvsp--;
+      yystate = *--yyssp;
+]b4_location_if([      yylsp--;])[
+
+#if YYDEBUG
+      if (yydebug)
+       {
+         short *yyssp1 = yyss - 1;
+         YYFPRINTF (stderr, "Error: state stack now");
+         while (yyssp1 != yyssp)
+           YYFPRINTF (stderr, " %d", *++yyssp1);
+         YYFPRINTF (stderr, "\n");
+       }
+#endif
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  YYDPRINTF ((stderr, "Shifting error token, "));
+
+  *++yyvsp = yylval;
+]b4_location_if([  *++yylsp = yylloc;])[
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#ifndef yyoverflow
+/*----------------------------------------------.
+| yyoverflowlab -- parser overflow comes here.  |
+`----------------------------------------------*/
+yyoverflowlab:
+  yyerror ("parser stack overflow");
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+  return yyresult;
+]}
+
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+static void
+yydestruct (int yytype,
+           YYSTYPE yyvalue[]b4_location_if([, YYLTYPE yylocation]))
+{
+  switch (yytype)
+    {
+m4_map([b4_symbol_actions], m4_defn([b4_symbol_destructors]))dnl
+      default:
+        break;
+    }
+}
+
+
+#if YYDEBUG
+/*-----------------------------.
+| Print this symbol on YYOUT.  |
+`-----------------------------*/
+
+static void
+yysymprint (FILE* yyout, int yytype,
+           YYSTYPE yyvalue[]b4_location_if([, YYLTYPE yylocation]))
+{
+  if (yytype < YYNTOKENS)
+    {
+      YYFPRINTF (yyout, "token %s (", yytname[[yytype]]);
+# ifdef YYPRINT
+      YYPRINT (yyout, yytoknum[[yytype]], yyvalue);
+# endif
+    }
+  else
+    YYFPRINTF (yyout, "nterm %s (", yytname[[yytype]]);
+
+  switch (yytype)
+    {
+m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl
+      default:
+        break;
+    }
+  YYFPRINTF (yyout, ")");
+}
+#endif /* YYDEBUG. */
+
+b4_epilogue
+m4_if(b4_defines_flag, 0, [],
+[#output "b4_output_header_name"
+#ifndef b4_header_guard
+# define b4_header_guard
+
+b4_token_defines(b4_tokens)
+
+#ifndef YYSTYPE
+m4_ifdef([b4_stype],
+[#line b4_stype_line "b4_filename"
+typedef union b4_stype yystype;
+/* Line __line__ of __file__.  */
+#line __oline__ "__ofile__"],
+[typedef int yystype;])
+# define YYSTYPE yystype
+#endif
+
+b4_pure_if([],
+[extern YYSTYPE b4_prefix[]lval;])
+
+b4_location_if(
+[#ifndef YYLTYPE
+typedef struct yyltype
+{
+  int first_line;
+  int first_column;
+  int last_line;
+  int last_column;
+} yyltype;
+# define YYLTYPE yyltype
+#endif
+
+m4_if(b4_pure, [0],
+[extern YYLTYPE b4_prefix[]lloc;])
+])
+#endif /* not b4_header_guard */
+])
index 0d3ce7d5fd7d8f7e87c6fb0343205ba98b571776..2441d0d16b007785fac10cfa6d6e1c72c98058f3 100644 (file)
@@ -5532,7 +5532,6 @@ will produce @file{output.c++} and @file{outfile.h++}.
 @menu
 * Bison Options::     All the options described in detail,
                        in alphabetical order by short options.
-* Environment Variables::  Variables which affect Bison execution.
 * Option Cross Key::  Alphabetical list of long options.
 * VMS Invocation::    Bison command syntax on VMS.
 @end menu
@@ -5681,23 +5680,6 @@ difference is that it has an optionnal argument which is the name of
 the output graph filename.
 @end table
 
-@node Environment Variables
-@section Environment Variables
-@cindex environment variables
-@cindex BISON_SIMPLE
-
-Here is a list of environment variables which affect the way Bison
-runs.
-
-@table @samp
-@item BISON_SIMPLE
-Much of the parser generated by Bison is copied verbatim from a file
-called @file{bison.simple}.  If Bison cannot find that file, or if you
-would like to direct Bison to use a different copy, setting the
-environment variable @code{BISON_SIMPLE} to the path of the file will
-cause Bison to use that copy instead.
-@end table
-
 @node Option Cross Key
 @section Option Cross Key
 
index dd3db47b2285c04c52a70279f21b0e7f0e732cf3..afe113235b9a8179d0cacf0a526a27b992f69a41 100644 (file)
@@ -1140,7 +1140,7 @@ prepare (void)
 
   /* Find the right skeleton file.  */
   if (!skeleton)
-    skeleton = "bison.simple";
+    skeleton = "yacc.c";
 
   /* Parse the skeleton file and output the needed parsers.  */
   muscle_insert ("skeleton", skeleton);