bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

06-fyi-data-skeletons.patch


From: Akim Demaille
Subject: 06-fyi-data-skeletons.patch
Date: Tue, 05 Feb 2002 10:08:51 +0100

Index: ChangeLog
from  Akim Demaille  <address@hidden>
        
        * src/bison.simple, src/bison.hairy, src/bison.c++: Move to...
        * data/: here.
        
Index: Makefile.am
--- Makefile.am Sat, 01 Dec 2001 01:14:25 +0100 akim
+++ Makefile.am Mon, 04 Feb 2002 17:11:45 +0100 akim
@@ -1,3 +1,5 @@
+## Copyright 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
@@ -18,7 +20,7 @@
 
 ACLOCAL_AMFLAGS = -I m4
 
-SUBDIRS = config intl po lib src doc m4 tests
+SUBDIRS = config intl po lib data src doc m4 tests
 
 EXTRA_DIST = REFERENCES configure.bat OChangeLog Makefile.maint GNUmakefile
 
Index: configure.in
--- configure.in Sat, 26 Jan 2002 15:02:41 +0100 akim
+++ configure.in Mon, 04 Feb 2002 17:15:23 +0100 akim
@@ -109,5 +109,6 @@
 AC_OUTPUT([Makefile
            config/Makefile
            intl/Makefile po/Makefile.in
+           data/Makefile
            lib/Makefile src/Makefile doc/Makefile
            m4/Makefile])
Index: src/Makefile.am
--- src/Makefile.am Sat, 26 Jan 2002 15:02:41 +0100 akim
+++ src/Makefile.am Mon, 04 Feb 2002 17:13:33 +0100 akim
@@ -57,6 +57,4 @@
  print.h reader.h reduce.h symtab.h warshall.h system.h \
  types.h vcg.h vcg_defaults.h
 
-pkgdata_DATA = bison.simple bison.hairy bison.c++
-
-EXTRA_DIST = $(pkgdata_DATA) build.com bison.cld vmshlp.mar
+EXTRA_DIST = build.com bison.cld vmshlp.mar
Index: src/output.c
--- src/output.c Wed, 09 Jan 2002 12:30:44 +0100 akim
+++ src/output.c Mon, 04 Feb 2002 16:56:14 +0100 akim
@@ -1,5 +1,5 @@
 /* Output the generated parsing program for bison,
-   Copyright 1984, 1986, 1989, 1992, 2000, 2001
+   Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002
    Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
Index: tests/bison.in
--- tests/bison.in Sat, 05 Jan 2002 14:26:46 +0100 akim
+++ tests/bison.in Mon, 04 Feb 2002 17:12:22 +0100 akim
@@ -3,9 +3,9 @@
 # Wrapper around a non installed bison to make it work as an installed one.
 
 # We want to use the files shipped with Bison.
-BISON_SIMPLE='@abs_top_srcdir@/src/bison.simple'
+BISON_SIMPLE='@abs_top_srcdir@/data/bison.simple'
 export BISON_SIMPLE
-BISON_HAIRY='@abs_top_srcdir@/src/bison.hairy'
+BISON_HAIRY='@abs_top_srcdir@/data/bison.hairy'
 export BISON_HAIRY
 
 exec '@abs_top_builddir@/src/bison' ${1+"$@"}
Index: data/Makefile.am
--- data/Makefile.am Mon, 04 Feb 2002 17:19:38 +0100 akim
+++ data/Makefile.am Mon, 04 Feb 2002 17:13:58 +0100 akim
@@ -0,0 +1,18 @@
+## 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 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
+
+dist_pkgdata_DATA = bison.simple bison.hairy bison.c++
Index: data/bison.hairy
--- data/bison.hairy Mon, 04 Feb 2002 17:19:38 +0100 akim
+++ data/bison.hairy Sat, 26 Jan 2002 14:54:05 +0100 akim
@@ -0,0 +1,336 @@
+%%{section} %%{output-prefix} %%{output-infix} %%".c"
+                                                         /* -*- C -*- */
+
+/* YYERROR and YYCOST are set by guards. If yyerror is set to a
+   nonzero value by a guard, the reduction with which the guard is
+   associated is not performed, and the error recovery mechanism is
+   invoked.  Yycost indicates the cost of performing the reduction
+   given the attributes of the symbols.  */
+static int yyerror;
+static int yycost;
+
+/* YYMAXDEPTH indicates the size of the parser's state and value
+   stacks.  */
+
+#ifndef        YYMAXDEPTH
+# define YYMAXDEPTH 500
+#endif
+
+/* YYMAXRULES must be at least as large as the number of rules that
+   could be placed in the rule queue.  That number could be determined
+   from the grammar and the size of the stack, but, as yet, it is not.
+   */
+
+#ifndef        YYMAXRULES
+# define YYMAXRULES 100
+#endif
+
+#ifndef        YYMAXBACKUP
+# define YYMAXBACKUP 100
+#endif
+
+
+/* The state stack. */
+static short yyss[YYMAXDEPTH];
+/* The semantic value stack.  */
+static YYSTYPE yyvs[YYMAXDEPTH];
+/* The location stack.  */
+static YYLTYPE yyls[YYMAXDEPTH];
+/* The rule queue. */
+static short yyrq[YYMAXRULES];
+/* The lookahead symbol. */
+static int yychar;
+
+/* the semantic value of the lookahead symbol.  */
+static YYSTYPE yylval;
+
+/* the semantic value for the state at the top of the state stack.  */
+static YYSTYPE yytval;
+
+/* the variable used to return semantic values from the action
+   routines.  */
+static YYSTYPE yyval;
+
+/* location data for the lookahead symbol.  */
+static YYLTYPE yylloc;
+
+/* location data for the state at the top of the state stack.  */
+static YYLTYPE yytloc;
+
+
+static int yynunlexed;
+static short yyunchar[YYMAXBACKUP];
+static YYSTYPE yyunval[YYMAXBACKUP];
+static YYLTYPE yyunloc[YYMAXBACKUP];
+
+/* a pointer to the top of the state stack; only set during error
+   recovery.  */
+static short *yygssp;
+
+/* a pointer to the top of the value stack; only set during error
+   recovery.  */
+static YYSTYPE *yygvsp;
+
+/* a pointer to the top of the location stack; only set during error
+   recovery.  */
+static YYLTYPE *yyglsp;
+
+
+/*--------------------------------------------------------------------.
+| Yyget is an interface between the parser and the lexical analyzer.  |
+| It is costly to provide such an interface, but it avoids requiring  |
+| the lexical analyzer to be able to back up the scan.                |
+`--------------------------------------------------------------------*/
+
+static inline void
+yyget (void)
+{
+  if (yynunlexed > 0)
+    {
+      yynunlexed--;
+      yychar = yyunchar[yynunlexed];
+      yylval = yyunval[yynunlexed];
+      yylloc = yyunloc[yynunlexed];
+    }
+  else if (yychar <= 0)
+    yychar = 0;
+  else
+    {
+      yychar = yylex ();
+      if (yychar < 0)
+       yychar = 0;
+      else
+       yychar = YYTRANSLATE (yychar);
+    }
+}
+
+
+static inline void
+yyunlex (int chr, YYSTYPE val, YYLTYPE loc)
+{
+  yyunchar[yynunlexed] = chr;
+  yyunval[yynunlexed] = val;
+  yyunloc[yynunlexed] = loc;
+  yynunlexed++;
+}
+
+
+static inline void
+yyrestore (short *first, short *last)
+{
+  short *ssp;
+  short *rp;
+  int symbol;
+  int state;
+  int tvalsaved;
+
+  ssp = yygssp;
+  yyunlex (yychar, yylval, yylloc);
+
+  tvalsaved = 0;
+  while (first != last)
+    {
+      symbol = yystos[*ssp];
+      if (symbol < YYNTBASE)
+       {
+         yyunlex (symbol, yytval, yytloc);
+         tvalsaved = 1;
+         ssp--;
+       }
+
+      ssp--;
+
+      if (first == yyrq)
+       first = yyrq + YYMAXRULES;
+
+      first--;
+
+      for (rp = yyrhs + yyprhs[*first]; symbol = *rp; rp++)
+       {
+         if (symbol < YYNTBASE)
+           state = yytable[yypact[*ssp] + symbol];
+         else
+           {
+             state = yypgoto[symbol - YYNTBASE] + *ssp;
+
+             if (state >= 0 && state <= YYLAST && yycheck[state] == *ssp)
+               state = yytable[state];
+             else
+               state = yydefgoto[symbol - YYNTBASE];
+           }
+
+         *++ssp = state;
+       }
+    }
+
+  if (!tvalsaved && ssp > yyss)
+    {
+      yyunlex (yystos[*ssp], yytval, yytloc);
+      ssp--;
+    }
+
+  yygssp = ssp;
+}
+
+
+
+int
+yyparse (void)
+{
+  int yystate;
+  int yyn;
+  short *yyssp;
+  short *yyrq0;
+  short *yyptr;
+  YYSTYPE *yyvsp;
+
+  int yylen;
+  YYLTYPE *yylsp;
+  short *yyrq1;
+  short *yyrq2;
+
+  yystate = 0;
+  yyssp = yyss - 1;
+  yyvsp = yyvs - 1;
+  yylsp = yyls - 1;
+  yyrq0 = yyrq;
+  yyrq1 = yyrq0;
+  yyrq2 = yyrq0;
+
+  yychar = yylex ();
+  if (yychar < 0)
+    yychar = 0;
+  else
+    yychar = YYTRANSLATE (yychar);
+
+yynewstate:
+
+  if (yyssp >= yyss + YYMAXDEPTH - 1)
+    {
+      yyabort ("Parser Stack Overflow");
+      YYABORT;
+    }
+
+  *++yyssp = yystate;
+
+yyresume:
+
+  yyn = yypact[yystate];
+  if (yyn == YYFLAG)
+    goto yydefault;
+
+  yyn += yychar;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar)
+    goto yydefault;
+
+  yyn = yytable[yyn];
+  if (yyn < 0)
+    {
+      yyn = -yyn;
+      goto yyreduce;
+    }
+  else if (yyn == 0)
+    goto yyerrlab;
+
+  yystate = yyn;
+
+  yyptr = yyrq2;
+  while (yyptr != yyrq1)
+    {
+      yyn = *yyptr++;
+      yylen = yyr2[yyn];
+      yyvsp -= yylen;
+      yylsp -= yylen;
+
+      yyguard (yyn, yyvsp, yylsp);
+      if (yyerror)
+       goto yysemerr;
+
+      yyaction (yyn, yyvsp, yylsp);
+      *++yyvsp = yyval;
+
+      yylsp++;
+      if (yylen == 0)
+       {
+         yylsp->first_line = yytloc.first_line;
+         yylsp->first_column = yytloc.first_column;
+         yylsp->last_line = (yylsp - 1)->last_line;
+         yylsp->last_column = (yylsp - 1)->last_column;
+         yylsp->text = 0;
+       }
+      else
+       {
+         yylsp->last_line = (yylsp + yylen - 1)->last_line;
+         yylsp->last_column = (yylsp + yylen - 1)->last_column;
+       }
+
+      if (yyptr == yyrq + YYMAXRULES)
+       yyptr = yyrq;
+    }
+
+  if (yystate == YYFINAL)
+    YYACCEPT;
+
+  yyrq2 = yyptr;
+  yyrq1 = yyrq0;
+
+  *++yyvsp = yytval;
+  *++yylsp = yytloc;
+  yytval = yylval;
+  yytloc = yylloc;
+  yyget ();
+
+  goto yynewstate;
+
+yydefault:
+
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+
+yyreduce:
+
+  *yyrq0++ = yyn;
+
+  if (yyrq0 == yyrq + YYMAXRULES)
+    yyrq0 = yyrq;
+
+  if (yyrq0 == yyrq2)
+    {
+      yyabort ("Parser Rule Queue Overflow");
+      YYABORT;
+    }
+
+  yyssp -= yyr2[yyn];
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
+  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTBASE];
+
+  goto yynewstate;
+
+yysemerr:
+  *--yyptr = yyn;
+  yyrq2 = yyptr;
+  yyvsp += yyr2[yyn];
+
+yyerrlab:
+
+  yygssp = yyssp;
+  yygvsp = yyvsp;
+  yyglsp = yylsp;
+  yyrestore (yyrq0, yyrq2);
+  yyrecover ();
+  yystate = *yygssp;
+  yyssp = yygssp;
+  yyvsp = yygvsp;
+  yyrq0 = yyrq;
+  yyrq1 = yyrq0;
+  yyrq2 = yyrq0;
+  goto yyresume;
+}
+
+%%{actions}
Index: data/bison.simple
--- data/bison.simple Mon, 04 Feb 2002 17:19:38 +0100 akim
+++ data/bison.simple Sat, 26 Jan 2002 14:54:05 +0100 akim
@@ -0,0 +1,1141 @@
+%%{section} %%{output-prefix} %%{output-infix} %%".c"
+/* -*- C -*- */
+
+/* A Bison parser, made from %%{filename}
+   by GNU bison %%{version}.  */
+
+/* Skeleton output parser for bison,
+   Copyright 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 hairy parser
+   used when %semantic_parser is specified.  */
+
+/* Identify Bison output.  */
+#define YYBISON        1
+
+/* Pure parsers.  */
+#define YYPURE %%{pure}
+
+/* Using locations.  */
+#define YYLSP_NEEDED %%{locations-flag}
+
+/* If NAME_PREFIX is specified substitute the variables and functions
+   names.  */
+#define yyparse %%{prefix}parse
+#define yylex   %%{prefix}lex
+#define yyerror %%{prefix}error
+#define yylval  %%{prefix}lval
+#define yychar  %%{prefix}char
+#define yydebug %%{prefix}debug
+#define yynerrs %%{prefix}nerrs
+#if YYLSP_NEEDED
+# define yylloc %%{prefix}lloc
+#endif
+
+
+/* Copy the user declarations.  */
+%%{prologue}
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG %%{debug}
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE %%{error-verbose}
+#endif
+
+#ifndef YYSTYPE
+typedef %%{stype} yystype;
+# define YYSTYPE yystype
+#endif
+
+#ifndef YYLTYPE
+typedef struct yyltype
+{
+  int first_line;
+  int first_column;
+  int last_line;
+  int last_column;
+} yyltype;
+# define YYLTYPE %%{ltype}
+#endif
+
+/* Line %%{skeleton-line} of %%{skeleton}.  */
+#line %%{line} "%%{parser-file-name}"
+
+/* 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.  */
+
+#ifdef __cplusplus
+# define YYSTD(x) std::x
+#else
+# define YYSTD(x) x
+#endif
+
+#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# if YYSTACK_USE_ALLOCA
+#  define YYSTACK_ALLOC alloca
+#  define YYSIZE_T YYSTD (size_t)
+# else
+#  ifndef YYSTACK_USE_ALLOCA
+#   if defined (alloca) || defined (_ALLOCA_H)
+#    define YYSTACK_ALLOC alloca
+#    define YYSIZE_T YYSTD (size_t)
+#   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
+#  ifdef __cplusplus
+#   include <cstdlib> /* INFRINGES ON USER NAME SPACE */
+#   define YYSIZE_T std::size_t
+#  else
+#   ifdef __STDC__
+#    include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#    define YYSIZE_T size_t
+#   endif
+#  endif
+#  define YYSTACK_ALLOC YYSTD (malloc)
+#  define YYSTACK_FREE YYSTD (free)
+# endif
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  short yyss;
+  YYSTYPE yyvs;
+# if YYLSP_NEEDED
+  YYLTYPE yyls;
+# endif
+};
+
+/* 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.  */
+# if YYLSP_NEEDED
+#  define YYSTACK_BYTES(N) \
+    ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE))      \
+     + 2 * YYSTACK_GAP_MAX)
+# else
+#  define YYSTACK_BYTES(N) \
+    ((N) * (sizeof (short) + sizeof (YYSTYPE))                         \
+     + YYSTACK_GAP_MAX)
+# endif
+
+/* Relocate the TYPE 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(Type, Stack)                                 \
+    do                                                                 \
+      {                                                                        
\
+       YYSIZE_T yynewbytes;                                            \
+       yymemcpy ((char *) yyptr, (char *) (Stack),                     \
+                 yysize * (YYSIZE_T) sizeof (Type));                   \
+       Stack = &yyptr->Stack;                                          \
+       yynewbytes = yystacksize * sizeof (Type) + YYSTACK_GAP_MAX;     \
+       yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                        
\
+    while (0)
+
+#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
+
+/* Tokens.  */
+%%{tokendef}
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL  %%{final}
+#define YYFLAG  %%{flag}
+#define YYLAST   %%{last}
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS  %%{ntokens}
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS  %%{nnts}
+/* YYNRULES -- Number of rules. */
+#define YYNRULES  %%{nrules}
+/* YYNRULES -- Number of states. */
+#define YYNSTATES  %%{nstates}
+#define YYMAXUTOK  %%{maxtok}
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYTRANSLATE(x) ((unsigned)(x) <= %%{maxtok} ? yytranslate[x] : 
%%{nsym})
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const char yytranslate[] =
+{
+  %%{translate}
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const short yyprhs[] =
+{
+  %%{prhs}
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const short yyrhs[] =
+{
+  %%{rhs}
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const short yyrline[] =
+{
+  %%{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[] =
+{
+  %%{tname}
+};
+#endif
+
+/* YYTOKNUM[YYN] -- Index in YYTNAME corresponding to YYLEX.  */
+static const short yytoknum[] =
+{
+  %%{toknum}
+};
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const short yyr1[] =
+{
+  %%{r1}
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const short yyr2[] =
+{
+  %%{r2}
+};
+
+/* 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.  */
+static const short yydefact[] =
+{
+  %%{defact}
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const short yydefgoto[] =
+{
+  %%{defgoto}
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+static const short yypact[] =
+{
+  %%{pact}
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const short yypgoto[] =
+{
+  %%{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[] =
+{
+  %%{table}
+};
+
+static const short yycheck[] =
+{
+  %%{check}
+};
+
+
+#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)
+# ifdef __cplusplus
+#  include <cstddef> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T std::size_t
+# else
+#  ifdef __STDC__
+#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#   define YYSIZE_T size_t
+#  endif
+# 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).
+
+   When YYLLOC_DEFAULT is run, CURRENT is set the location of the
+   first token.  By default, to implement support for ranges, extend
+   its range to the last symbol.  */
+
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)               \
+   Current.last_line   = Rhs[N].last_line;     \
+   Current.last_column = Rhs[N].last_column;
+#endif
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#if YYPURE
+# if YYLSP_NEEDED
+#  ifdef YYLEX_PARAM
+#   define YYLEX               yylex (&yylval, &yylloc, YYLEX_PARAM)
+#  else
+#   define YYLEX               yylex (&yylval, &yylloc)
+#  endif
+# else /* !YYLSP_NEEDED */
+#  ifdef YYLEX_PARAM
+#   define YYLEX               yylex (&yylval, YYLEX_PARAM)
+#  else
+#   define YYLEX               yylex (&yylval)
+#  endif
+# endif /* !YYLSP_NEEDED */
+#else /* !YYPURE */
+# define YYLEX                 yylex ()
+#endif /* !YYPURE */
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  ifdef __cplusplus
+#   include <cstdio>  /* INFRINGES ON USER NAME SPACE */
+#  else
+#   include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  endif
+#  define YYFPRINTF YYSTD (fprintf)
+# endif
+
+# define YYDPRINTF(Args)                       \
+do {                                           \
+  if (yydebug)                                 \
+    YYFPRINTF Args;                            \
+} while (0)
+/* Nonzero means print parse trace. [The following comment makes no
+   sense to me.  Could someone clarify it?  --akim] Since this is
+   uninitialized, it does not stop multiple parsers from coexisting.
+   */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+#endif /* !YYDEBUG */
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef        YYINITDEPTH
+# define YYINITDEPTH %%{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 %%{maxdepth}
+#endif
+
+
+
+#if ! defined (yyoverflow) && ! defined (yymemcpy)
+# if __GNUC__ > 1              /* GNU C and GNU C++ define this.  */
+#  define yymemcpy __builtin_memcpy
+# else                         /* not GNU C or C++ */
+
+/* This is the most reliable way to avoid incompatibilities
+   in available built-in functions on various systems.  */
+static void
+#  if defined (__STDC__) || defined (__cplusplus)
+yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T yycount)
+#  else
+yymemcpy (yyto, yyfrom, yycount)
+     char *yyto;
+     const char *yyfrom;
+     YYSIZE_T yycount;
+#  endif
+{
+  register const char *yyf = yyfrom;
+  register char *yyt = yyto;
+  register YYSIZE_T yyi = yycount;
+
+  while (yyi-- != 0)
+    *yyt++ = *yyf++;
+}
+# endif
+#endif
+
+#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 */
+
+
+
+/* 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
+# ifdef __cplusplus
+#  define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
+#  define YYPARSE_PARAM_DECL
+# else /* !__cplusplus */
+#  define YYPARSE_PARAM_ARG YYPARSE_PARAM
+#  define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
+# endif /* !__cplusplus */
+#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
+
+/* YY_DECL_VARIABLES -- depending whether we use a pure parser,
+   variables are global, or local to YYPARSE.  */
+
+#define YY_DECL_NON_LSP_VARIABLES                      \
+/* The lookahead symbol.  */                           \
+int yychar;                                            \
+                                                       \
+/* The semantic value of the lookahead symbol.  */     \
+YYSTYPE yylval;                                                \
+                                                       \
+/* Number of parse errors so far.  */                  \
+int yynerrs;
+
+#if YYLSP_NEEDED
+# define YY_DECL_VARIABLES                     \
+YY_DECL_NON_LSP_VARIABLES                      \
+                                               \
+/* Location data for the lookahead symbol.  */ \
+YYLTYPE yylloc;
+#else
+# define YY_DECL_VARIABLES                     \
+YY_DECL_NON_LSP_VARIABLES
+#endif
+
+/* If nonreentrant, generate the variables here.  */
+
+#if !YYPURE
+YY_DECL_VARIABLES
+#endif  /* !YYPURE */
+
+int
+yyparse (YYPARSE_PARAM_ARG)
+     YYPARSE_PARAM_DECL
+{
+  /* If reentrant, generate the variables here.  */
+#if YYPURE
+  YY_DECL_VARIABLES
+#endif  /* !YYPURE */
+
+  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;
+
+#if YYLSP_NEEDED
+  /* The location stack.  */
+  YYLTYPE yylsa[YYINITDEPTH];
+  YYLTYPE *yyls = yylsa;
+  YYLTYPE *yylsp;
+#endif
+
+#if YYLSP_NEEDED
+# define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
+#else
+# define YYPOPSTACK   (yyvsp--, yyssp--)
+#endif
+
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+#if YYLSP_NEEDED
+  YYLTYPE yyloc;
+#endif
+
+  /* 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;
+#if YYLSP_NEEDED
+  yylsp = yyls;
+#endif
+  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;
+
+       /* Each stack pointer address is followed by the size of the
+          data in use in that stack, in bytes.  */
+# if YYLSP_NEEDED
+       YYLTYPE *yyls1 = yyls;
+       /* 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),
+                   &yyls1, yysize * sizeof (*yylsp),
+                   &yystacksize);
+       yyls = yyls1;
+# else
+       yyoverflow ("parser stack overflow",
+                   &yyss1, yysize * sizeof (*yyssp),
+                   &yyvs1, yysize * sizeof (*yyvsp),
+                   &yystacksize);
+# endif
+       yyss = yyss1;
+       yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+      /* 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 (short, yyss);
+       YYSTACK_RELOCATE (YYSTYPE, yyvs);
+# if YYLSP_NEEDED
+       YYSTACK_RELOCATE (YYLTYPE, yyls);
+# endif
+# undef YYSTACK_RELOCATE
+       if (yyss1 != yyssa)
+         YYSTACK_FREE (yyss1);
+      }
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+#if YYLSP_NEEDED
+      yylsp = yyls + yysize - 1;
+#endif
+
+      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);
+
+#if YYDEBUG
+     /* We have to keep this `#if YYDEBUG', since we use variables
+       which are defined only if `YYDEBUG' is set.  */
+      if (yydebug)
+       {
+         YYFPRINTF (stderr, "Next token is %d (%s",
+                    yychar, yytname[yychar1]);
+         /* Give the individual parser a way to print the precise
+            meaning of a token, for further debugging info.  */
+# ifdef YYPRINT
+         YYPRINT (stderr, yychar, yylval);
+# endif
+         YYFPRINTF (stderr, ")\n");
+       }
+#endif
+    }
+
+  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;
+#if YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
+
+  /* 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];
+
+#if YYLSP_NEEDED
+  /* Similarly for the default location.  Let the user run additional
+     commands if for instance locations are ranges.  */
+  yyloc = yylsp[1-yylen];
+  YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
+#endif
+
+#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)
+    {
+      %%{actions}
+    }
+
+/* Line %%{skeleton-line} of %%{skeleton}.  */
+#line %%{line} "%%{parser-file-name}"
+
+  yyvsp -= yylen;
+  yyssp -= yylen;
+#if YYLSP_NEEDED
+  yylsp -= yylen;
+#endif
+
+#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;
+#if YYLSP_NEEDED
+  *++yylsp = yyloc;
+#endif
+
+  /* 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)
+       YYABORT;
+      YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
+                 yychar, yytname[yychar1]));
+      yychar = YYEMPTY;
+    }
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+
+  yyerrstatus = 3;             /* Each real token shifted decrements this.  */
+
+  goto yyerrhandle;
+
+
+/*-------------------------------------------------------------------.
+| yyerrdefault -- current state does not do anything special for the |
+| error token.                                                       |
+`-------------------------------------------------------------------*/
+yyerrdefault:
+#if 0
+  /* This is wrong; only states that explicitly want error tokens
+     should shift them.  */
+
+  /* If its default is to accept any token, ok.  Otherwise pop it.  */
+  yyn = yydefact[yystate];
+  if (yyn)
+    goto yydefault;
+#endif
+
+
+/*---------------------------------------------------------------.
+| yyerrpop -- pop the current state because it cannot handle the |
+| error token.                                                   |
+`---------------------------------------------------------------*/
+yyerrpop:
+  if (yyssp == yyss)
+    YYABORT;
+  yyvsp--;
+  yystate = *--yyssp;
+#if YYLSP_NEEDED
+  yylsp--;
+#endif
+
+#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
+
+/*--------------.
+| yyerrhandle.  |
+`--------------*/
+yyerrhandle:
+  yyn = yypact[yystate];
+  if (yyn == YYFLAG)
+    goto yyerrdefault;
+
+  yyn += YYTERROR;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
+    goto yyerrdefault;
+
+  yyn = yytable[yyn];
+  if (yyn < 0)
+    {
+      if (yyn == YYFLAG)
+       goto yyerrpop;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+  else if (yyn == 0)
+    goto yyerrpop;
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  YYDPRINTF ((stderr, "Shifting error token, "));
+
+  *++yyvsp = yylval;
+#if YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+/*---------------------------------------------.
+| yyoverflowab -- parser overflow comes here.  |
+`---------------------------------------------*/
+yyoverflowlab:
+  yyerror ("parser stack overflow");
+  yyresult = 2;
+  /* Fall through.  */
+
+yyreturn:
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+  return yyresult;
+}
+
+%%{epilogue}
Index: data/bison.c++
--- data/bison.c++ Mon, 04 Feb 2002 17:19:38 +0100 akim
+++ data/bison.c++ Sat, 26 Jan 2002 14:54:05 +0100 akim
@@ -0,0 +1,523 @@
+%%{section} %%{output-prefix} %%{output-infix} %%".hh"
+/* -*- C++ -*- */
+
+/* A Bison parser, made from %%filename,
+   by GNU bison %%version.  */
+
+/* Skeleton output parser for bison,
+   Copyright 1984, 1989, 1990, 2000, 2001 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.  */
+
+#include "stack.hh"
+/* #include "parser.hh" */
+#include "location.hh"
+
+namespace yy
+{
+  class %%{name};
+ 
+  template < typename P >
+  struct Traits
+  {
+  };
+
+  template < >
+  struct Traits< %%{name} >
+  {
+    typedef int       StateType;
+    typedef %%{stype} SemanticType;
+    typedef Location  LocationType;
+  };
+}
+
+%%{prologue}
+
+namespace yy
+{
+  class %%{name}
+  {
+  public:
+    
+    typedef Traits< %%{name} >::StateType StateType;
+    typedef Traits< %%{name} >::SemanticType SemanticType;
+    typedef Traits< %%{name} >::LocationType LocationType;
+
+    typedef Stack< StateType >    StateStack;
+    typedef Stack< SemanticType > SemanticStack;
+    typedef Stack< LocationType > LocationStack;
+
+    %%{name} () : debug (1)
+    {
+      looka = empty;
+    }
+
+    virtual int parse ();
+
+  private:
+    
+    /* Call to lexical analyser.  */
+    virtual 
+    void 
+    lex () 
+    { 
+      looka = yylex (&value);
+    }
+
+    /* 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 short line_[];
+    static const short r1_[];
+    static const short r2_[];
+    static const char* const name_[];
+
+    /* More tables, for debugging.  */
+    /* FIXME: These tables should not be printed when not in debug 
+       mode.  %%ifdef?  */
+    static const short rhs_[];
+    static const short prhs_[];
+    static const short rline_[];
+
+    /* Even more tables.  */
+    static inline char translate (int token);
+
+    /* Eof and empty.  */
+    static const int eof;
+    static const int empty;
+
+    /* State.  */
+    int n;
+    int len;
+    int debug;
+    int state;
+    
+    /* Lookahead.  */
+    int looka;
+    int ilooka;
+    
+    /* @$ and $$.  */
+    SemanticType value;
+    LocationType location;
+  };
+}
+
+%%{section} %%{output-prefix} %%{output-infix} %%".cc"
+#include "%%{output-prefix}%%{output-infix}.hh"
+
+/* Enable debugging if requested.  */
+#if %%{debug}
+
+# include <cstdio>
+# define YYFPRINTF std::fprintf
+
+# define YYDPRINTF(Args)                       \
+do {                                           \
+  if (debug)                                   \
+    YYFPRINTF Args;                            \
+} while (0)
+/* Nonzero means print parse trace. [The following comment makes no
+   sense to me.  Could someone clarify it?  --akim] Since this is
+   uninitialized, it does not stop multiple parsers from coexisting.
+   */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+#endif /* !YYDEBUG */
+
+/* Tokens.  */
+%%{tokendef}
+
+int
+yy::%%{name}::parse ()
+{
+  /* Initialize stack.  */
+  state_stack = StateStack (0);
+  semantic_stack = SemanticStack (1);
+  location_stack = LocationStack (1);
+
+  /* Reserve initial space.  The C parser needed that, but is it really
+     useful here?  */
+  state_stack.reserve (%%{initdepth});
+  semantic_stack.reserve (%%{initdepth});
+  location_stack.reserve (%%{initdepth});
+
+  /* Start.  */
+  state = 0;
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  /* New state.  */
+ yynewstate:
+  state_stack.push (state);
+  YYDPRINTF ((stderr, "Entering state %d\n", state));
+
+  /* Backup.  */
+ yybackup:
+
+  /* Try to take a decision without lookahead.  */
+  n = pact_[state];
+  if (n == %%{flag})
+    goto yydefault;
+
+  /* Read a lookahead token.  */
+  if (looka == empty)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      lex ();
+    }
+
+  /* Convert token to internal form.  */
+  if (looka <= 0)
+    {
+      looka = eof;
+      ilooka = 0;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      ilooka = translate (looka);
+#if %%{debug}
+      YYFPRINTF (stderr, "Next token is %d (%s", looka, name_[ilooka]);
+      YYFPRINTF (stderr, ")\n");
+#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.  */
+  YYDPRINTF ((stderr, "Shifting token %d (%s), ", 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);
+  state = n;
+  goto yynewstate;
+
+  /* Default action.  */
+ yydefault:
+  n = defact_[state];
+  if (n == 0)
+    goto yyerrlab;
+
+  /* Reduce.  */
+ yyreduce:
+  len = r2_[n];
+  value = semantic_stack[1 - len];
+  location = location_stack[1 - len];
+
+#if %%{debug}
+  if (debug)
+    {
+      YYFPRINTF (stderr, "Reducing via rule %d (line %d), ", n - 1, rline_[n]);
+      for (unsigned i = prhs_[n];
+          rhs_[i] >= 0; ++i)
+       YYFPRINTF (stderr, "%s ", name_[rhs_[i]]);
+      YYFPRINTF (stderr, "-> %s\n", name_[r1_[n]]);
+    }
+#endif
+  
+  {
+    SemanticType& yyval (value);
+    SemanticStack& yyvsp (semantic_stack);
+
+    switch (n)
+      {
+       %%{actions}
+      }
+  }
+  
+  state_stack.pop (len);
+  semantic_stack.pop (len);
+  location_stack.pop (len);
+
+#if %%{debug}
+  if (debug)
+    {
+      YYFPRINTF (stderr, "state stack now");
+      for (StateStack::ConstIterator i = state_stack.begin (); 
+          i != state_stack.end (); ++i)
+       YYFPRINTF (stderr, " %d", *i);
+      YYFPRINTF (stderr, "\n");
+    }
+#endif
+  
+  semantic_stack.push (value);
+  location_stack.push (location);
+
+  /* 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:
+  std::cerr << "Parse error." << std::endl; // FIXME: Need something like 
yyerror?
+  return 1;
+  
+  /* Accept.  */
+ yyacceptlab:
+  return 0;
+}
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+const short 
+yy::%%{name}::pact_[] =
+{
+  %%{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::%%{name}::defact_[] =
+{
+  %%{defact}
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+const short 
+yy::%%{name}::pgoto_[] =
+{
+  %%{pgoto}
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+const short 
+yy::%%{name}::defgoto_[] =
+{
+  %%{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::%%{name}::table_[] =
+{
+  %%{table}
+};
+
+/* YYCHECK.  */
+const short 
+yy::%%{name}::check_[] =
+{
+  %%{check}
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+const short
+yy::%%{name}::line_[] =
+{
+  %%{line}
+};
+
+/*YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+const short 
+yy::%%{name}::r1_[] =
+{
+  %%{r1}
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+const short 
+yy::%%{name}::r2_[] =
+{
+  %%{r2}
+};
+
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+const char*
+const yy::%%{name}::name_[] =
+{
+  %%{tname}
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+const short 
+yy::%%{name}::rhs_[] =
+{
+  %%{rhs}
+};
+
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+const short 
+yy::%%{name}::prhs_[] =
+{
+  %%{prhs}
+};
+
+/* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
+const short 
+yy::%%{name}::rline_[] =
+{
+  %%{rline}
+};
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+char
+yy::%%{name}::translate (int token)
+{
+  static 
+  const char 
+  translate_[] =
+  {
+    %%{translate}
+  };
+  return ((unsigned)(token) <= %%{maxtok} ? translate_[token] : %%{nsym});
+}
+
+const int yy::%%{name}::eof = 0;
+const int yy::%%{name}::empty = -2;
+
+%%{epilogue}
+
+%%{section} %%"stack.hh"
+#ifndef BISON_STACK_HH
+# define BISON_STACK_HH
+
+#include <vector>
+
+namespace yy
+{
+  template < class T, class S = std::vector< 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 [] (int index)
+    {
+      return seq_[seq_.size () - 1 + index];
+    }
+
+    inline
+    const T&
+    operator [] (int index) const
+    {
+      return seq_[seq_.size () - 1 + index];
+    }
+
+    inline
+    void
+    push (const T& t)
+    {
+      seq_.push_back (t);
+    }
+
+    inline
+    void
+    pop (unsigned n = 1)
+    {
+      for (; n; --n)
+       seq_.pop_back ();
+    }
+    
+    inline
+    void
+    reserve (unsigned n)
+    {
+      seq_.reserve (n);
+    }
+
+    inline ConstIterator begin () const { return seq_.begin (); }
+    inline ConstIterator end () const { return seq_.end (); }
+
+  private:
+
+    S seq_;
+  };
+}
+
+#endif // not BISON_STACK_HH
+
+%%{section} %%"location.hh"
+#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
Index: src/bison.hairy
--- src/bison.hairy Wed, 09 Jan 2002 12:30:44 +0100 akim
+++ src/bison.hairy Mon, 04 Feb 2002 17:19:38 +0100 akim
@@ -1,336 +0,0 @@
-%%{section} %%{output-prefix} %%{output-infix} %%".c"
-                                                         /* -*- C -*- */
-
-/* YYERROR and YYCOST are set by guards. If yyerror is set to a
-   nonzero value by a guard, the reduction with which the guard is
-   associated is not performed, and the error recovery mechanism is
-   invoked.  Yycost indicates the cost of performing the reduction
-   given the attributes of the symbols.  */
-static int yyerror;
-static int yycost;
-
-/* YYMAXDEPTH indicates the size of the parser's state and value
-   stacks.  */
-
-#ifndef        YYMAXDEPTH
-# define YYMAXDEPTH 500
-#endif
-
-/* YYMAXRULES must be at least as large as the number of rules that
-   could be placed in the rule queue.  That number could be determined
-   from the grammar and the size of the stack, but, as yet, it is not.
-   */
-
-#ifndef        YYMAXRULES
-# define YYMAXRULES 100
-#endif
-
-#ifndef        YYMAXBACKUP
-# define YYMAXBACKUP 100
-#endif
-
-
-/* The state stack. */
-static short yyss[YYMAXDEPTH];
-/* The semantic value stack.  */
-static YYSTYPE yyvs[YYMAXDEPTH];
-/* The location stack.  */
-static YYLTYPE yyls[YYMAXDEPTH];
-/* The rule queue. */
-static short yyrq[YYMAXRULES];
-/* The lookahead symbol. */
-static int yychar;
-
-/* the semantic value of the lookahead symbol.  */
-static YYSTYPE yylval;
-
-/* the semantic value for the state at the top of the state stack.  */
-static YYSTYPE yytval;
-
-/* the variable used to return semantic values from the action
-   routines.  */
-static YYSTYPE yyval;
-
-/* location data for the lookahead symbol.  */
-static YYLTYPE yylloc;
-
-/* location data for the state at the top of the state stack.  */
-static YYLTYPE yytloc;
-
-
-static int yynunlexed;
-static short yyunchar[YYMAXBACKUP];
-static YYSTYPE yyunval[YYMAXBACKUP];
-static YYLTYPE yyunloc[YYMAXBACKUP];
-
-/* a pointer to the top of the state stack; only set during error
-   recovery.  */
-static short *yygssp;
-
-/* a pointer to the top of the value stack; only set during error
-   recovery.  */
-static YYSTYPE *yygvsp;
-
-/* a pointer to the top of the location stack; only set during error
-   recovery.  */
-static YYLTYPE *yyglsp;
-
-
-/*--------------------------------------------------------------------.
-| Yyget is an interface between the parser and the lexical analyzer.  |
-| It is costly to provide such an interface, but it avoids requiring  |
-| the lexical analyzer to be able to back up the scan.                |
-`--------------------------------------------------------------------*/
-
-static inline void
-yyget (void)
-{
-  if (yynunlexed > 0)
-    {
-      yynunlexed--;
-      yychar = yyunchar[yynunlexed];
-      yylval = yyunval[yynunlexed];
-      yylloc = yyunloc[yynunlexed];
-    }
-  else if (yychar <= 0)
-    yychar = 0;
-  else
-    {
-      yychar = yylex ();
-      if (yychar < 0)
-       yychar = 0;
-      else
-       yychar = YYTRANSLATE (yychar);
-    }
-}
-
-
-static inline void
-yyunlex (int chr, YYSTYPE val, YYLTYPE loc)
-{
-  yyunchar[yynunlexed] = chr;
-  yyunval[yynunlexed] = val;
-  yyunloc[yynunlexed] = loc;
-  yynunlexed++;
-}
-
-
-static inline void
-yyrestore (short *first, short *last)
-{
-  short *ssp;
-  short *rp;
-  int symbol;
-  int state;
-  int tvalsaved;
-
-  ssp = yygssp;
-  yyunlex (yychar, yylval, yylloc);
-
-  tvalsaved = 0;
-  while (first != last)
-    {
-      symbol = yystos[*ssp];
-      if (symbol < YYNTBASE)
-       {
-         yyunlex (symbol, yytval, yytloc);
-         tvalsaved = 1;
-         ssp--;
-       }
-
-      ssp--;
-
-      if (first == yyrq)
-       first = yyrq + YYMAXRULES;
-
-      first--;
-
-      for (rp = yyrhs + yyprhs[*first]; symbol = *rp; rp++)
-       {
-         if (symbol < YYNTBASE)
-           state = yytable[yypact[*ssp] + symbol];
-         else
-           {
-             state = yypgoto[symbol - YYNTBASE] + *ssp;
-
-             if (state >= 0 && state <= YYLAST && yycheck[state] == *ssp)
-               state = yytable[state];
-             else
-               state = yydefgoto[symbol - YYNTBASE];
-           }
-
-         *++ssp = state;
-       }
-    }
-
-  if (!tvalsaved && ssp > yyss)
-    {
-      yyunlex (yystos[*ssp], yytval, yytloc);
-      ssp--;
-    }
-
-  yygssp = ssp;
-}
-
-
-
-int
-yyparse (void)
-{
-  int yystate;
-  int yyn;
-  short *yyssp;
-  short *yyrq0;
-  short *yyptr;
-  YYSTYPE *yyvsp;
-
-  int yylen;
-  YYLTYPE *yylsp;
-  short *yyrq1;
-  short *yyrq2;
-
-  yystate = 0;
-  yyssp = yyss - 1;
-  yyvsp = yyvs - 1;
-  yylsp = yyls - 1;
-  yyrq0 = yyrq;
-  yyrq1 = yyrq0;
-  yyrq2 = yyrq0;
-
-  yychar = yylex ();
-  if (yychar < 0)
-    yychar = 0;
-  else
-    yychar = YYTRANSLATE (yychar);
-
-yynewstate:
-
-  if (yyssp >= yyss + YYMAXDEPTH - 1)
-    {
-      yyabort ("Parser Stack Overflow");
-      YYABORT;
-    }
-
-  *++yyssp = yystate;
-
-yyresume:
-
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yydefault;
-
-  yyn += yychar;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar)
-    goto yydefault;
-
-  yyn = yytable[yyn];
-  if (yyn < 0)
-    {
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrlab;
-
-  yystate = yyn;
-
-  yyptr = yyrq2;
-  while (yyptr != yyrq1)
-    {
-      yyn = *yyptr++;
-      yylen = yyr2[yyn];
-      yyvsp -= yylen;
-      yylsp -= yylen;
-
-      yyguard (yyn, yyvsp, yylsp);
-      if (yyerror)
-       goto yysemerr;
-
-      yyaction (yyn, yyvsp, yylsp);
-      *++yyvsp = yyval;
-
-      yylsp++;
-      if (yylen == 0)
-       {
-         yylsp->first_line = yytloc.first_line;
-         yylsp->first_column = yytloc.first_column;
-         yylsp->last_line = (yylsp - 1)->last_line;
-         yylsp->last_column = (yylsp - 1)->last_column;
-         yylsp->text = 0;
-       }
-      else
-       {
-         yylsp->last_line = (yylsp + yylen - 1)->last_line;
-         yylsp->last_column = (yylsp + yylen - 1)->last_column;
-       }
-
-      if (yyptr == yyrq + YYMAXRULES)
-       yyptr = yyrq;
-    }
-
-  if (yystate == YYFINAL)
-    YYACCEPT;
-
-  yyrq2 = yyptr;
-  yyrq1 = yyrq0;
-
-  *++yyvsp = yytval;
-  *++yylsp = yytloc;
-  yytval = yylval;
-  yytloc = yylloc;
-  yyget ();
-
-  goto yynewstate;
-
-yydefault:
-
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-
-yyreduce:
-
-  *yyrq0++ = yyn;
-
-  if (yyrq0 == yyrq + YYMAXRULES)
-    yyrq0 = yyrq;
-
-  if (yyrq0 == yyrq2)
-    {
-      yyabort ("Parser Rule Queue Overflow");
-      YYABORT;
-    }
-
-  yyssp -= yyr2[yyn];
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
-  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTBASE];
-
-  goto yynewstate;
-
-yysemerr:
-  *--yyptr = yyn;
-  yyrq2 = yyptr;
-  yyvsp += yyr2[yyn];
-
-yyerrlab:
-
-  yygssp = yyssp;
-  yygvsp = yyvsp;
-  yyglsp = yylsp;
-  yyrestore (yyrq0, yyrq2);
-  yyrecover ();
-  yystate = *yygssp;
-  yyssp = yygssp;
-  yyvsp = yygvsp;
-  yyrq0 = yyrq;
-  yyrq1 = yyrq0;
-  yyrq2 = yyrq0;
-  goto yyresume;
-}
-
-%%{actions}
Index: src/bison.simple
--- src/bison.simple Wed, 09 Jan 2002 12:30:44 +0100 akim
+++ src/bison.simple Mon, 04 Feb 2002 17:19:38 +0100 akim
@@ -1,1141 +0,0 @@
-%%{section} %%{output-prefix} %%{output-infix} %%".c"
-/* -*- C -*- */
-
-/* A Bison parser, made from %%{filename}
-   by GNU bison %%{version}.  */
-
-/* Skeleton output parser for bison,
-   Copyright 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 hairy parser
-   used when %semantic_parser is specified.  */
-
-/* Identify Bison output.  */
-#define YYBISON        1
-
-/* Pure parsers.  */
-#define YYPURE %%{pure}
-
-/* Using locations.  */
-#define YYLSP_NEEDED %%{locations-flag}
-
-/* If NAME_PREFIX is specified substitute the variables and functions
-   names.  */
-#define yyparse %%{prefix}parse
-#define yylex   %%{prefix}lex
-#define yyerror %%{prefix}error
-#define yylval  %%{prefix}lval
-#define yychar  %%{prefix}char
-#define yydebug %%{prefix}debug
-#define yynerrs %%{prefix}nerrs
-#if YYLSP_NEEDED
-# define yylloc %%{prefix}lloc
-#endif
-
-
-/* Copy the user declarations.  */
-%%{prologue}
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG %%{debug}
-#endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE %%{error-verbose}
-#endif
-
-#ifndef YYSTYPE
-typedef %%{stype} yystype;
-# define YYSTYPE yystype
-#endif
-
-#ifndef YYLTYPE
-typedef struct yyltype
-{
-  int first_line;
-  int first_column;
-  int last_line;
-  int last_column;
-} yyltype;
-# define YYLTYPE %%{ltype}
-#endif
-
-/* Line %%{skeleton-line} of %%{skeleton}.  */
-#line %%{line} "%%{parser-file-name}"
-
-/* 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.  */
-
-#ifdef __cplusplus
-# define YYSTD(x) std::x
-#else
-# define YYSTD(x) x
-#endif
-
-#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# if YYSTACK_USE_ALLOCA
-#  define YYSTACK_ALLOC alloca
-#  define YYSIZE_T YYSTD (size_t)
-# else
-#  ifndef YYSTACK_USE_ALLOCA
-#   if defined (alloca) || defined (_ALLOCA_H)
-#    define YYSTACK_ALLOC alloca
-#    define YYSIZE_T YYSTD (size_t)
-#   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
-#  ifdef __cplusplus
-#   include <cstdlib> /* INFRINGES ON USER NAME SPACE */
-#   define YYSIZE_T std::size_t
-#  else
-#   ifdef __STDC__
-#    include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#    define YYSIZE_T size_t
-#   endif
-#  endif
-#  define YYSTACK_ALLOC YYSTD (malloc)
-#  define YYSTACK_FREE YYSTD (free)
-# endif
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  short yyss;
-  YYSTYPE yyvs;
-# if YYLSP_NEEDED
-  YYLTYPE yyls;
-# endif
-};
-
-/* 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.  */
-# if YYLSP_NEEDED
-#  define YYSTACK_BYTES(N) \
-    ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE))      \
-     + 2 * YYSTACK_GAP_MAX)
-# else
-#  define YYSTACK_BYTES(N) \
-    ((N) * (sizeof (short) + sizeof (YYSTYPE))                         \
-     + YYSTACK_GAP_MAX)
-# endif
-
-/* Relocate the TYPE 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(Type, Stack)                                 \
-    do                                                                 \
-      {                                                                        
\
-       YYSIZE_T yynewbytes;                                            \
-       yymemcpy ((char *) yyptr, (char *) (Stack),                     \
-                 yysize * (YYSIZE_T) sizeof (Type));                   \
-       Stack = &yyptr->Stack;                                          \
-       yynewbytes = yystacksize * sizeof (Type) + YYSTACK_GAP_MAX;     \
-       yyptr += yynewbytes / sizeof (*yyptr);                          \
-      }                                                                        
\
-    while (0)
-
-#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
-
-/* Tokens.  */
-%%{tokendef}
-
-/* YYFINAL -- State number of the termination state. */
-#define YYFINAL  %%{final}
-#define YYFLAG  %%{flag}
-#define YYLAST   %%{last}
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS  %%{ntokens}
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS  %%{nnts}
-/* YYNRULES -- Number of rules. */
-#define YYNRULES  %%{nrules}
-/* YYNRULES -- Number of states. */
-#define YYNSTATES  %%{nstates}
-#define YYMAXUTOK  %%{maxtok}
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYTRANSLATE(x) ((unsigned)(x) <= %%{maxtok} ? yytranslate[x] : 
%%{nsym})
-
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-static const char yytranslate[] =
-{
-  %%{translate}
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const short yyprhs[] =
-{
-  %%{prhs}
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const short yyrhs[] =
-{
-  %%{rhs}
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const short yyrline[] =
-{
-  %%{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[] =
-{
-  %%{tname}
-};
-#endif
-
-/* YYTOKNUM[YYN] -- Index in YYTNAME corresponding to YYLEX.  */
-static const short yytoknum[] =
-{
-  %%{toknum}
-};
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const short yyr1[] =
-{
-  %%{r1}
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const short yyr2[] =
-{
-  %%{r2}
-};
-
-/* 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.  */
-static const short yydefact[] =
-{
-  %%{defact}
-};
-
-/* YYPGOTO[NTERM-NUM]. */
-static const short yydefgoto[] =
-{
-  %%{defgoto}
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-static const short yypact[] =
-{
-  %%{pact}
-};
-
-/* YYPGOTO[NTERM-NUM].  */
-static const short yypgoto[] =
-{
-  %%{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[] =
-{
-  %%{table}
-};
-
-static const short yycheck[] =
-{
-  %%{check}
-};
-
-
-#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)
-# ifdef __cplusplus
-#  include <cstddef> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T std::size_t
-# else
-#  ifdef __STDC__
-#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#   define YYSIZE_T size_t
-#  endif
-# 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).
-
-   When YYLLOC_DEFAULT is run, CURRENT is set the location of the
-   first token.  By default, to implement support for ranges, extend
-   its range to the last symbol.  */
-
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)               \
-   Current.last_line   = Rhs[N].last_line;     \
-   Current.last_column = Rhs[N].last_column;
-#endif
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-
-#if YYPURE
-# if YYLSP_NEEDED
-#  ifdef YYLEX_PARAM
-#   define YYLEX               yylex (&yylval, &yylloc, YYLEX_PARAM)
-#  else
-#   define YYLEX               yylex (&yylval, &yylloc)
-#  endif
-# else /* !YYLSP_NEEDED */
-#  ifdef YYLEX_PARAM
-#   define YYLEX               yylex (&yylval, YYLEX_PARAM)
-#  else
-#   define YYLEX               yylex (&yylval)
-#  endif
-# endif /* !YYLSP_NEEDED */
-#else /* !YYPURE */
-# define YYLEX                 yylex ()
-#endif /* !YYPURE */
-
-/* Enable debugging if requested.  */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-#  ifdef __cplusplus
-#   include <cstdio>  /* INFRINGES ON USER NAME SPACE */
-#  else
-#   include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  endif
-#  define YYFPRINTF YYSTD (fprintf)
-# endif
-
-# define YYDPRINTF(Args)                       \
-do {                                           \
-  if (yydebug)                                 \
-    YYFPRINTF Args;                            \
-} while (0)
-/* Nonzero means print parse trace. [The following comment makes no
-   sense to me.  Could someone clarify it?  --akim] Since this is
-   uninitialized, it does not stop multiple parsers from coexisting.
-   */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-#endif /* !YYDEBUG */
-
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef        YYINITDEPTH
-# define YYINITDEPTH %%{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 %%{maxdepth}
-#endif
-
-
-
-#if ! defined (yyoverflow) && ! defined (yymemcpy)
-# if __GNUC__ > 1              /* GNU C and GNU C++ define this.  */
-#  define yymemcpy __builtin_memcpy
-# else                         /* not GNU C or C++ */
-
-/* This is the most reliable way to avoid incompatibilities
-   in available built-in functions on various systems.  */
-static void
-#  if defined (__STDC__) || defined (__cplusplus)
-yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T yycount)
-#  else
-yymemcpy (yyto, yyfrom, yycount)
-     char *yyto;
-     const char *yyfrom;
-     YYSIZE_T yycount;
-#  endif
-{
-  register const char *yyf = yyfrom;
-  register char *yyt = yyto;
-  register YYSIZE_T yyi = yycount;
-
-  while (yyi-- != 0)
-    *yyt++ = *yyf++;
-}
-# endif
-#endif
-
-#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 */
-
-
-
-/* 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
-# ifdef __cplusplus
-#  define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
-#  define YYPARSE_PARAM_DECL
-# else /* !__cplusplus */
-#  define YYPARSE_PARAM_ARG YYPARSE_PARAM
-#  define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
-# endif /* !__cplusplus */
-#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
-
-/* YY_DECL_VARIABLES -- depending whether we use a pure parser,
-   variables are global, or local to YYPARSE.  */
-
-#define YY_DECL_NON_LSP_VARIABLES                      \
-/* The lookahead symbol.  */                           \
-int yychar;                                            \
-                                                       \
-/* The semantic value of the lookahead symbol.  */     \
-YYSTYPE yylval;                                                \
-                                                       \
-/* Number of parse errors so far.  */                  \
-int yynerrs;
-
-#if YYLSP_NEEDED
-# define YY_DECL_VARIABLES                     \
-YY_DECL_NON_LSP_VARIABLES                      \
-                                               \
-/* Location data for the lookahead symbol.  */ \
-YYLTYPE yylloc;
-#else
-# define YY_DECL_VARIABLES                     \
-YY_DECL_NON_LSP_VARIABLES
-#endif
-
-/* If nonreentrant, generate the variables here.  */
-
-#if !YYPURE
-YY_DECL_VARIABLES
-#endif  /* !YYPURE */
-
-int
-yyparse (YYPARSE_PARAM_ARG)
-     YYPARSE_PARAM_DECL
-{
-  /* If reentrant, generate the variables here.  */
-#if YYPURE
-  YY_DECL_VARIABLES
-#endif  /* !YYPURE */
-
-  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;
-
-#if YYLSP_NEEDED
-  /* The location stack.  */
-  YYLTYPE yylsa[YYINITDEPTH];
-  YYLTYPE *yyls = yylsa;
-  YYLTYPE *yylsp;
-#endif
-
-#if YYLSP_NEEDED
-# define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
-#else
-# define YYPOPSTACK   (yyvsp--, yyssp--)
-#endif
-
-  YYSIZE_T yystacksize = YYINITDEPTH;
-
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-#if YYLSP_NEEDED
-  YYLTYPE yyloc;
-#endif
-
-  /* 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;
-#if YYLSP_NEEDED
-  yylsp = yyls;
-#endif
-  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;
-
-       /* Each stack pointer address is followed by the size of the
-          data in use in that stack, in bytes.  */
-# if YYLSP_NEEDED
-       YYLTYPE *yyls1 = yyls;
-       /* 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),
-                   &yyls1, yysize * sizeof (*yylsp),
-                   &yystacksize);
-       yyls = yyls1;
-# else
-       yyoverflow ("parser stack overflow",
-                   &yyss1, yysize * sizeof (*yyssp),
-                   &yyvs1, yysize * sizeof (*yyvsp),
-                   &yystacksize);
-# endif
-       yyss = yyss1;
-       yyvs = yyvs1;
-      }
-#else /* no yyoverflow */
-      /* 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 (short, yyss);
-       YYSTACK_RELOCATE (YYSTYPE, yyvs);
-# if YYLSP_NEEDED
-       YYSTACK_RELOCATE (YYLTYPE, yyls);
-# endif
-# undef YYSTACK_RELOCATE
-       if (yyss1 != yyssa)
-         YYSTACK_FREE (yyss1);
-      }
-#endif /* no yyoverflow */
-
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
-#if YYLSP_NEEDED
-      yylsp = yyls + yysize - 1;
-#endif
-
-      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);
-
-#if YYDEBUG
-     /* We have to keep this `#if YYDEBUG', since we use variables
-       which are defined only if `YYDEBUG' is set.  */
-      if (yydebug)
-       {
-         YYFPRINTF (stderr, "Next token is %d (%s",
-                    yychar, yytname[yychar1]);
-         /* Give the individual parser a way to print the precise
-            meaning of a token, for further debugging info.  */
-# ifdef YYPRINT
-         YYPRINT (stderr, yychar, yylval);
-# endif
-         YYFPRINTF (stderr, ")\n");
-       }
-#endif
-    }
-
-  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;
-#if YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
-
-  /* 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];
-
-#if YYLSP_NEEDED
-  /* Similarly for the default location.  Let the user run additional
-     commands if for instance locations are ranges.  */
-  yyloc = yylsp[1-yylen];
-  YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
-#endif
-
-#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)
-    {
-      %%{actions}
-    }
-
-/* Line %%{skeleton-line} of %%{skeleton}.  */
-#line %%{line} "%%{parser-file-name}"
-
-  yyvsp -= yylen;
-  yyssp -= yylen;
-#if YYLSP_NEEDED
-  yylsp -= yylen;
-#endif
-
-#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;
-#if YYLSP_NEEDED
-  *++yylsp = yyloc;
-#endif
-
-  /* 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)
-       YYABORT;
-      YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
-                 yychar, yytname[yychar1]));
-      yychar = YYEMPTY;
-    }
-
-  /* Else will try to reuse lookahead token after shifting the error
-     token.  */
-
-  yyerrstatus = 3;             /* Each real token shifted decrements this.  */
-
-  goto yyerrhandle;
-
-
-/*-------------------------------------------------------------------.
-| yyerrdefault -- current state does not do anything special for the |
-| error token.                                                       |
-`-------------------------------------------------------------------*/
-yyerrdefault:
-#if 0
-  /* This is wrong; only states that explicitly want error tokens
-     should shift them.  */
-
-  /* If its default is to accept any token, ok.  Otherwise pop it.  */
-  yyn = yydefact[yystate];
-  if (yyn)
-    goto yydefault;
-#endif
-
-
-/*---------------------------------------------------------------.
-| yyerrpop -- pop the current state because it cannot handle the |
-| error token.                                                   |
-`---------------------------------------------------------------*/
-yyerrpop:
-  if (yyssp == yyss)
-    YYABORT;
-  yyvsp--;
-  yystate = *--yyssp;
-#if YYLSP_NEEDED
-  yylsp--;
-#endif
-
-#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
-
-/*--------------.
-| yyerrhandle.  |
-`--------------*/
-yyerrhandle:
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yyerrdefault;
-
-  yyn += YYTERROR;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
-    goto yyerrdefault;
-
-  yyn = yytable[yyn];
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-       goto yyerrpop;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrpop;
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  YYDPRINTF ((stderr, "Shifting error token, "));
-
-  *++yyvsp = yylval;
-#if YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-/*---------------------------------------------.
-| yyoverflowab -- parser overflow comes here.  |
-`---------------------------------------------*/
-yyoverflowlab:
-  yyerror ("parser stack overflow");
-  yyresult = 2;
-  /* Fall through.  */
-
-yyreturn:
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
-#endif
-  return yyresult;
-}
-
-%%{epilogue}
Index: src/bison.c++
--- src/bison.c++ Sat, 26 Jan 2002 15:02:41 +0100 akim
+++ src/bison.c++ Mon, 04 Feb 2002 17:19:38 +0100 akim
@@ -1,523 +0,0 @@
-%%{section} %%{output-prefix} %%{output-infix} %%".hh"
-/* -*- C++ -*- */
-
-/* A Bison parser, made from %%filename,
-   by GNU bison %%version.  */
-
-/* Skeleton output parser for bison,
-   Copyright 1984, 1989, 1990, 2000, 2001 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.  */
-
-#include "stack.hh"
-/* #include "parser.hh" */
-#include "location.hh"
-
-namespace yy
-{
-  class %%{name};
- 
-  template < typename P >
-  struct Traits
-  {
-  };
-
-  template < >
-  struct Traits< %%{name} >
-  {
-    typedef int       StateType;
-    typedef %%{stype} SemanticType;
-    typedef Location  LocationType;
-  };
-}
-
-%%{prologue}
-
-namespace yy
-{
-  class %%{name}
-  {
-  public:
-    
-    typedef Traits< %%{name} >::StateType StateType;
-    typedef Traits< %%{name} >::SemanticType SemanticType;
-    typedef Traits< %%{name} >::LocationType LocationType;
-
-    typedef Stack< StateType >    StateStack;
-    typedef Stack< SemanticType > SemanticStack;
-    typedef Stack< LocationType > LocationStack;
-
-    %%{name} () : debug (1)
-    {
-      looka = empty;
-    }
-
-    virtual int parse ();
-
-  private:
-    
-    /* Call to lexical analyser.  */
-    virtual 
-    void 
-    lex () 
-    { 
-      looka = yylex (&value);
-    }
-
-    /* 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 short line_[];
-    static const short r1_[];
-    static const short r2_[];
-    static const char* const name_[];
-
-    /* More tables, for debugging.  */
-    /* FIXME: These tables should not be printed when not in debug 
-       mode.  %%ifdef?  */
-    static const short rhs_[];
-    static const short prhs_[];
-    static const short rline_[];
-
-    /* Even more tables.  */
-    static inline char translate (int token);
-
-    /* Eof and empty.  */
-    static const int eof;
-    static const int empty;
-
-    /* State.  */
-    int n;
-    int len;
-    int debug;
-    int state;
-    
-    /* Lookahead.  */
-    int looka;
-    int ilooka;
-    
-    /* @$ and $$.  */
-    SemanticType value;
-    LocationType location;
-  };
-}
-
-%%{section} %%{output-prefix} %%{output-infix} %%".cc"
-#include "%%{output-prefix}%%{output-infix}.hh"
-
-/* Enable debugging if requested.  */
-#if %%{debug}
-
-# include <cstdio>
-# define YYFPRINTF std::fprintf
-
-# define YYDPRINTF(Args)                       \
-do {                                           \
-  if (debug)                                   \
-    YYFPRINTF Args;                            \
-} while (0)
-/* Nonzero means print parse trace. [The following comment makes no
-   sense to me.  Could someone clarify it?  --akim] Since this is
-   uninitialized, it does not stop multiple parsers from coexisting.
-   */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-#endif /* !YYDEBUG */
-
-/* Tokens.  */
-%%{tokendef}
-
-int
-yy::%%{name}::parse ()
-{
-  /* Initialize stack.  */
-  state_stack = StateStack (0);
-  semantic_stack = SemanticStack (1);
-  location_stack = LocationStack (1);
-
-  /* Reserve initial space.  The C parser needed that, but is it really
-     useful here?  */
-  state_stack.reserve (%%{initdepth});
-  semantic_stack.reserve (%%{initdepth});
-  location_stack.reserve (%%{initdepth});
-
-  /* Start.  */
-  state = 0;
-  YYDPRINTF ((stderr, "Starting parse\n"));
-
-  /* New state.  */
- yynewstate:
-  state_stack.push (state);
-  YYDPRINTF ((stderr, "Entering state %d\n", state));
-
-  /* Backup.  */
- yybackup:
-
-  /* Try to take a decision without lookahead.  */
-  n = pact_[state];
-  if (n == %%{flag})
-    goto yydefault;
-
-  /* Read a lookahead token.  */
-  if (looka == empty)
-    {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      lex ();
-    }
-
-  /* Convert token to internal form.  */
-  if (looka <= 0)
-    {
-      looka = eof;
-      ilooka = 0;
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
-    }
-  else
-    {
-      ilooka = translate (looka);
-#if %%{debug}
-      YYFPRINTF (stderr, "Next token is %d (%s", looka, name_[ilooka]);
-      YYFPRINTF (stderr, ")\n");
-#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.  */
-  YYDPRINTF ((stderr, "Shifting token %d (%s), ", 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);
-  state = n;
-  goto yynewstate;
-
-  /* Default action.  */
- yydefault:
-  n = defact_[state];
-  if (n == 0)
-    goto yyerrlab;
-
-  /* Reduce.  */
- yyreduce:
-  len = r2_[n];
-  value = semantic_stack[1 - len];
-  location = location_stack[1 - len];
-
-#if %%{debug}
-  if (debug)
-    {
-      YYFPRINTF (stderr, "Reducing via rule %d (line %d), ", n - 1, rline_[n]);
-      for (unsigned i = prhs_[n];
-          rhs_[i] >= 0; ++i)
-       YYFPRINTF (stderr, "%s ", name_[rhs_[i]]);
-      YYFPRINTF (stderr, "-> %s\n", name_[r1_[n]]);
-    }
-#endif
-  
-  {
-    SemanticType& yyval (value);
-    SemanticStack& yyvsp (semantic_stack);
-
-    switch (n)
-      {
-       %%{actions}
-      }
-  }
-  
-  state_stack.pop (len);
-  semantic_stack.pop (len);
-  location_stack.pop (len);
-
-#if %%{debug}
-  if (debug)
-    {
-      YYFPRINTF (stderr, "state stack now");
-      for (StateStack::ConstIterator i = state_stack.begin (); 
-          i != state_stack.end (); ++i)
-       YYFPRINTF (stderr, " %d", *i);
-      YYFPRINTF (stderr, "\n");
-    }
-#endif
-  
-  semantic_stack.push (value);
-  location_stack.push (location);
-
-  /* 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:
-  std::cerr << "Parse error." << std::endl; // FIXME: Need something like 
yyerror?
-  return 1;
-  
-  /* Accept.  */
- yyacceptlab:
-  return 0;
-}
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-const short 
-yy::%%{name}::pact_[] =
-{
-  %%{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::%%{name}::defact_[] =
-{
-  %%{defact}
-};
-
-/* YYPGOTO[NTERM-NUM].  */
-const short 
-yy::%%{name}::pgoto_[] =
-{
-  %%{pgoto}
-};
-
-/* YYDEFGOTO[NTERM-NUM].  */
-const short 
-yy::%%{name}::defgoto_[] =
-{
-  %%{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::%%{name}::table_[] =
-{
-  %%{table}
-};
-
-/* YYCHECK.  */
-const short 
-yy::%%{name}::check_[] =
-{
-  %%{check}
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-const short
-yy::%%{name}::line_[] =
-{
-  %%{line}
-};
-
-/*YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-const short 
-yy::%%{name}::r1_[] =
-{
-  %%{r1}
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-const short 
-yy::%%{name}::r2_[] =
-{
-  %%{r2}
-};
-
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
-const char*
-const yy::%%{name}::name_[] =
-{
-  %%{tname}
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-const short 
-yy::%%{name}::rhs_[] =
-{
-  %%{rhs}
-};
-
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-const short 
-yy::%%{name}::prhs_[] =
-{
-  %%{prhs}
-};
-
-/* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
-const short 
-yy::%%{name}::rline_[] =
-{
-  %%{rline}
-};
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-char
-yy::%%{name}::translate (int token)
-{
-  static 
-  const char 
-  translate_[] =
-  {
-    %%{translate}
-  };
-  return ((unsigned)(token) <= %%{maxtok} ? translate_[token] : %%{nsym});
-}
-
-const int yy::%%{name}::eof = 0;
-const int yy::%%{name}::empty = -2;
-
-%%{epilogue}
-
-%%{section} %%"stack.hh"
-#ifndef BISON_STACK_HH
-# define BISON_STACK_HH
-
-#include <vector>
-
-namespace yy
-{
-  template < class T, class S = std::vector< 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 [] (int index)
-    {
-      return seq_[seq_.size () - 1 + index];
-    }
-
-    inline
-    const T&
-    operator [] (int index) const
-    {
-      return seq_[seq_.size () - 1 + index];
-    }
-
-    inline
-    void
-    push (const T& t)
-    {
-      seq_.push_back (t);
-    }
-
-    inline
-    void
-    pop (unsigned n = 1)
-    {
-      for (; n; --n)
-       seq_.pop_back ();
-    }
-    
-    inline
-    void
-    reserve (unsigned n)
-    {
-      seq_.reserve (n);
-    }
-
-    inline ConstIterator begin () const { return seq_.begin (); }
-    inline ConstIterator end () const { return seq_.end (); }
-
-  private:
-
-    S seq_;
-  };
-}
-
-#endif // not BISON_STACK_HH
-
-%%{section} %%"location.hh"
-#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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]