]> git.saurik.com Git - bison.git/commitdiff
Prototype support of %lex-param and %parse-param.
authorAkim Demaille <akim@epita.fr>
Sat, 19 Oct 2002 14:38:06 +0000 (14:38 +0000)
committerAkim Demaille <akim@epita.fr>
Sat, 19 Oct 2002 14:38:06 +0000 (14:38 +0000)
* src/parse-gram.y: Add the definition of the %lex-param and
%parse-param tokens, plus their rules.
Drop the `_' version of %glr-parser.
Add the "," token.
* src/scan-gram.l (INITIAL): Scan them.
* src/muscle_tab.c: Comment changes.
(muscle_insert, muscle_find): Rename `pair' as `probe'.
* src/muscle_tab.h (MUSCLE_INSERT_PREFIX): Remove unused.
(muscle_entry_s): The `value' member is no longer const.
Adjust all dependencies.
* src/muscle_tab.c (muscle_init): Adjust: use
MUSCLE_INSERT_STRING.
Initialize the obstack earlier.
* src/muscle_tab.h, src/muscle_tab.c (muscle_grow)
(muscle_pair_list_grow): New.
* data/c.m4 (b4_c_function_call, b4_c_args): New.
* data/yacc.c (YYLEX): Use b4_c_function_call to honor %lex-param.
* tests/calc.at: Use %locations, not --locations.
(AT_CHECK_CALC_GLR): Use %glr-parser, not %glr_parser.

13 files changed:
ChangeLog
TODO
data/c.m4
data/yacc.c
src/muscle_tab.c
src/muscle_tab.h
src/output.c
src/parse-gram.c
src/parse-gram.h
src/parse-gram.y
src/scan-gram.c
src/scan-gram.l
tests/calc.at

index 2111970c5fee9e24e0806b2c623b5167f2a07b08..256396fb4a24fecd685e0a6c7feb521a31868d48 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,27 @@
+2002-10-19  Akim Demaille  <akim@epita.fr>
+
+       Prototype support of %lex-param and %parse-param.
+
+       * src/parse-gram.y: Add the definition of the %lex-param and
+       %parse-param tokens, plus their rules.
+       Drop the `_' version of %glr-parser.
+       Add the "," token.
+       * src/scan-gram.l (INITIAL): Scan them.
+       * src/muscle_tab.c: Comment changes.
+       (muscle_insert, muscle_find): Rename `pair' as `probe'.
+       * src/muscle_tab.h (MUSCLE_INSERT_PREFIX): Remove unused.
+       (muscle_entry_s): The `value' member is no longer const.
+       Adjust all dependencies.
+       * src/muscle_tab.c (muscle_init): Adjust: use
+       MUSCLE_INSERT_STRING.
+       Initialize the obstack earlier.
+       * src/muscle_tab.h, src/muscle_tab.c (muscle_grow)
+       (muscle_pair_list_grow): New.
+       * data/c.m4 (b4_c_function_call, b4_c_args): New.
+       * data/yacc.c (YYLEX): Use b4_c_function_call to honor %lex-param.
+       * tests/calc.at: Use %locations, not --locations.
+       (AT_CHECK_CALC_GLR): Use %glr-parser, not %glr_parser.
+
 2002-10-19  Akim Demaille  <akim@epita.fr>
 
        * src/getargs.c (usage): Take status as argument and exit
 2002-10-19  Akim Demaille  <akim@epita.fr>
 
        * src/getargs.c (usage): Take status as argument and exit
diff --git a/TODO b/TODO
index 599626f2b8f49700c3a86ed4f080ec5610889e54..d57fef6128f6cdd34be80f1ea896bbbedc4f76d0 100644 (file)
--- a/TODO
+++ b/TODO
@@ -5,6 +5,18 @@
 From Franc,ois: should we keep the directory part in the CPP guard?
 
 
 From Franc,ois: should we keep the directory part in the CPP guard?
 
 
+* readpipe
+
+It should be replaced to avoid tmp files and to improve portability.
+Also, as it is it does not call error () when execve fails, and
+therefore, running M4='m4 --version' bison will silently fail instead
+of:
+
+       bison: cannot run m4 --version: No such file or directory
+
+BTW: I would really like to be able to pass arguments to m4...
+
+
 * URGENT: Documenting C++ output
 Write a first documentation for C++ output.
 
 * URGENT: Documenting C++ output
 Write a first documentation for C++ output.
 
index a60c2d8f23e3b88ae28029ef7a10d954a789d825..b89ea344f1744bacf34e6304a155e0c953a77949 100644 (file)
--- a/data/c.m4
+++ b/data/c.m4
@@ -1,4 +1,4 @@
-m4_divert(-1)                                                     -*- C -*-
+m4_divert(-1)                                                *- Autoconf -*-
 
 # C M4 Macros for Bison.
 # Copyright (C) 2002 Free Software Foundation, Inc.
 
 # C M4 Macros for Bison.
 # Copyright (C) 2002 Free Software Foundation, Inc.
@@ -122,13 +122,36 @@ m4_map([b4_token_define], [$@])
 ])
 
 
 ])
 
 
+## --------------------- ##
+## Calling C functions.  ##
+## --------------------- ##
+
+
+# b4_c_function_call(NAME, RETURN-VALUE, [TYPE1, NAME1], ...)
+# -----------------------------------------------------------
+# Call the function NAME with arguments NAME1, NAME2 etc.
+m4_define([b4_c_function_call],
+[$1 (b4_c_args(m4_shiftn(2, $@)))[]dnl
+])
+
+
+# b4_c_args([TYPE1, NAME1], ...)
+# ------------------------------
+# Output the arguments NAME1, NAME2...
+m4_define([b4_c_args],
+[m4_map_sep([b4_c_arg], [, ], [$@])])
+
+m4_define([b4_c_arg],
+[$2])
+
+
 ## ---------------------------------------------- ##
 ## Declaring C functions in both K&R and ANSI-C.  ##
 ## ---------------------------------------------- ##
 
 
 # b4_c_function(NAME, RETURN-VALUE, [TYPE1, NAME1], ...)
 ## ---------------------------------------------- ##
 ## Declaring C functions in both K&R and ANSI-C.  ##
 ## ---------------------------------------------- ##
 
 
 # b4_c_function(NAME, RETURN-VALUE, [TYPE1, NAME1], ...)
-# ------------------------------------------------
+# ------------------------------------------------------
 # Declare the function NAME.
 m4_define([b4_c_function],
 [$2
 # Declare the function NAME.
 m4_define([b4_c_function],
 [$2
index cf90c82708236fe930eef7178678f340a82a1c13..c833387b2d5774a0fb1476e11e7c9c14e327eda1 100644 (file)
@@ -506,13 +506,14 @@ while (0)
 
 /* YYLEX -- calling `yylex' with the right arguments.  */
 
 
 /* YYLEX -- calling `yylex' with the right arguments.  */
 
-b4_pure_if(
-[#ifdef YYLEX_PARAM
-# define YYLEX yylex (&yylval[]b4_location_if([, &yylloc]), YYLEX_PARAM)
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (b4_pure_if([&yylval[]b4_location_if([, &yylloc]), ])YYLEX_PARAM)
 #else
 #else
-# define YYLEX yylex (&yylval[]b4_location_if([, &yylloc]))
-#endif],
-[#define YYLEX yylex ()])
+# define YYLEX b4_c_function_call([yylex],
+                   b4_pure_if([[[[]], [[&yylval]]],
+                               b4_location_if([[[], [&yylloc]],])])
+                   m4_fst(b4_lex_param))
+#endif
 
 /* Enable debugging if requested.  */
 #if YYDEBUG
 
 /* Enable debugging if requested.  */
 #if YYDEBUG
index 895e2e3e184f899f8b436f5996eac3633367da33..3c5dc0c2b051b095bd5583c949bb7f9f822d43a1 100644 (file)
@@ -1,4 +1,4 @@
-/* Macro table manager for Bison,
+/* Muscle table manager for Bison,
    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
@@ -56,31 +56,31 @@ hash_muscle (const void *x, unsigned int tablesize)
 void
 muscle_init (void)
 {
 void
 muscle_init (void)
 {
+  /* Initialize the muscle obstack.  */
+  obstack_init (&muscle_obstack);
+
   muscle_table = hash_initialize (HT_INITIAL_CAPACITY, NULL, hash_muscle,
                                  hash_compare_muscles, free);
 
   /* Version and input file.  */
   muscle_table = hash_initialize (HT_INITIAL_CAPACITY, NULL, hash_muscle,
                                  hash_compare_muscles, free);
 
   /* Version and input file.  */
-  muscle_insert ("version", VERSION);
-  muscle_insert ("filename", infile);
+  MUSCLE_INSERT_STRING ("version", VERSION);
+  MUSCLE_INSERT_STRING ("filename", infile);
 
   /* FIXME: there should probably be no default here, only in the
      skeletons.  */
 
   /* Types.  */
 
   /* FIXME: there should probably be no default here, only in the
      skeletons.  */
 
   /* Types.  */
-  muscle_insert ("ltype", "yyltype");
+  MUSCLE_INSERT_STRING ("ltype", "yyltype");
 
   /* Default #line formatting.  */
 
   /* Default #line formatting.  */
-  muscle_insert ("linef", "#line %d %s\n");
+  MUSCLE_INSERT_STRING ("linef", "#line %d %s\n");
 
   /* Stack parameters.  */
 
   /* Stack parameters.  */
-  muscle_insert ("maxdepth", "10000");
-  muscle_insert ("initdepth", "200");
+  MUSCLE_INSERT_STRING ("maxdepth", "10000");
+  MUSCLE_INSERT_STRING ("initdepth", "200");
 
   /* C++ macros.  */
 
   /* C++ macros.  */
-  muscle_insert ("name", "Parser");
-
-  /* Initialize the muscle obstack.  */
-  obstack_init (&muscle_obstack);
+  MUSCLE_INSERT_STRING ("name", "Parser");
 }
 
 
 }
 
 
@@ -97,14 +97,19 @@ muscle_free (void)
 
 
 
 
 
 
+/*------------------------------------------------------------.
+| Insert (KEY, VALUE).  If KEY already existed, overwrite the |
+| previous value.                                             |
+`------------------------------------------------------------*/
+
 void
 void
-muscle_insert (const char *key, const char *value)
+muscle_insert (const char *key, char *value)
 {
 {
-  muscle_entry_t pair;
+  muscle_entry_t probe;
   muscle_entry_t *entry = NULL;
 
   muscle_entry_t *entry = NULL;
 
-  pair.key = key;
-  entry = hash_lookup (muscle_table, &pair);
+  probe.key = key;
+  entry = hash_lookup (muscle_table, &probe);
 
   if (!entry)
     {
 
   if (!entry)
     {
@@ -116,32 +121,99 @@ muscle_insert (const char *key, const char *value)
   entry->value = value;
 }
 
   entry->value = value;
 }
 
-const char*
+
+/*-------------------------------------------------------------------.
+| Insert (KEY, VALUE).  If KEY already existed, overwrite the        |
+| previous value.  Uses MUSCLE_OBSTACK.  De-allocates the previously |
+| associated value.  VALUE and SEPARATOR are copied.                 |
+`-------------------------------------------------------------------*/
+
+void
+muscle_grow (const char *key, const char *val, const char *separator)
+{
+  muscle_entry_t probe;
+  muscle_entry_t *entry = NULL;
+
+  probe.key = key;
+  entry = hash_lookup (muscle_table, &probe);
+
+  if (!entry)
+    {
+      /* First insertion in the hash. */
+      entry = XMALLOC (muscle_entry_t, 1);
+      entry->key = key;
+      hash_insert (muscle_table, entry);
+      entry->value = xstrdup (val);
+    }
+  else
+    {
+      /* Grow the current value. */
+      char *new_val;
+      fprintf (stderr, "<= %s + %s\n", entry->value, val);
+      obstack_sgrow (&muscle_obstack, entry->value);
+      free (entry->value);
+      obstack_sgrow (&muscle_obstack, separator);
+      obstack_sgrow (&muscle_obstack, val);
+      obstack_1grow (&muscle_obstack, 0);
+      new_val = obstack_finish (&muscle_obstack);
+      entry->value = xstrdup (new_val);
+      fprintf (stderr, "=> %s\n", new_val);
+      obstack_free (&muscle_obstack, new_val);
+    }
+}
+
+
+/*-------------------------------------------------------------------.
+| MUSCLE is an M4 list of pairs.  Create or extend it with the pair  |
+| (A1, A2).  Note that because the muscle values are output *double* |
+| quoted, one needs to strip the first level of quotes to reach the  |
+| list itself.                                                       |
+`-------------------------------------------------------------------*/
+
+void muscle_pair_list_grow (const char *muscle,
+                           const char *a1, const char *a2)
+{
+  char *value;
+  obstack_fgrow2 (&muscle_obstack, "[[[%s]], [[%s]]]", a1, a2);
+  obstack_1grow (&muscle_obstack, 0);
+  value = obstack_finish (&muscle_obstack);
+  muscle_grow (muscle, value, ",\n");
+  obstack_free (&muscle_obstack, value);
+}
+
+/*-------------------------------.
+| Find the value of muscle KEY.  |
+`-------------------------------*/
+
+char*
 muscle_find (const char *key)
 {
 muscle_find (const char *key)
 {
-  muscle_entry_t pair;
+  muscle_entry_t probe;
   muscle_entry_t *result = NULL;
 
   muscle_entry_t *result = NULL;
 
-  pair.key = key;
-  result = hash_lookup (muscle_table, &pair);
+  probe.key = key;
+  result = hash_lookup (muscle_table, &probe);
   return result ? result->value : NULL;
 }
 
 
   return result ? result->value : NULL;
 }
 
 
-/* Output the definition of all the current muscles into a list of
-   m4_defines.  */
+/*------------------------------------------------.
+| Output the definition of ENTRY as a m4_define.  |
+`------------------------------------------------*/
 
 static int
 muscle_m4_output (muscle_entry_t *entry, FILE *out)
 {
   fprintf (out, "m4_define([b4_%s],\n", entry->key);
 
 static int
 muscle_m4_output (muscle_entry_t *entry, FILE *out)
 {
   fprintf (out, "m4_define([b4_%s],\n", entry->key);
-  fprintf (out, "          [[%s]])\n\n\n", entry->value);
+  fprintf (out, "[[%s]])\n\n\n", entry->value);
   return 1;
 }
 
 
   return 1;
 }
 
 
-/* Output the definition of all the current muscles into a list of
-   m4_defines.  */
+/*----------------------------------------------------------------.
+| Output the definition of all the current muscles into a list of |
+| m4_defines.                                                     |
+`----------------------------------------------------------------*/
 
 void
 muscles_m4_output (FILE *out)
 
 void
 muscles_m4_output (FILE *out)
index 00e9edfe0ae4b2db20dfaf2acc83106d983f582e..8865538fc50ca38448fe28e0574d5a3057498ab2 100644 (file)
@@ -1,4 +1,4 @@
-/* Definitions for macrotab.c and callers, part of bison,
+/* Muscle table manager for Bison,
    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
    Copyright (C) 2001, 2002 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 #ifndef MUSCLE_TAB_H_
 # define MUSCLE_TAB_H_
 
 #ifndef MUSCLE_TAB_H_
 # define MUSCLE_TAB_H_
 
-# define MTABSIZE 101
-
 typedef struct muscle_entry_s
 {
   const char *key;
 typedef struct muscle_entry_s
 {
   const char *key;
-  const char *value;
+  char *value;
 } muscle_entry_t;
 
 void muscle_init PARAMS ((void));
 } muscle_entry_t;
 
 void muscle_init PARAMS ((void));
-void muscle_insert PARAMS ((const char *key, const char *value));
-const char *muscle_find PARAMS ((const char *key));
+void muscle_insert PARAMS ((const char *key, char *value));
+char *muscle_find PARAMS ((const char *key));
 void muscle_free PARAMS ((void));
 
 
 void muscle_free PARAMS ((void));
 
 
@@ -59,14 +57,27 @@ extern struct obstack muscle_obstack;
   muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
 
   muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
 
-#define MUSCLE_INSERT_PREFIX(Key, Value)                               \
-{                                                                      \
-  obstack_fgrow2 (&muscle_obstack, "%s%s",                             \
-                 spec_name_prefix ? spec_name_prefix : "yy", Value);   \
-  obstack_1grow (&muscle_obstack, 0);                                  \
-  muscle_insert (Key, obstack_finish (&muscle_obstack));               \
+#define MUSCLE_GROW_STRING_PAIR(Key, Value1, Value2)           \
+{                                                              \
+  obstack_sgrow (&muscle_obstack, Value1);                     \
+  obstack_1grow (&muscle_obstack, 0);                          \
+  muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
 
 }
 
+/* Insert (KEY, VALUE).  If KEY already existed, overwrite the
+   previous value.  Uses MUSCLE_OBSTACK.  De-allocates the previously
+   associated value.  VALUE and SEPARATOR are copied.  */
+
+void muscle_grow PARAMS ((const char *key,
+                         const char *value, const char *separator));
+
+/* MUSCLE is an M4 list of pairs.  Create or extend it with the pair
+   (A1, A2).  Note that because the muscle values are output *double*
+   quoted, one needs to strip the first level of quotes to reach the
+   list itself.  */
+
+void muscle_pair_list_grow PARAMS ((const char *muscle,
+                                   const char *a1, const char *a2));
 
 void muscles_m4_output PARAMS ((FILE *out));
 
 
 void muscles_m4_output PARAMS ((FILE *out));
 
index 57744b108e94bbe3dc3aaf5fc64eda1c0b2b1edb..6eb69ed54ae4c5c35b29430d13e53aa57f6cd6e2 100644 (file)
@@ -355,9 +355,9 @@ merger_output (FILE *out)
   fputs ("]])\n\n", out);
 }
 
   fputs ("]])\n\n", out);
 }
 
-/*---------------------------------------.
-| Output the tokens definition to OOUT.  |
-`---------------------------------------*/
+/*--------------------------------------.
+| Output the tokens definition to OUT.  |
+`--------------------------------------*/
 
 static void
 token_definitions_output (FILE *out)
 
 static void
 token_definitions_output (FILE *out)
@@ -405,9 +405,9 @@ token_definitions_output (FILE *out)
 }
 
 
 }
 
 
-/*----------------------------------------.
-| Output the symbol destructors to OOUT.  |
-`----------------------------------------*/
+/*---------------------------------------.
+| Output the symbol destructors to OUT.  |
+`---------------------------------------*/
 
 static void
 symbol_destructors_output (FILE *out)
 
 static void
 symbol_destructors_output (FILE *out)
@@ -438,9 +438,9 @@ symbol_destructors_output (FILE *out)
 }
 
 
 }
 
 
-/*-------------------------------------.
-| Output the symbol printers to OOUT.  |
-`-------------------------------------*/
+/*------------------------------------.
+| Output the symbol printers to OUT.  |
+`------------------------------------*/
 
 static void
 symbol_printers_output (FILE *out)
 
 static void
 symbol_printers_output (FILE *out)
@@ -456,7 +456,7 @@ symbol_printers_output (FILE *out)
 
        /* Filename, lineno,
           Symbol-name, Symbol-number,
 
        /* Filename, lineno,
           Symbol-name, Symbol-number,
-          destructor, typename. */
+          printer, typename. */
        fprintf (out, "%s[[[%s]], [[%d]], [[%s]], [[%d]], [[%s]], [[%s]]]",
                 first ? "" : ",\n",
                 infile, symbol->printer_location.first_line,
        fprintf (out, "%s[[[%s]], [[%d]], [[%s]], [[%d]], [[%s]], [[%s]]]",
                 first ? "" : ",\n",
                 infile, symbol->printer_location.first_line,
index 3db6ae54d4923feae743194889b807ae6fbc3dab..e4fbae5b5bf828b67ec9fb57aa88ab1ac8456631 100644 (file)
@@ -1,4 +1,4 @@
-/* A Bison parser, made from parse-gram.y, by GNU bison 1.49c.  */
+/* A Bison parser, made from parse-gram.y, by GNU bison 1.75a.  */
 
 /* Skeleton parser for Yacc-like parsing with Bison,
    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
 
 /* Skeleton parser for Yacc-like parsing with Bison,
    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
 #define yynerrs gram_nerrs
 #define yylloc gram_lloc
 
 #define yynerrs gram_nerrs
 #define yylloc gram_lloc
 
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     GRAM_EOF = 0,
+     STRING = 258,
+     CHARACTER = 259,
+     INT = 260,
+     PERCENT_TOKEN = 261,
+     PERCENT_NTERM = 262,
+     PERCENT_TYPE = 263,
+     PERCENT_DESTRUCTOR = 264,
+     PERCENT_PRINTER = 265,
+     PERCENT_UNION = 266,
+     PERCENT_LEFT = 267,
+     PERCENT_RIGHT = 268,
+     PERCENT_NONASSOC = 269,
+     PERCENT_PREC = 270,
+     PERCENT_DPREC = 271,
+     PERCENT_MERGE = 272,
+     PERCENT_DEBUG = 273,
+     PERCENT_DEFINE = 274,
+     PERCENT_DEFINES = 275,
+     PERCENT_ERROR_VERBOSE = 276,
+     PERCENT_EXPECT = 277,
+     PERCENT_FILE_PREFIX = 278,
+     PERCENT_GLR_PARSER = 279,
+     PERCENT_LEX_PARAM = 280,
+     PERCENT_LOCATIONS = 281,
+     PERCENT_NAME_PREFIX = 282,
+     PERCENT_NO_LINES = 283,
+     PERCENT_OUTPUT = 284,
+     PERCENT_PARSE_PARAM = 285,
+     PERCENT_PURE_PARSER = 286,
+     PERCENT_SKELETON = 287,
+     PERCENT_START = 288,
+     PERCENT_TOKEN_TABLE = 289,
+     PERCENT_VERBOSE = 290,
+     PERCENT_YACC = 291,
+     TYPE = 292,
+     EQUAL = 293,
+     SEMICOLON = 294,
+     COLON = 295,
+     COMMA = 296,
+     PIPE = 297,
+     ID = 298,
+     PERCENT_PERCENT = 299,
+     PROLOGUE = 300,
+     EPILOGUE = 301,
+     BRACED_CODE = 302
+   };
+#endif
+#define GRAM_EOF 0
+#define STRING 258
+#define CHARACTER 259
+#define INT 260
+#define PERCENT_TOKEN 261
+#define PERCENT_NTERM 262
+#define PERCENT_TYPE 263
+#define PERCENT_DESTRUCTOR 264
+#define PERCENT_PRINTER 265
+#define PERCENT_UNION 266
+#define PERCENT_LEFT 267
+#define PERCENT_RIGHT 268
+#define PERCENT_NONASSOC 269
+#define PERCENT_PREC 270
+#define PERCENT_DPREC 271
+#define PERCENT_MERGE 272
+#define PERCENT_DEBUG 273
+#define PERCENT_DEFINE 274
+#define PERCENT_DEFINES 275
+#define PERCENT_ERROR_VERBOSE 276
+#define PERCENT_EXPECT 277
+#define PERCENT_FILE_PREFIX 278
+#define PERCENT_GLR_PARSER 279
+#define PERCENT_LEX_PARAM 280
+#define PERCENT_LOCATIONS 281
+#define PERCENT_NAME_PREFIX 282
+#define PERCENT_NO_LINES 283
+#define PERCENT_OUTPUT 284
+#define PERCENT_PARSE_PARAM 285
+#define PERCENT_PURE_PARSER 286
+#define PERCENT_SKELETON 287
+#define PERCENT_START 288
+#define PERCENT_TOKEN_TABLE 289
+#define PERCENT_VERBOSE 290
+#define PERCENT_YACC 291
+#define TYPE 292
+#define EQUAL 293
+#define SEMICOLON 294
+#define COLON 295
+#define COMMA 296
+#define PIPE 297
+#define ID 298
+#define PERCENT_PERCENT 299
+#define PROLOGUE 300
+#define EPILOGUE 301
+#define BRACED_CODE 302
+
+
+
+
 /* Copy the first part of user declarations.  */
 #line 31 "parse-gram.y"
 
 /* Copy the first part of user declarations.  */
 #line 31 "parse-gram.y"
 
@@ -110,107 +214,6 @@ int current_prec = 0;
 braced_code_t current_braced_code = action_braced_code;
 
 
 braced_code_t current_braced_code = action_braced_code;
 
 
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# if defined (__STDC__) || defined (__cplusplus)
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     GRAM_EOF = 0,
-     STRING = 258,
-     CHARACTER = 259,
-     INT = 260,
-     PERCENT_TOKEN = 261,
-     PERCENT_NTERM = 262,
-     PERCENT_TYPE = 263,
-     PERCENT_DESTRUCTOR = 264,
-     PERCENT_PRINTER = 265,
-     PERCENT_UNION = 266,
-     PERCENT_LEFT = 267,
-     PERCENT_RIGHT = 268,
-     PERCENT_NONASSOC = 269,
-     PERCENT_EXPECT = 270,
-     PERCENT_START = 271,
-     PERCENT_PREC = 272,
-     PERCENT_DPREC = 273,
-     PERCENT_MERGE = 274,
-     PERCENT_VERBOSE = 275,
-     PERCENT_ERROR_VERBOSE = 276,
-     PERCENT_OUTPUT = 277,
-     PERCENT_FILE_PREFIX = 278,
-     PERCENT_NAME_PREFIX = 279,
-     PERCENT_DEFINE = 280,
-     PERCENT_PURE_PARSER = 281,
-     PERCENT_GLR_PARSER = 282,
-     PERCENT_DEFINES = 283,
-     PERCENT_YACC = 284,
-     PERCENT_DEBUG = 285,
-     PERCENT_LOCATIONS = 286,
-     PERCENT_NO_LINES = 287,
-     PERCENT_SKELETON = 288,
-     PERCENT_TOKEN_TABLE = 289,
-     TYPE = 290,
-     EQUAL = 291,
-     SEMICOLON = 292,
-     COLON = 293,
-     PIPE = 294,
-     ID = 295,
-     PERCENT_PERCENT = 296,
-     PROLOGUE = 297,
-     EPILOGUE = 298,
-     BRACED_CODE = 299
-   };
-# endif
-  /* POSIX requires `int' for tokens in interfaces.  */
-# define YYTOKENTYPE int
-#endif /* !YYTOKENTYPE */
-#define GRAM_EOF 0
-#define STRING 258
-#define CHARACTER 259
-#define INT 260
-#define PERCENT_TOKEN 261
-#define PERCENT_NTERM 262
-#define PERCENT_TYPE 263
-#define PERCENT_DESTRUCTOR 264
-#define PERCENT_PRINTER 265
-#define PERCENT_UNION 266
-#define PERCENT_LEFT 267
-#define PERCENT_RIGHT 268
-#define PERCENT_NONASSOC 269
-#define PERCENT_EXPECT 270
-#define PERCENT_START 271
-#define PERCENT_PREC 272
-#define PERCENT_DPREC 273
-#define PERCENT_MERGE 274
-#define PERCENT_VERBOSE 275
-#define PERCENT_ERROR_VERBOSE 276
-#define PERCENT_OUTPUT 277
-#define PERCENT_FILE_PREFIX 278
-#define PERCENT_NAME_PREFIX 279
-#define PERCENT_DEFINE 280
-#define PERCENT_PURE_PARSER 281
-#define PERCENT_GLR_PARSER 282
-#define PERCENT_DEFINES 283
-#define PERCENT_YACC 284
-#define PERCENT_DEBUG 285
-#define PERCENT_LOCATIONS 286
-#define PERCENT_NO_LINES 287
-#define PERCENT_SKELETON 288
-#define PERCENT_TOKEN_TABLE 289
-#define TYPE 290
-#define EQUAL 291
-#define SEMICOLON 292
-#define COLON 293
-#define PIPE 294
-#define ID 295
-#define PERCENT_PERCENT 296
-#define PROLOGUE 297
-#define EPILOGUE 298
-#define BRACED_CODE 299
-
-
-
-
 /* Enabling traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 1
 /* Enabling traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 1
@@ -233,8 +236,8 @@ typedef union {
   char *string;
   assoc_t assoc;
 } yystype;
   char *string;
   assoc_t assoc;
 } yystype;
-/* Line 188 of /usr/local/share/bison/yacc.c.  */
-#line 238 "parse-gram.c"
+/* Line 193 of /usr/local/share/bison/yacc.c.  */
+#line 241 "parse-gram.c"
 # define YYSTYPE yystype
 # define YYSTYPE_IS_TRIVIAL 1
 #endif
 # define YYSTYPE yystype
 # define YYSTYPE_IS_TRIVIAL 1
 #endif
@@ -254,8 +257,8 @@ typedef struct yyltype
 /* Copy the second part of user declarations.  */
 
 
 /* Copy the second part of user declarations.  */
 
 
-/* Line 208 of /usr/local/share/bison/yacc.c.  */
-#line 259 "parse-gram.c"
+/* Line 213 of /usr/local/share/bison/yacc.c.  */
+#line 262 "parse-gram.c"
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
 
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
 
@@ -346,22 +349,28 @@ union yyalloc
 
 #endif
 
 
 #endif
 
+#if defined (__STDC__) || defined (__cplusplus)
+   typedef signed char yysigned_char;
+#else
+   typedef short yysigned_char;
+#endif
+
 /* YYFINAL -- State number of the termination state. */
 #define YYFINAL  3
 /* YYFINAL -- State number of the termination state. */
 #define YYFINAL  3
-#define YYLAST   127
+#define YYLAST   152
 
 /* YYNTOKENS -- Number of terminals. */
 
 /* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS  45
+#define YYNTOKENS  48
 /* YYNNTS -- Number of nonterminals. */
 #define YYNNTS  28
 /* YYNRULES -- Number of rules. */
 /* YYNNTS -- Number of nonterminals. */
 #define YYNNTS  28
 /* YYNRULES -- Number of rules. */
-#define YYNRULES  75
+#define YYNRULES  77
 /* YYNRULES -- Number of states. */
 /* YYNRULES -- Number of states. */
-#define YYNSTATES  108
+#define YYNSTATES  116
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   299
+#define YYMAXUTOK   302
 
 #define YYTRANSLATE(X) \
   ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
 
 #define YYTRANSLATE(X) \
   ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
@@ -398,7 +407,8 @@ static const unsigned char yytranslate[] =
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47
 };
 
 #if YYDEBUG
 };
 
 #if YYDEBUG
@@ -407,51 +417,52 @@ static const unsigned char yytranslate[] =
 static const unsigned char yyprhs[] =
 {
        0,     0,     3,     8,     9,    13,    15,    17,    19,    23,
 static const unsigned char yyprhs[] =
 {
        0,     0,     3,     8,     9,    13,    15,    17,    19,    23,
-      25,    27,    30,    34,    36,    40,    42,    46,    48,    50,
-      53,    55,    57,    59,    61,    63,    66,    69,    70,    75,
-      76,    81,    82,    86,    87,    91,    95,    99,   101,   103,
-     105,   106,   108,   110,   113,   115,   117,   120,   123,   127,
-     129,   132,   134,   137,   139,   142,   145,   146,   152,   154,
-     158,   159,   162,   165,   169,   173,   177,   179,   181,   183,
-     185,   187,   189,   190,   193,   194
+      25,    27,    30,    34,    36,    41,    43,    47,    49,    53,
+      58,    60,    63,    65,    67,    69,    71,    73,    76,    79,
+      80,    85,    86,    91,    92,    96,    97,   101,   105,   109,
+     111,   113,   115,   116,   118,   120,   123,   125,   127,   130,
+     133,   137,   139,   142,   144,   147,   149,   152,   155,   156,
+     162,   164,   168,   169,   172,   175,   179,   183,   187,   189,
+     191,   193,   195,   197,   199,   200,   203,   204
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const signed char yyrhs[] =
+static const yysigned_char yyrhs[] =
 {
 {
-      46,     0,    -1,    47,    41,    61,    71,    -1,    -1,    47,
-      48,    72,    -1,    49,    -1,    42,    -1,    30,    -1,    25,
-      70,    70,    -1,    28,    -1,    21,    -1,    15,     5,    -1,
-      23,    36,    70,    -1,    31,    -1,    24,    36,    70,    -1,
-      32,    -1,    22,    36,    70,    -1,    26,    -1,    27,    -1,
-      33,    70,    -1,    34,    -1,    20,    -1,    29,    -1,    55,
-      -1,    52,    -1,    16,    67,    -1,    11,    44,    -1,    -1,
-       9,    50,    44,    58,    -1,    -1,    10,    51,    44,    58,
-      -1,    -1,     7,    53,    60,    -1,    -1,     6,    54,    60,
-      -1,     8,    35,    58,    -1,    56,    57,    58,    -1,    12,
-      -1,    13,    -1,    14,    -1,    -1,    35,    -1,    67,    -1,
-      58,    67,    -1,    35,    -1,    40,    -1,    40,     5,    -1,
-      40,    69,    -1,    40,     5,    69,    -1,    59,    -1,    60,
-      59,    -1,    62,    -1,    61,    62,    -1,    63,    -1,    49,
-      37,    -1,     1,    37,    -1,    -1,    40,    38,    64,    65,
-      37,    -1,    66,    -1,    65,    39,    66,    -1,    -1,    66,
-      67,    -1,    66,    68,    -1,    66,    17,    67,    -1,    66,
-      18,     5,    -1,    66,    19,    35,    -1,    40,    -1,    69,
-      -1,     4,    -1,    44,    -1,     3,    -1,     3,    -1,    -1,
-      41,    43,    -1,    -1,    37,    -1
+      49,     0,    -1,    50,    44,    64,    74,    -1,    -1,    50,
+      51,    75,    -1,    52,    -1,    45,    -1,    18,    -1,    19,
+      73,    73,    -1,    20,    -1,    21,    -1,    22,     5,    -1,
+      23,    38,    73,    -1,    24,    -1,    25,    73,    41,    73,
+      -1,    26,    -1,    27,    38,    73,    -1,    28,    -1,    29,
+      38,    73,    -1,    30,    73,    41,    73,    -1,    31,    -1,
+      32,    73,    -1,    34,    -1,    35,    -1,    36,    -1,    58,
+      -1,    55,    -1,    33,    70,    -1,    11,    47,    -1,    -1,
+       9,    53,    47,    61,    -1,    -1,    10,    54,    47,    61,
+      -1,    -1,     7,    56,    63,    -1,    -1,     6,    57,    63,
+      -1,     8,    37,    61,    -1,    59,    60,    61,    -1,    12,
+      -1,    13,    -1,    14,    -1,    -1,    37,    -1,    70,    -1,
+      61,    70,    -1,    37,    -1,    43,    -1,    43,     5,    -1,
+      43,    72,    -1,    43,     5,    72,    -1,    62,    -1,    63,
+      62,    -1,    65,    -1,    64,    65,    -1,    66,    -1,    52,
+      39,    -1,     1,    39,    -1,    -1,    43,    40,    67,    68,
+      39,    -1,    69,    -1,    68,    42,    69,    -1,    -1,    69,
+      70,    -1,    69,    71,    -1,    69,    15,    70,    -1,    69,
+      16,     5,    -1,    69,    17,    37,    -1,    43,    -1,    72,
+      -1,     4,    -1,    47,    -1,     3,    -1,     3,    -1,    -1,
+      44,    46,    -1,    -1,    39,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short yyrline[] =
 {
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short yyrline[] =
 {
-       0,   162,   162,   175,   177,   180,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   201,   203,   204,   208,   215,   214,   225,
-     224,   237,   236,   242,   242,   247,   256,   271,   273,   274,
-     277,   279,   284,   286,   290,   295,   300,   306,   312,   322,
-     325,   334,   336,   342,   344,   349,   356,   355,   360,   362,
-     365,   368,   370,   372,   374,   376,   380,   382,   383,   386,
-     392,   401,   409,   414,   420,   422
+       0,   168,   168,   181,   183,   186,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   198,   199,   200,   201,   202,
+     204,   205,   206,   207,   208,   211,   213,   214,   218,   225,
+     224,   235,   234,   247,   246,   252,   252,   257,   266,   281,
+     283,   284,   287,   289,   294,   296,   300,   305,   310,   316,
+     322,   332,   335,   344,   346,   352,   354,   359,   366,   365,
+     370,   372,   375,   378,   380,   382,   384,   386,   390,   392,
+     393,   396,   402,   411,   419,   424,   430,   432
 };
 #endif
 
 };
 #endif
 
@@ -463,20 +474,20 @@ static const char *const yytname[] =
   "\"end of file\"", "error", "$undefined", "\"string\"", "\"character\"", 
   "\"integer\"", "\"%token\"", "\"%nterm\"", "\"%type\"", 
   "\"%destructor\"", "\"%printer\"", "\"%union\"", "\"%left\"", 
   "\"end of file\"", "error", "$undefined", "\"string\"", "\"character\"", 
   "\"integer\"", "\"%token\"", "\"%nterm\"", "\"%type\"", 
   "\"%destructor\"", "\"%printer\"", "\"%union\"", "\"%left\"", 
-  "\"%right\"", "\"%nonassoc\"", "\"%expect\"", "\"%start\"", "\"%prec\"", 
-  "\"%dprec\"", "\"%merge\"", "\"%verbose\"", "\"%error-verbose\"", 
-  "\"%output\"", "\"%file-prefix\"", "\"%name-prefix\"", "\"%define\"", 
-  "\"%pure-parser\"", "\"%glr-parser\"", "\"%defines\"", "\"%yacc\"", 
-  "\"%debug\"", "\"%locations\"", "\"%no-lines\"", "\"%skeleton\"", 
-  "\"%token-table\"", "\"type\"", "\"=\"", "\";\"", "\":\"", "\"|\"", 
-  "\"identifier\"", "\"%%\"", "\"%{...%}\"", "\"epilogue\"", "\"{...}\"", 
-  "$accept", "input", "declarations", "declaration", 
-  "grammar_declaration", "@1", "@2", "symbol_declaration", "@3", "@4", 
-  "precedence_declaration", "precedence_declarator", "type.opt", 
-  "symbols.1", "symbol_def", "symbol_defs.1", "grammar", 
-  "rules_or_grammar_declaration", "rules", "@5", "rhses.1", "rhs", 
-  "symbol", "action", "string_as_id", "string_content", "epilogue.opt", 
-  "semi_colon.opt", 0
+  "\"%right\"", "\"%nonassoc\"", "\"%prec\"", "\"%dprec\"", "\"%merge\"", 
+  "\"%debug\"", "\"%define\"", "\"%defines\"", "\"%error-verbose\"", 
+  "\"%expect\"", "\"%file-prefix\"", "\"%glr-parser\"", "\"%lex-param\"", 
+  "\"%locations\"", "\"%name-prefix\"", "\"%no-lines\"", "\"%output\"", 
+  "\"%parse-param\"", "\"%pure-parser\"", "\"%skeleton\"", "\"%start\"", 
+  "\"%token-table\"", "\"%verbose\"", "\"%yacc\"", "\"type\"", "\"=\"", 
+  "\";\"", "\":\"", "\",\"", "\"|\"", "\"identifier\"", "\"%%\"", 
+  "\"%{...%}\"", "\"epilogue\"", "\"{...}\"", "$accept", "input", 
+  "declarations", "declaration", "grammar_declaration", "@1", "@2", 
+  "symbol_declaration", "@3", "@4", "precedence_declaration", 
+  "precedence_declarator", "type.opt", "symbols.1", "symbol_def", 
+  "symbol_defs.1", "grammar", "rules_or_grammar_declaration", "rules", 
+  "@5", "rhses.1", "rhs", "symbol", "action", "string_as_id", 
+  "string_content", "epilogue.opt", "semi_colon.opt", 0
 };
 #endif
 
 };
 #endif
 
@@ -489,34 +500,34 @@ static const unsigned short yytoknum[] =
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299
+     295,   296,   297,   298,   299,   300,   301,   302
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const unsigned char yyr1[] =
 {
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const unsigned char yyr1[] =
 {
-       0,    45,    46,    47,    47,    48,    48,    48,    48,    48,
-      48,    48,    48,    48,    48,    48,    48,    48,    48,    48,
-      48,    48,    48,    49,    49,    49,    49,    50,    49,    51,
-      49,    53,    52,    54,    52,    52,    55,    56,    56,    56,
-      57,    57,    58,    58,    59,    59,    59,    59,    59,    60,
-      60,    61,    61,    62,    62,    62,    64,    63,    65,    65,
-      66,    66,    66,    66,    66,    66,    67,    67,    67,    68,
-      69,    70,    71,    71,    72,    72
+       0,    48,    49,    50,    50,    51,    51,    51,    51,    51,
+      51,    51,    51,    51,    51,    51,    51,    51,    51,    51,
+      51,    51,    51,    51,    51,    52,    52,    52,    52,    53,
+      52,    54,    52,    56,    55,    57,    55,    55,    58,    59,
+      59,    59,    60,    60,    61,    61,    62,    62,    62,    62,
+      62,    63,    63,    64,    64,    65,    65,    65,    67,    66,
+      68,    68,    69,    69,    69,    69,    69,    69,    70,    70,
+      70,    71,    72,    73,    74,    74,    75,    75
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const unsigned char yyr2[] =
 {
        0,     2,     4,     0,     3,     1,     1,     1,     3,     1,
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const unsigned char yyr2[] =
 {
        0,     2,     4,     0,     3,     1,     1,     1,     3,     1,
-       1,     2,     3,     1,     3,     1,     3,     1,     1,     2,
-       1,     1,     1,     1,     1,     2,     2,     0,     4,     0,
-       4,     0,     3,     0,     3,     3,     3,     1,     1,     1,
-       0,     1,     1,     2,     1,     1,     2,     2,     3,     1,
-       2,     1,     2,     1,     2,     2,     0,     5,     1,     3,
-       0,     2,     2,     3,     3,     3,     1,     1,     1,     1,
-       1,     1,     0,     2,     0,     1
+       1,     2,     3,     1,     4,     1,     3,     1,     3,     4,
+       1,     2,     1,     1,     1,     1,     1,     2,     2,     0,
+       4,     0,     4,     0,     3,     0,     3,     3,     3,     1,
+       1,     1,     0,     1,     1,     2,     1,     1,     2,     2,
+       3,     1,     2,     1,     2,     1,     2,     2,     0,     5,
+       1,     3,     0,     2,     2,     3,     3,     3,     1,     1,
+       1,     1,     1,     1,     0,     2,     0,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -524,106 +535,116 @@ static const unsigned char yyr2[] =
    means the default is an error.  */
 static const unsigned char yydefact[] =
 {
    means the default is an error.  */
 static const unsigned char yydefact[] =
 {
-       3,     0,     0,     1,    33,    31,     0,    27,    29,     0,
-      37,    38,    39,     0,     0,    21,    10,     0,     0,     0,
-       0,    17,    18,     9,    22,     7,    13,    15,     0,    20,
-       0,     6,    74,     5,    24,    23,    40,     0,     0,     0,
-       0,     0,    26,    11,    70,    68,    66,    25,    67,     0,
-       0,     0,    71,     0,    19,     0,     0,     0,     0,    51,
-      53,    75,     4,    41,     0,    44,    45,    49,    34,    32,
-      35,    42,     0,     0,    16,    12,    14,     8,    55,    56,
-      54,     0,    52,     2,    36,    46,    47,    50,    43,    28,
-      30,    60,    73,    48,     0,    58,    57,    60,     0,     0,
-       0,    69,    61,    62,    59,    63,    64,    65
+       3,     0,     0,     1,    35,    33,     0,    29,    31,     0,
+      39,    40,    41,     7,     0,     9,    10,     0,     0,    13,
+       0,    15,     0,    17,     0,     0,    20,     0,     0,    22,
+      23,    24,     0,     6,    76,     5,    26,    25,    42,     0,
+       0,     0,     0,     0,    28,    73,     0,    11,     0,     0,
+       0,     0,     0,    21,    72,    70,    68,    27,    69,     0,
+       0,     0,     0,    53,    55,    77,     4,    43,     0,    46,
+      47,    51,    36,    34,    37,    44,     0,     0,     8,    12,
+       0,    16,    18,     0,    57,    58,    56,     0,    54,     2,
+      38,    48,    49,    52,    45,    30,    32,    14,    19,    62,
+      75,    50,     0,    60,    59,    62,     0,     0,     0,    71,
+      63,    64,    61,    65,    66,    67
 };
 
 /* YYDEFGOTO[NTERM-NUM]. */
 };
 
 /* YYDEFGOTO[NTERM-NUM]. */
-static const signed char yydefgoto[] =
+static const yysigned_char yydefgoto[] =
 {
 {
-      -1,     1,     2,    32,    57,    40,    41,    34,    38,    37,
-      35,    36,    64,    70,    67,    68,    58,    59,    60,    91,
-      94,    95,    71,   103,    48,    53,    83,    62
+      -1,     1,     2,    34,    61,    42,    43,    36,    40,    39,
+      37,    38,    68,    74,    71,    72,    62,    63,    64,    99,
+     102,   103,    75,   111,    58,    46,    89,    66
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -61
-static const signed char yypact[] =
+#define YYPACT_NINF -64
+static const yysigned_char yypact[] =
 {
 {
-     -61,    35,    85,   -61,   -61,   -61,     2,   -61,   -61,    -5,
-     -61,   -61,   -61,    31,     0,   -61,   -61,    18,    21,    22,
-      59,   -61,   -61,   -61,   -61,   -61,   -61,   -61,    59,   -61,
-      37,   -61,    26,   -61,   -61,   -61,    29,   -19,   -19,     0,
-      23,    24,   -61,   -61,   -61,   -61,   -61,   -61,   -61,    59,
-      59,    59,   -61,    59,   -61,    28,    33,    32,     1,   -61,
-     -61,   -61,   -61,   -61,     0,   -61,    17,   -61,   -19,   -19,
-       0,   -61,     0,     0,   -61,   -61,   -61,   -61,   -61,   -61,
-     -61,    30,   -61,   -61,     0,    63,   -61,   -61,   -61,     0,
-       0,   -61,   -61,   -61,    -8,    15,   -61,   -61,     0,    67,
-      39,   -61,   -61,   -61,    15,   -61,   -61,   -61
+     -64,     9,   107,   -64,   -64,   -64,   -13,   -64,   -64,    -9,
+     -64,   -64,   -64,   -64,    27,   -64,   -64,    38,     3,   -64,
+      27,   -64,     6,   -64,     7,    27,   -64,    27,    -1,   -64,
+     -64,   -64,    79,   -64,    10,   -64,   -64,   -64,    13,   -17,
+     -17,    -1,     8,    11,   -64,   -64,    27,   -64,    27,    15,
+      27,    27,    16,   -64,   -64,   -64,   -64,   -64,   -64,    20,
+      14,    21,     4,   -64,   -64,   -64,   -64,   -64,    -1,   -64,
+      18,   -64,   -17,   -17,    -1,   -64,    -1,    -1,   -64,   -64,
+      27,   -64,   -64,    27,   -64,   -64,   -64,    17,   -64,   -64,
+      -1,    62,   -64,   -64,   -64,    -1,    -1,   -64,   -64,   -64,
+     -64,   -64,   -20,    36,   -64,   -64,    -1,    61,    32,   -64,
+     -64,   -64,    36,   -64,   -64,   -64
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 };
 
 /* YYPGOTO[NTERM-NUM].  */
-static const signed char yypgoto[] =
+static const yysigned_char yypgoto[] =
 {
 {
-     -61,   -61,   -61,   -61,    76,   -61,   -61,   -61,   -61,   -61,
-     -61,   -61,   -61,   -12,   -45,    41,   -61,    25,   -61,   -61,
-     -61,   -17,   -14,   -61,   -60,   -23,   -61,   -61
+     -64,   -64,   -64,   -64,    68,   -64,   -64,   -64,   -64,   -64,
+     -64,   -64,   -64,   -43,   -37,    31,   -64,    12,   -64,   -64,
+     -64,   -33,   -28,   -64,   -63,   -19,   -64,   -64
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
 };
 
 /* 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.  */
-#define YYTABLE_NINF -62
-static const signed char yytable[] =
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, parse error.  */
+#define YYTABLE_NINF -75
+static const yysigned_char yytable[] =
 {
 {
-      47,   -72,    55,    44,    45,    54,    86,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    65,    14,    44,    45,
-      44,    66,    85,    87,    87,    93,    74,    75,    76,    96,
-      77,    97,    98,    99,   100,     3,    43,    39,    55,    42,
-      46,    56,    81,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    84,    14,    49,    46,    88,    50,    51,   101,
-      89,    90,    52,    61,    63,    78,    44,    72,    73,    80,
-      88,    79,   106,    92,   107,    88,    88,    56,    33,    69,
-     104,   102,     0,    82,   105,     0,     0,     0,     0,     0,
-     102,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,     0,     0,     0,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-       0,     0,     0,     0,     0,     0,    30,    31
+      57,    49,    54,    55,   -74,    59,    52,    92,    53,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,   104,
+      69,    54,   105,    91,    41,    90,    70,    78,   101,    79,
+      45,    81,    82,    95,    96,    93,    93,    28,    44,    54,
+      55,    48,    56,    47,    50,    51,    94,    60,    87,    65,
+      67,   106,   107,   108,    85,    76,    80,    83,    77,    84,
+      86,    97,    94,   100,    98,    54,   114,    94,    94,   115,
+      35,    73,   112,     0,    88,   110,     0,     0,   113,    56,
+      59,     0,     0,   109,   110,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    28,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    60,     0,     0,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,     0,     0,     0,     0,     0,     0,
+       0,    32,    33
 };
 
 };
 
-static const signed char yycheck[] =
+static const yysigned_char yycheck[] =
 {
 {
-      14,     0,     1,     3,     4,    28,    66,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    35,    16,     3,     4,
-       3,    40,     5,    68,    69,    85,    49,    50,    51,    37,
-      53,    39,    17,    18,    19,     0,     5,    35,     1,    44,
-      40,    40,    41,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    64,    16,    36,    40,    70,    36,    36,    44,
-      72,    73,     3,    37,    35,    37,     3,    44,    44,    37,
-      84,    38,     5,    43,    35,    89,    90,    40,     2,    38,
-      97,    95,    -1,    58,    98,    -1,    -1,    -1,    -1,    -1,
-     104,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    -1,    -1,    -1,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      -1,    -1,    -1,    -1,    -1,    -1,    41,    42
+      28,    20,     3,     4,     0,     1,    25,    70,    27,     0,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    39,
+      37,     3,    42,     5,    37,    68,    43,    46,    91,    48,
+       3,    50,    51,    76,    77,    72,    73,    33,    47,     3,
+       4,    38,    43,     5,    38,    38,    74,    43,    44,    39,
+      37,    15,    16,    17,    40,    47,    41,    41,    47,    39,
+      39,    80,    90,    46,    83,     3,     5,    95,    96,    37,
+       2,    40,   105,    -1,    62,   103,    -1,    -1,   106,    43,
+       1,    -1,    -1,    47,   112,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    33,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    43,    -1,    -1,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    44,    45
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const unsigned char yystos[] =
 {
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const unsigned char yystos[] =
 {
-       0,    46,    47,     0,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    20,    21,    22,    23,    24,
+       0,    49,    50,     0,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      41,    42,    48,    49,    52,    55,    56,    54,    53,    35,
-      50,    51,    44,     5,     3,     4,    40,    67,    69,    36,
-      36,    36,     3,    70,    70,     1,    40,    49,    61,    62,
-      63,    37,    72,    35,    57,    35,    40,    59,    60,    60,
-      58,    67,    44,    44,    70,    70,    70,    70,    37,    38,
-      37,    41,    62,    71,    58,     5,    69,    59,    67,    58,
-      58,    64,    43,    69,    65,    66,    37,    39,    17,    18,
-      19,    44,    67,    68,    66,    67,     5,    35
+      35,    36,    44,    45,    51,    52,    55,    58,    59,    57,
+      56,    37,    53,    54,    47,     3,    73,     5,    38,    73,
+      38,    38,    73,    73,     3,     4,    43,    70,    72,     1,
+      43,    52,    64,    65,    66,    39,    75,    37,    60,    37,
+      43,    62,    63,    63,    61,    70,    47,    47,    73,    73,
+      41,    73,    73,    41,    39,    40,    39,    44,    65,    74,
+      61,     5,    72,    62,    70,    61,    61,    73,    73,    67,
+      46,    72,    68,    69,    39,    42,    15,    16,    17,    47,
+      70,    71,    69,    70,     5,    37
 };
 
 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
 };
 
 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
@@ -841,78 +862,6 @@ yysymprint (yyout, yytype, yyvalue, yylocation)
 #endif /* YYDEBUG. */
 
 
 #endif /* YYDEBUG. */
 
 
-/*----------------------------------------------------------.
-| yyreport_parse_error -- report a parse error in YYSTATE.  |
-`----------------------------------------------------------*/
-
-static void
-#if defined (__STDC__) || defined (__cplusplus)
-yyreport_parse_error (int yystate, int yychar, YYSTYPE yyvalue, YYLTYPE yylloc)
-#else
-yyreport_parse_error (yystate, yychar, yyvalue, yylloc)
-    int yystate;
-    int yychar;
-    YYSTYPE yyvalue;
-    YYLTYPE yylloc;
-#endif
-{
-#if YYERROR_VERBOSE
-  int yyn = yypact[yystate];
-
-  if (YYPACT_NINF < yyn && yyn < YYLAST)
-    {
-      YYSIZE_T yysize = 0;
-      int yytype = YYTRANSLATE (yychar);
-      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 && yyx != YYTERROR)
-         yysize += yystrlen (yytname[yyx]) + 15, yycount++;
-      yysize += yystrlen ("parse error, unexpected ") + 1;
-      yysize += yystrlen (yytname[yytype]);
-      yymsg = (char *) YYSTACK_ALLOC (yysize);
-      if (yymsg != 0)
-       {
-         char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
-         yyp = yystpcpy (yyp, yytname[yytype]);
-
-         if (yycount < 5)
-           {
-             yycount = 0;
-             for (yyx = yyn < 0 ? -yyn : 0;
-                  yyx < (int) (sizeof (yytname) / sizeof (char *));
-                  yyx++)
-               if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-                 {
-                   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");
-
-  /* Pacify ``unused variable'' warnings.  */
-  (void) yystate;
-  (void) yychar;
-  (void) yyvalue;
-  (void) yylloc;
-}
-
-
 /*-----------------------------------------------.
 | Release the memory associated to this symbol.  |
 `-----------------------------------------------*/
 /*-----------------------------------------------.
 | Release the memory associated to this symbol.  |
 `-----------------------------------------------*/
@@ -1174,28 +1123,19 @@ yybackup:
       YYDPRINTF ((stderr, "\n"));
     }
 
       YYDPRINTF ((stderr, "\n"));
     }
 
+  /* If the proper action on seeing token YYCHAR1 is to reduce or to
+     detect an error, take that action.  */
   yyn += yychar1;
   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
     goto yydefault;
   yyn += yychar1;
   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
     goto yydefault;
-
   yyn = yytable[yyn];
   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 <= 0)
     {
     {
-      if (yyn == YYTABLE_NINF)
+      if (yyn == 0 || yyn == YYTABLE_NINF)
        goto yyerrlab;
       yyn = -yyn;
       goto yyreduce;
     }
        goto yyerrlab;
       yyn = -yyn;
       goto yyreduce;
     }
-  else if (yyn == 0)
-    goto yyerrlab;
 
   if (yyn == YYFINAL)
     YYACCEPT;
 
   if (yyn == YYFINAL)
     YYACCEPT;
@@ -1269,7 +1209,7 @@ yyreduce:
   switch (yyn)
     {
         case 2:
   switch (yyn)
     {
         case 2:
-#line 164 "parse-gram.y"
+#line 170 "parse-gram.y"
     {
       yycontrol->errcode = 0;
       epilogue_set (yyvsp[0].string, yylsp[0]);
     {
       yycontrol->errcode = 0;
       epilogue_set (yyvsp[0].string, yylsp[0]);
@@ -1277,99 +1217,109 @@ yyreduce:
     break;
 
   case 6:
     break;
 
   case 6:
-#line 182 "parse-gram.y"
+#line 188 "parse-gram.y"
     { prologue_augment (yyvsp[0].string, yylsp[0]); }
     break;
 
   case 7:
     { prologue_augment (yyvsp[0].string, yylsp[0]); }
     break;
 
   case 7:
-#line 183 "parse-gram.y"
+#line 189 "parse-gram.y"
     { debug_flag = 1; }
     break;
 
   case 8:
     { debug_flag = 1; }
     break;
 
   case 8:
-#line 184 "parse-gram.y"
+#line 190 "parse-gram.y"
     { muscle_insert (yyvsp[-1].string, yyvsp[0].string); }
     break;
 
   case 9:
     { muscle_insert (yyvsp[-1].string, yyvsp[0].string); }
     break;
 
   case 9:
-#line 185 "parse-gram.y"
+#line 191 "parse-gram.y"
     { defines_flag = 1; }
     break;
 
   case 10:
     { defines_flag = 1; }
     break;
 
   case 10:
-#line 186 "parse-gram.y"
+#line 192 "parse-gram.y"
     { error_verbose = 1; }
     break;
 
   case 11:
     { error_verbose = 1; }
     break;
 
   case 11:
-#line 187 "parse-gram.y"
+#line 193 "parse-gram.y"
     { expected_conflicts = yyvsp[0].integer; }
     break;
 
   case 12:
     { expected_conflicts = yyvsp[0].integer; }
     break;
 
   case 12:
-#line 188 "parse-gram.y"
+#line 194 "parse-gram.y"
     { spec_file_prefix = yyvsp[0].string; }
     break;
 
   case 13:
     { spec_file_prefix = yyvsp[0].string; }
     break;
 
   case 13:
-#line 189 "parse-gram.y"
-    { locations_flag = 1; }
+#line 195 "parse-gram.y"
+    { glr_parser = 1; }
     break;
 
   case 14:
     break;
 
   case 14:
-#line 190 "parse-gram.y"
-    { spec_name_prefix = yyvsp[0].string; }
+#line 197 "parse-gram.y"
+    { muscle_pair_list_grow ("lex_param", yyvsp[-2].string, yyvsp[0].string); }
     break;
 
   case 15:
     break;
 
   case 15:
-#line 191 "parse-gram.y"
-    { no_lines_flag = 1; }
+#line 198 "parse-gram.y"
+    { locations_flag = 1; }
     break;
 
   case 16:
     break;
 
   case 16:
-#line 192 "parse-gram.y"
-    { spec_outfile = yyvsp[0].string; }
+#line 199 "parse-gram.y"
+    { spec_name_prefix = yyvsp[0].string; }
     break;
 
   case 17:
     break;
 
   case 17:
-#line 193 "parse-gram.y"
-    { pure_parser = 1; }
+#line 200 "parse-gram.y"
+    { no_lines_flag = 1; }
     break;
 
   case 18:
     break;
 
   case 18:
-#line 194 "parse-gram.y"
-    { glr_parser = 1; }
+#line 201 "parse-gram.y"
+    { spec_outfile = yyvsp[0].string; }
     break;
 
   case 19:
     break;
 
   case 19:
-#line 195 "parse-gram.y"
-    { skeleton = yyvsp[0].string; }
+#line 203 "parse-gram.y"
+    { muscle_pair_list_grow ("parse_param", yyvsp[-2].string, yyvsp[0].string); }
     break;
 
   case 20:
     break;
 
   case 20:
-#line 196 "parse-gram.y"
-    { token_table_flag = 1; }
+#line 204 "parse-gram.y"
+    { pure_parser = 1; }
     break;
 
   case 21:
     break;
 
   case 21:
-#line 197 "parse-gram.y"
-    { report_flag = 1; }
+#line 205 "parse-gram.y"
+    { skeleton = yyvsp[0].string; }
     break;
 
   case 22:
     break;
 
   case 22:
-#line 198 "parse-gram.y"
+#line 206 "parse-gram.y"
+    { token_table_flag = 1; }
+    break;
+
+  case 23:
+#line 207 "parse-gram.y"
+    { report_flag = 1; }
+    break;
+
+  case 24:
+#line 208 "parse-gram.y"
     { yacc_flag = 1; }
     break;
 
     { yacc_flag = 1; }
     break;
 
-  case 25:
-#line 205 "parse-gram.y"
+  case 27:
+#line 215 "parse-gram.y"
     {
       grammar_start_symbol_set (yyvsp[0].symbol, yylsp[0]);
     }
     break;
 
     {
       grammar_start_symbol_set (yyvsp[0].symbol, yylsp[0]);
     }
     break;
 
-  case 26:
-#line 209 "parse-gram.y"
+  case 28:
+#line 219 "parse-gram.y"
     {
       typed = 1;
       MUSCLE_INSERT_INT ("stype_line", yylsp[0].first_line);
     {
       typed = 1;
       MUSCLE_INSERT_INT ("stype_line", yylsp[0].first_line);
@@ -1377,13 +1327,13 @@ yyreduce:
     }
     break;
 
     }
     break;
 
-  case 27:
-#line 215 "parse-gram.y"
+  case 29:
+#line 225 "parse-gram.y"
     { current_braced_code = destructor_braced_code; }
     break;
 
     { current_braced_code = destructor_braced_code; }
     break;
 
-  case 28:
-#line 217 "parse-gram.y"
+  case 30:
+#line 227 "parse-gram.y"
     {
       symbol_list_t *list;
       for (list = yyvsp[0].list; list; list = list->next)
     {
       symbol_list_t *list;
       for (list = yyvsp[0].list; list; list = list->next)
@@ -1393,13 +1343,13 @@ yyreduce:
     }
     break;
 
     }
     break;
 
-  case 29:
-#line 225 "parse-gram.y"
+  case 31:
+#line 235 "parse-gram.y"
     { current_braced_code = printer_braced_code; }
     break;
 
     { current_braced_code = printer_braced_code; }
     break;
 
-  case 30:
-#line 227 "parse-gram.y"
+  case 32:
+#line 237 "parse-gram.y"
     {
       symbol_list_t *list;
       for (list = yyvsp[0].list; list; list = list->next)
     {
       symbol_list_t *list;
       for (list = yyvsp[0].list; list; list = list->next)
@@ -1409,34 +1359,34 @@ yyreduce:
     }
     break;
 
     }
     break;
 
-  case 31:
-#line 237 "parse-gram.y"
+  case 33:
+#line 247 "parse-gram.y"
     { current_class = nterm_sym; }
     break;
 
     { current_class = nterm_sym; }
     break;
 
-  case 32:
-#line 238 "parse-gram.y"
+  case 34:
+#line 248 "parse-gram.y"
     {
       current_class = unknown_sym;
       current_type = NULL;
     }
     break;
 
     {
       current_class = unknown_sym;
       current_type = NULL;
     }
     break;
 
-  case 33:
-#line 242 "parse-gram.y"
+  case 35:
+#line 252 "parse-gram.y"
     { current_class = token_sym; }
     break;
 
     { current_class = token_sym; }
     break;
 
-  case 34:
-#line 243 "parse-gram.y"
+  case 36:
+#line 253 "parse-gram.y"
     {
       current_class = unknown_sym;
       current_type = NULL;
     }
     break;
 
     {
       current_class = unknown_sym;
       current_type = NULL;
     }
     break;
 
-  case 35:
-#line 248 "parse-gram.y"
+  case 37:
+#line 258 "parse-gram.y"
     {
       symbol_list_t *list;
       for (list = yyvsp[0].list; list; list = list->next)
     {
       symbol_list_t *list;
       for (list = yyvsp[0].list; list; list = list->next)
@@ -1445,8 +1395,8 @@ yyreduce:
     }
     break;
 
     }
     break;
 
-  case 36:
-#line 258 "parse-gram.y"
+  case 38:
+#line 268 "parse-gram.y"
     {
       symbol_list_t *list;
       ++current_prec;
     {
       symbol_list_t *list;
       ++current_prec;
@@ -1460,58 +1410,58 @@ yyreduce:
     }
     break;
 
     }
     break;
 
-  case 37:
-#line 272 "parse-gram.y"
+  case 39:
+#line 282 "parse-gram.y"
     { yyval.assoc = left_assoc; }
     break;
 
     { yyval.assoc = left_assoc; }
     break;
 
-  case 38:
-#line 273 "parse-gram.y"
+  case 40:
+#line 283 "parse-gram.y"
     { yyval.assoc = right_assoc; }
     break;
 
     { yyval.assoc = right_assoc; }
     break;
 
-  case 39:
-#line 274 "parse-gram.y"
+  case 41:
+#line 284 "parse-gram.y"
     { yyval.assoc = non_assoc; }
     break;
 
     { yyval.assoc = non_assoc; }
     break;
 
-  case 40:
-#line 278 "parse-gram.y"
+  case 42:
+#line 288 "parse-gram.y"
     { current_type = NULL;}
     break;
 
     { current_type = NULL;}
     break;
 
-  case 41:
-#line 279 "parse-gram.y"
+  case 43:
+#line 289 "parse-gram.y"
     { current_type = yyvsp[0].string; }
     break;
 
     { current_type = yyvsp[0].string; }
     break;
 
-  case 42:
-#line 285 "parse-gram.y"
+  case 44:
+#line 295 "parse-gram.y"
     { yyval.list = symbol_list_new (yyvsp[0].symbol, yylsp[0]); }
     break;
 
     { yyval.list = symbol_list_new (yyvsp[0].symbol, yylsp[0]); }
     break;
 
-  case 43:
-#line 286 "parse-gram.y"
+  case 45:
+#line 296 "parse-gram.y"
     { yyval.list = symbol_list_prepend (yyvsp[-1].list, yyvsp[0].symbol, yylsp[0]); }
     break;
 
     { yyval.list = symbol_list_prepend (yyvsp[-1].list, yyvsp[0].symbol, yylsp[0]); }
     break;
 
-  case 44:
-#line 292 "parse-gram.y"
+  case 46:
+#line 302 "parse-gram.y"
     {
        current_type = yyvsp[0].string;
      }
     break;
 
     {
        current_type = yyvsp[0].string;
      }
     break;
 
-  case 45:
-#line 296 "parse-gram.y"
+  case 47:
+#line 306 "parse-gram.y"
     {
        symbol_class_set (yyvsp[0].symbol, current_class, yylsp[0]);
        symbol_type_set (yyvsp[0].symbol, current_type, yylsp[0]);
      }
     break;
 
     {
        symbol_class_set (yyvsp[0].symbol, current_class, yylsp[0]);
        symbol_type_set (yyvsp[0].symbol, current_type, yylsp[0]);
      }
     break;
 
-  case 46:
-#line 301 "parse-gram.y"
+  case 48:
+#line 311 "parse-gram.y"
     {
       symbol_class_set (yyvsp[-1].symbol, current_class, yylsp[-1]);
       symbol_type_set (yyvsp[-1].symbol, current_type, yylsp[-1]);
     {
       symbol_class_set (yyvsp[-1].symbol, current_class, yylsp[-1]);
       symbol_type_set (yyvsp[-1].symbol, current_type, yylsp[-1]);
@@ -1519,8 +1469,8 @@ yyreduce:
     }
     break;
 
     }
     break;
 
-  case 47:
-#line 307 "parse-gram.y"
+  case 49:
+#line 317 "parse-gram.y"
     {
       symbol_class_set (yyvsp[-1].symbol, current_class, yylsp[-1]);
       symbol_type_set (yyvsp[-1].symbol, current_type, yylsp[-1]);
     {
       symbol_class_set (yyvsp[-1].symbol, current_class, yylsp[-1]);
       symbol_type_set (yyvsp[-1].symbol, current_type, yylsp[-1]);
@@ -1528,8 +1478,8 @@ yyreduce:
     }
     break;
 
     }
     break;
 
-  case 48:
-#line 313 "parse-gram.y"
+  case 50:
+#line 323 "parse-gram.y"
     {
       symbol_class_set (yyvsp[-2].symbol, current_class, yylsp[-2]);
       symbol_type_set (yyvsp[-2].symbol, current_type, yylsp[-2]);
     {
       symbol_class_set (yyvsp[-2].symbol, current_class, yylsp[-2]);
       symbol_type_set (yyvsp[-2].symbol, current_type, yylsp[-2]);
@@ -1538,126 +1488,126 @@ yyreduce:
     }
     break;
 
     }
     break;
 
-  case 49:
-#line 324 "parse-gram.y"
+  case 51:
+#line 334 "parse-gram.y"
     {;}
     break;
 
     {;}
     break;
 
-  case 50:
-#line 326 "parse-gram.y"
+  case 52:
+#line 336 "parse-gram.y"
     {;}
     break;
 
     {;}
     break;
 
-  case 54:
-#line 345 "parse-gram.y"
+  case 56:
+#line 355 "parse-gram.y"
     {
       if (yacc_flag)
        complain_at (yyloc, _("POSIX forbids declarations in the grammar"));
     }
     break;
 
     {
       if (yacc_flag)
        complain_at (yyloc, _("POSIX forbids declarations in the grammar"));
     }
     break;
 
-  case 55:
-#line 350 "parse-gram.y"
+  case 57:
+#line 360 "parse-gram.y"
     {
       yyerrok;
     }
     break;
 
     {
       yyerrok;
     }
     break;
 
-  case 56:
-#line 356 "parse-gram.y"
+  case 58:
+#line 366 "parse-gram.y"
     { current_lhs = yyvsp[-1].symbol; current_lhs_location = yylsp[-1]; }
     break;
 
     { current_lhs = yyvsp[-1].symbol; current_lhs_location = yylsp[-1]; }
     break;
 
-  case 57:
-#line 357 "parse-gram.y"
+  case 59:
+#line 367 "parse-gram.y"
     {;}
     break;
 
     {;}
     break;
 
-  case 58:
-#line 361 "parse-gram.y"
+  case 60:
+#line 371 "parse-gram.y"
     { grammar_rule_end (yylsp[0]); }
     break;
 
     { grammar_rule_end (yylsp[0]); }
     break;
 
-  case 59:
-#line 362 "parse-gram.y"
+  case 61:
+#line 372 "parse-gram.y"
     { grammar_rule_end (yylsp[0]); }
     break;
 
     { grammar_rule_end (yylsp[0]); }
     break;
 
-  case 60:
-#line 367 "parse-gram.y"
+  case 62:
+#line 377 "parse-gram.y"
     { grammar_rule_begin (current_lhs, current_lhs_location); }
     break;
 
     { grammar_rule_begin (current_lhs, current_lhs_location); }
     break;
 
-  case 61:
-#line 369 "parse-gram.y"
+  case 63:
+#line 379 "parse-gram.y"
     { grammar_current_rule_symbol_append (yyvsp[0].symbol, yylsp[0]); }
     break;
 
     { grammar_current_rule_symbol_append (yyvsp[0].symbol, yylsp[0]); }
     break;
 
-  case 62:
-#line 371 "parse-gram.y"
+  case 64:
+#line 381 "parse-gram.y"
     { grammar_current_rule_action_append (yyvsp[0].string, yylsp[0]); }
     break;
 
     { grammar_current_rule_action_append (yyvsp[0].string, yylsp[0]); }
     break;
 
-  case 63:
-#line 373 "parse-gram.y"
+  case 65:
+#line 383 "parse-gram.y"
     { grammar_current_rule_prec_set (yyvsp[0].symbol, yylsp[0]); }
     break;
 
     { grammar_current_rule_prec_set (yyvsp[0].symbol, yylsp[0]); }
     break;
 
-  case 64:
-#line 375 "parse-gram.y"
+  case 66:
+#line 385 "parse-gram.y"
     { grammar_current_rule_dprec_set (yyvsp[0].integer, yylsp[0]); }
     break;
 
     { grammar_current_rule_dprec_set (yyvsp[0].integer, yylsp[0]); }
     break;
 
-  case 65:
-#line 377 "parse-gram.y"
+  case 67:
+#line 387 "parse-gram.y"
     { grammar_current_rule_merge_set (yyvsp[0].string, yylsp[0]); }
     break;
 
     { grammar_current_rule_merge_set (yyvsp[0].string, yylsp[0]); }
     break;
 
-  case 66:
-#line 381 "parse-gram.y"
+  case 68:
+#line 391 "parse-gram.y"
     { yyval.symbol = yyvsp[0].symbol; }
     break;
 
     { yyval.symbol = yyvsp[0].symbol; }
     break;
 
-  case 67:
-#line 382 "parse-gram.y"
+  case 69:
+#line 392 "parse-gram.y"
     { yyval.symbol = yyvsp[0].symbol; }
     break;
 
     { yyval.symbol = yyvsp[0].symbol; }
     break;
 
-  case 68:
-#line 383 "parse-gram.y"
+  case 70:
+#line 393 "parse-gram.y"
     { yyval.symbol = symbol_get (yyvsp[0].string, yylsp[0]); }
     break;
 
     { yyval.symbol = symbol_get (yyvsp[0].string, yylsp[0]); }
     break;
 
-  case 69:
-#line 388 "parse-gram.y"
+  case 71:
+#line 398 "parse-gram.y"
     { yyval.string = yyvsp[0].string; }
     break;
 
     { yyval.string = yyvsp[0].string; }
     break;
 
-  case 70:
-#line 394 "parse-gram.y"
+  case 72:
+#line 404 "parse-gram.y"
     {
       yyval.symbol = symbol_get (yyvsp[0].string, yylsp[0]);
       symbol_class_set (yyval.symbol, token_sym, yylsp[0]);
     }
     break;
 
     {
       yyval.symbol = symbol_get (yyvsp[0].string, yylsp[0]);
       symbol_class_set (yyval.symbol, token_sym, yylsp[0]);
     }
     break;
 
-  case 71:
-#line 403 "parse-gram.y"
+  case 73:
+#line 413 "parse-gram.y"
     {
       yyval.string = yyvsp[0].string + 1;
       yyval.string[strlen (yyval.string) - 1] = '\0';
     }
     break;
 
     {
       yyval.string = yyvsp[0].string + 1;
       yyval.string[strlen (yyval.string) - 1] = '\0';
     }
     break;
 
-  case 72:
-#line 411 "parse-gram.y"
+  case 74:
+#line 421 "parse-gram.y"
     {
       yyval.string = xstrdup ("");
     }
     break;
 
     {
       yyval.string = xstrdup ("");
     }
     break;
 
-  case 73:
-#line 415 "parse-gram.y"
+  case 75:
+#line 425 "parse-gram.y"
     {
       yyval.string = yyvsp[0].string;
     }
     {
       yyval.string = yyvsp[0].string;
     }
@@ -1666,8 +1616,8 @@ yyreduce:
 
     }
 
 
     }
 
-/* Line 1081 of /usr/local/share/bison/yacc.c.  */
-#line 1671 "parse-gram.c"
+/* Line 1016 of /usr/local/share/bison/yacc.c.  */
+#line 1621 "parse-gram.c"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -1710,7 +1660,54 @@ yyerrlab:
   if (!yyerrstatus)
     {
       ++yynerrs;
   if (!yyerrstatus)
     {
       ++yynerrs;
-      yyreport_parse_error (yystate, yychar, yylval, yylloc);
+#if YYERROR_VERBOSE
+      yyn = yypact[yystate];
+
+      if (YYPACT_NINF < yyn && yyn < YYLAST)
+       {
+         YYSIZE_T yysize = 0;
+         int yytype = YYTRANSLATE (yychar);
+         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 && yyx != YYTERROR)
+             yysize += yystrlen (yytname[yyx]) + 15, yycount++;
+         yysize += yystrlen ("parse error, unexpected ") + 1;
+         yysize += yystrlen (yytname[yytype]);
+         yymsg = (char *) YYSTACK_ALLOC (yysize);
+         if (yymsg != 0)
+           {
+             char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
+             yyp = yystpcpy (yyp, yytname[yytype]);
+
+             if (yycount < 5)
+               {
+                 yycount = 0;
+                 for (yyx = yyn < 0 ? -yyn : 0;
+                      yyx < (int) (sizeof (yytname) / sizeof (char *));
+                      yyx++)
+                   if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+                     {
+                       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;
 
     }
   goto yyerrlab1;
 
@@ -1839,7 +1836,7 @@ yyreturn:
 }
 
 
 }
 
 
-#line 424 "parse-gram.y"
+#line 434 "parse-gram.y"
 
 /*------------------------------------------------------------------.
 | When debugging the parser, display tokens' locations and values.  |
 
 /*------------------------------------------------------------------.
 | When debugging the parser, display tokens' locations and values.  |
index 90f7c63803ca9af6d3530c4cde3f26dc323ffae9..9a0db65aa76418bbca955f5aa929f9167266e7ac 100644 (file)
@@ -1,4 +1,4 @@
-/* A Bison parser, made from parse-gram.y, by GNU bison 1.49c.  */
+/* A Bison parser, made from parse-gram.y, by GNU bison 1.75a.  */
 
 /* Skeleton parser for Yacc-like parsing with Bison,
    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
 
 /* Skeleton parser for Yacc-like parsing with Bison,
    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
@@ -28,7 +28,7 @@
 
 /* Tokens.  */
 #ifndef YYTOKENTYPE
 
 /* Tokens.  */
 #ifndef YYTOKENTYPE
-# if defined (__STDC__) || defined (__cplusplus)
+# define YYTOKENTYPE
    /* Put the tokens into the symbol table, so that GDB and other debuggers
       know about them.  */
    enum yytokentype {
    /* Put the tokens into the symbol table, so that GDB and other debuggers
       know about them.  */
    enum yytokentype {
      PERCENT_LEFT = 267,
      PERCENT_RIGHT = 268,
      PERCENT_NONASSOC = 269,
      PERCENT_LEFT = 267,
      PERCENT_RIGHT = 268,
      PERCENT_NONASSOC = 269,
-     PERCENT_EXPECT = 270,
-     PERCENT_START = 271,
-     PERCENT_PREC = 272,
-     PERCENT_DPREC = 273,
-     PERCENT_MERGE = 274,
-     PERCENT_VERBOSE = 275,
+     PERCENT_PREC = 270,
+     PERCENT_DPREC = 271,
+     PERCENT_MERGE = 272,
+     PERCENT_DEBUG = 273,
+     PERCENT_DEFINE = 274,
+     PERCENT_DEFINES = 275,
      PERCENT_ERROR_VERBOSE = 276,
      PERCENT_ERROR_VERBOSE = 276,
-     PERCENT_OUTPUT = 277,
+     PERCENT_EXPECT = 277,
      PERCENT_FILE_PREFIX = 278,
      PERCENT_FILE_PREFIX = 278,
-     PERCENT_NAME_PREFIX = 279,
-     PERCENT_DEFINE = 280,
-     PERCENT_PURE_PARSER = 281,
-     PERCENT_GLR_PARSER = 282,
-     PERCENT_DEFINES = 283,
-     PERCENT_YACC = 284,
-     PERCENT_DEBUG = 285,
-     PERCENT_LOCATIONS = 286,
-     PERCENT_NO_LINES = 287,
-     PERCENT_SKELETON = 288,
+     PERCENT_GLR_PARSER = 279,
+     PERCENT_LEX_PARAM = 280,
+     PERCENT_LOCATIONS = 281,
+     PERCENT_NAME_PREFIX = 282,
+     PERCENT_NO_LINES = 283,
+     PERCENT_OUTPUT = 284,
+     PERCENT_PARSE_PARAM = 285,
+     PERCENT_PURE_PARSER = 286,
+     PERCENT_SKELETON = 287,
+     PERCENT_START = 288,
      PERCENT_TOKEN_TABLE = 289,
      PERCENT_TOKEN_TABLE = 289,
-     TYPE = 290,
-     EQUAL = 291,
-     SEMICOLON = 292,
-     COLON = 293,
-     PIPE = 294,
-     ID = 295,
-     PERCENT_PERCENT = 296,
-     PROLOGUE = 297,
-     EPILOGUE = 298,
-     BRACED_CODE = 299
+     PERCENT_VERBOSE = 290,
+     PERCENT_YACC = 291,
+     TYPE = 292,
+     EQUAL = 293,
+     SEMICOLON = 294,
+     COLON = 295,
+     COMMA = 296,
+     PIPE = 297,
+     ID = 298,
+     PERCENT_PERCENT = 299,
+     PROLOGUE = 300,
+     EPILOGUE = 301,
+     BRACED_CODE = 302
    };
    };
-# endif
-  /* POSIX requires `int' for tokens in interfaces.  */
-# define YYTOKENTYPE int
-#endif /* !YYTOKENTYPE */
+#endif
 #define GRAM_EOF 0
 #define STRING 258
 #define CHARACTER 259
 #define GRAM_EOF 0
 #define STRING 258
 #define CHARACTER 259
 #define PERCENT_LEFT 267
 #define PERCENT_RIGHT 268
 #define PERCENT_NONASSOC 269
 #define PERCENT_LEFT 267
 #define PERCENT_RIGHT 268
 #define PERCENT_NONASSOC 269
-#define PERCENT_EXPECT 270
-#define PERCENT_START 271
-#define PERCENT_PREC 272
-#define PERCENT_DPREC 273
-#define PERCENT_MERGE 274
-#define PERCENT_VERBOSE 275
+#define PERCENT_PREC 270
+#define PERCENT_DPREC 271
+#define PERCENT_MERGE 272
+#define PERCENT_DEBUG 273
+#define PERCENT_DEFINE 274
+#define PERCENT_DEFINES 275
 #define PERCENT_ERROR_VERBOSE 276
 #define PERCENT_ERROR_VERBOSE 276
-#define PERCENT_OUTPUT 277
+#define PERCENT_EXPECT 277
 #define PERCENT_FILE_PREFIX 278
 #define PERCENT_FILE_PREFIX 278
-#define PERCENT_NAME_PREFIX 279
-#define PERCENT_DEFINE 280
-#define PERCENT_PURE_PARSER 281
-#define PERCENT_GLR_PARSER 282
-#define PERCENT_DEFINES 283
-#define PERCENT_YACC 284
-#define PERCENT_DEBUG 285
-#define PERCENT_LOCATIONS 286
-#define PERCENT_NO_LINES 287
-#define PERCENT_SKELETON 288
+#define PERCENT_GLR_PARSER 279
+#define PERCENT_LEX_PARAM 280
+#define PERCENT_LOCATIONS 281
+#define PERCENT_NAME_PREFIX 282
+#define PERCENT_NO_LINES 283
+#define PERCENT_OUTPUT 284
+#define PERCENT_PARSE_PARAM 285
+#define PERCENT_PURE_PARSER 286
+#define PERCENT_SKELETON 287
+#define PERCENT_START 288
 #define PERCENT_TOKEN_TABLE 289
 #define PERCENT_TOKEN_TABLE 289
-#define TYPE 290
-#define EQUAL 291
-#define SEMICOLON 292
-#define COLON 293
-#define PIPE 294
-#define ID 295
-#define PERCENT_PERCENT 296
-#define PROLOGUE 297
-#define EPILOGUE 298
-#define BRACED_CODE 299
+#define PERCENT_VERBOSE 290
+#define PERCENT_YACC 291
+#define TYPE 292
+#define EQUAL 293
+#define SEMICOLON 294
+#define COLON 295
+#define COMMA 296
+#define PIPE 297
+#define ID 298
+#define PERCENT_PERCENT 299
+#define PROLOGUE 300
+#define EPILOGUE 301
+#define BRACED_CODE 302
 
 
 
 
 
 
@@ -136,8 +139,8 @@ typedef union {
   char *string;
   assoc_t assoc;
 } yystype;
   char *string;
   assoc_t assoc;
 } yystype;
-/* Line 1294 of /usr/local/share/bison/yacc.c.  */
-#line 141 "y.tab.h"
+/* Line 1281 of /usr/local/share/bison/yacc.c.  */
+#line 144 "y.tab.h"
 # define YYSTYPE yystype
 #endif
 
 # define YYSTYPE yystype
 #endif
 
index a6d8ec70a69d0ac9000d562c5293d3beb7eed59b..ee82858f54003debe00ef555ac427356fc5fb59b 100644 (file)
@@ -113,36 +113,42 @@ braced_code_t current_braced_code = action_braced_code;
 %token PERCENT_RIGHT       "%right"
 %token PERCENT_NONASSOC    "%nonassoc"
 
 %token PERCENT_RIGHT       "%right"
 %token PERCENT_NONASSOC    "%nonassoc"
 
-%token PERCENT_EXPECT        "%expect"
-%token PERCENT_START         "%start"
 %token PERCENT_PREC          "%prec"
 %token PERCENT_DPREC         "%dprec"
 %token PERCENT_MERGE         "%merge"
 %token PERCENT_PREC          "%prec"
 %token PERCENT_DPREC         "%dprec"
 %token PERCENT_MERGE         "%merge"
-%token PERCENT_VERBOSE       "%verbose"
-%token PERCENT_ERROR_VERBOSE "%error-verbose"
 
 
-%token PERCENT_OUTPUT      "%output"
-%token PERCENT_FILE_PREFIX "%file-prefix"
-%token PERCENT_NAME_PREFIX "%name-prefix"
 
 
-%token PERCENT_DEFINE      "%define"
-%token PERCENT_PURE_PARSER "%pure-parser"
-%token PERCENT_GLR_PARSER  "%glr-parser"
-
-%token PERCENT_DEFINES "%defines"
-
-%token PERCENT_YACC "%yacc"
-
-%token PERCENT_DEBUG       "%debug"
-%token PERCENT_LOCATIONS   "%locations"
-%token PERCENT_NO_LINES    "%no-lines"
-%token PERCENT_SKELETON    "%skeleton"
-%token PERCENT_TOKEN_TABLE "%token-table"
+/*----------------------.
+| Global Declarations.  |
+`----------------------*/
+
+%token
+  PERCENT_DEBUG         "%debug"
+  PERCENT_DEFINE        "%define"
+  PERCENT_DEFINES       "%defines"
+  PERCENT_ERROR_VERBOSE "%error-verbose"
+  PERCENT_EXPECT        "%expect"
+  PERCENT_FILE_PREFIX   "%file-prefix"
+  PERCENT_GLR_PARSER    "%glr-parser"
+  PERCENT_LEX_PARAM     "%lex-param"
+  PERCENT_LOCATIONS     "%locations"
+  PERCENT_NAME_PREFIX   "%name-prefix"
+  PERCENT_NO_LINES      "%no-lines"
+  PERCENT_OUTPUT        "%output"
+  PERCENT_PARSE_PARAM   "%parse-param"
+  PERCENT_PURE_PARSER   "%pure-parser"
+  PERCENT_SKELETON      "%skeleton"
+  PERCENT_START         "%start"
+  PERCENT_TOKEN_TABLE   "%token-table"
+  PERCENT_VERBOSE       "%verbose"
+  PERCENT_YACC          "%yacc"
+;
 
 %token TYPE            "type"
 %token EQUAL           "="
 %token SEMICOLON       ";"
 %token COLON           ":"
 
 %token TYPE            "type"
 %token EQUAL           "="
 %token SEMICOLON       ";"
 %token COLON           ":"
+%token COMMA           ","
 %token PIPE            "|"
 %token ID              "identifier"
 %token PERCENT_PERCENT "%%"
 %token PIPE            "|"
 %token ID              "identifier"
 %token PERCENT_PERCENT "%%"
@@ -186,12 +192,16 @@ declaration:
 | "%error-verbose"                         { error_verbose = 1; }
 | "%expect" INT                            { expected_conflicts = $2; }
 | "%file-prefix" "=" string_content        { spec_file_prefix = $3; }
 | "%error-verbose"                         { error_verbose = 1; }
 | "%expect" INT                            { expected_conflicts = $2; }
 | "%file-prefix" "=" string_content        { spec_file_prefix = $3; }
+| "%glr-parser"                           { glr_parser = 1; }
+| "%lex-param" string_content "," string_content
+                           { muscle_pair_list_grow ("lex_param", $2, $4); }
 | "%locations"                             { locations_flag = 1; }
 | "%name-prefix" "=" string_content        { spec_name_prefix = $3; }
 | "%no-lines"                              { no_lines_flag = 1; }
 | "%output" "=" string_content             { spec_outfile = $3; }
 | "%locations"                             { locations_flag = 1; }
 | "%name-prefix" "=" string_content        { spec_name_prefix = $3; }
 | "%no-lines"                              { no_lines_flag = 1; }
 | "%output" "=" string_content             { spec_outfile = $3; }
+| "%parse-param" string_content "," string_content
+                           { muscle_pair_list_grow ("parse_param", $2, $4); }
 | "%pure-parser"                           { pure_parser = 1; }
 | "%pure-parser"                           { pure_parser = 1; }
-| "%glr-parser"                           { glr_parser = 1; }
 | "%skeleton" string_content               { skeleton = $2; }
 | "%token-table"                           { token_table_flag = 1; }
 | "%verbose"                               { report_flag = 1; }
 | "%skeleton" string_content               { skeleton = $2; }
 | "%token-table"                           { token_table_flag = 1; }
 | "%verbose"                               { report_flag = 1; }
index b254f740af0eab31a0b8e90032f5a414c30faeda..6e896ed91e398512e7ef6df1105a18ac6930b72b 100644 (file)
@@ -315,51 +315,54 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
        *yy_cp = '\0'; \
        yy_c_buf_p = yy_cp;
 
        *yy_cp = '\0'; \
        yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 101
-#define YY_END_OF_BUFFER 102
-static yyconst short int yy_accept[380] =
+#define YY_NUM_RULES 104
+#define YY_END_OF_BUFFER 105
+static yyconst short int yy_accept[398] =
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  102,   49,
-       38,   37,   37,   42,   49,   41,   39,   49,   40,   34,
-       36,   49,   33,   46,   35,   53,   54,   54,   55,   50,
-       51,   80,   83,   83,   79,   50,   82,   51,   75,   78,
-       78,   74,   77,   57,   58,   58,   56,   73,   60,   61,
-       61,   59,   93,   94,   94,   85,   95,   84,   88,   95,
-       50,   51,   90,   89,   97,   99,   99,   85,   98,   84,
-       88,  100,  100,  100,   85,   84,   88,   38,   37,   37,
-       37,   37,   48,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   45,
-       39,   43,   44,   40,    0,   53,   54,   54,   54,   54,
-       52,   80,   83,   83,   83,   83,   81,   75,   78,   78,
-       78,   78,   76,   57,   58,   58,   58,   58,   72,   71,
-       72,   64,   65,   66,   67,   68,   69,   70,   72,   61,
-       61,   61,   61,   93,   94,   94,   94,   94,   91,    0,
-       91,    0,   86,   87,   92,    0,   92,   97,   99,   99,
-       99,   99,   96,  100,  100,  100,  100,  100,   86,   87,
+        0,    0,    0,    0,    0,    0,    0,    0,  105,   52,
+       41,   40,   40,   45,   52,   44,   38,   42,   52,   43,
+       36,   39,   52,   35,   49,   37,   56,   57,   57,   58,
+       53,   54,   83,   86,   86,   82,   53,   85,   54,   78,
+       81,   81,   77,   80,   60,   61,   61,   59,   76,   63,
+       64,   64,   62,   96,   97,   97,   88,   98,   87,   91,
+       98,   53,   54,   93,   92,  100,  102,  102,   88,  101,
+       87,   91,  103,  103,  103,   88,   87,   91,   41,   40,
+       40,   40,   40,   51,    0,    0,    0,    0,    0,    0,
+
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       48,   42,   46,   47,   43,    0,   56,   57,   57,   57,
+       57,   55,   83,   86,   86,   86,   86,   84,   78,   81,
+       81,   81,   81,   79,   60,   61,   61,   61,   61,   75,
+       74,   75,   67,   68,   69,   70,   71,   72,   73,   75,
+       64,   64,   64,   64,   96,   97,   97,   97,   97,   94,
+        0,   94,    0,   89,   90,   95,    0,   95,  100,  102,
+      102,  102,  102,   99,  103,  103,  103,  103,  103,   89,
+       90,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,   44,   47,    0,    0,    0,
-       87,   87,   87,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   47,   50,    0,
+        0,    0,   90,   90,   90,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   65,   66,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   62,   63,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   12,    0,    0,    0,
-        0,    0,    0,    0,   20,    0,    0,    0,    0,    0,
-       26,    0,   29,    0,    0,   32,    0,    2,    0,    0,
-        6,    0,    0,    0,    0,    0,    0,   14,    0,    0,
-        0,   18,    0,    0,    0,   23,    0,   25,   27,   30,
-
-        0,    1,    3,    0,    0,    8,    0,    0,    0,    0,
-        0,    0,    0,   19,    0,    0,    0,    0,    0,    4,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   21,
-        0,    0,    0,   31,    0,    0,    0,    0,    0,    0,
-        0,   16,   17,    0,   24,    0,    0,    0,    0,    0,
-        0,   13,    0,    0,    0,    5,    0,    0,    0,   11,
-        0,    0,    0,    0,    9,    0,   15,   22,   28,    0,
-        0,    7,    0,    0,    0,    0,    0,   10,    0
+       12,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       21,    0,    0,    0,    0,    0,   28,    0,   31,    0,
+        0,   34,    0,    2,    0,    0,    6,    0,    0,    0,
+        0,    0,    0,    0,   14,    0,    0,    0,   18,    0,
+
+        0,    0,    0,   24,    0,   27,   29,   32,    0,    1,
+        3,    0,    0,    8,    0,    0,    0,    0,    0,    0,
+        0,    0,   19,    0,    0,    0,    0,    0,    0,    4,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   22,    0,    0,    0,   33,    0,    0,    0,    0,
+        0,    0,    0,    0,   16,   17,    0,    0,   26,    0,
+        0,    0,    0,    0,    0,   25,   13,    0,    0,    0,
+        0,    5,    0,    0,    0,   11,    0,    0,    0,    0,
+        0,    9,    0,   15,   20,   23,   30,    0,    0,    7,
+        0,    0,    0,    0,    0,   10,    0
+
     } ;
 
 static yyconst int yy_ec[256] =
     } ;
 
 static yyconst int yy_ec[256] =
@@ -368,16 +371,16 @@ static yyconst int yy_ec[256] =
         1,    2,    4,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    2,    1,    5,    1,    6,    7,    1,    8,    1,
         1,    2,    4,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    2,    1,    5,    1,    6,    7,    1,    8,    1,
-        1,    9,    1,    1,   10,   11,   12,   13,   13,   13,
-       13,   13,   13,   13,   13,   14,   14,   15,   16,   17,
-       18,   19,    1,   20,   21,   21,   21,   21,   21,   21,
-       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
-       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
-       22,   23,   24,    1,   25,    1,   26,   27,   28,   29,
-
-       30,   31,   32,   33,   34,   11,   35,   36,   37,   38,
-       39,   40,   11,   41,   42,   43,   44,   45,   11,   46,
-       47,   11,   48,   49,   50,    1,    1,    1,    1,    1,
+        1,    9,    1,   10,   11,   12,   13,   14,   14,   14,
+       14,   14,   14,   14,   14,   15,   15,   16,   17,   18,
+       19,   20,    1,   21,   22,   22,   22,   22,   22,   22,
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       23,   24,   25,    1,   26,    1,   27,   28,   29,   30,
+
+       31,   32,   33,   34,   35,   12,   36,   37,   38,   39,
+       40,   41,   12,   42,   43,   44,   45,   46,   12,   47,
+       48,   12,   49,   50,   51,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -394,317 +397,324 @@ static yyconst int yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
         1,    1,    1,    1,    1
     } ;
 
-static yyconst int yy_meta[51] =
+static yyconst int yy_meta[52] =
     {   0,
         1,    1,    2,    3,    4,    5,    6,    7,    8,    1,
     {   0,
         1,    1,    2,    3,    4,    5,    6,    7,    8,    1,
-        9,   10,   11,   11,    1,    1,    1,    1,   12,    5,
-       11,   13,   14,   13,    9,   11,   11,   11,   11,   11,
-       11,    9,    9,    9,    9,    9,    9,    9,    9,    9,
-        9,    9,    9,    9,    9,    9,    9,    5,    1,    5
+        1,    9,   10,   11,   11,    1,    1,    1,    1,   12,
+        5,   11,   13,   14,   13,    9,   11,   11,   11,   11,
+       11,   11,    9,    9,    9,    9,    9,    9,    9,    9,
+        9,    9,    9,    9,    9,    9,    9,    9,    5,    1,
+        5
     } ;
 
     } ;
 
-static yyconst short int yy_base[406] =
+static yyconst short int yy_base[424] =
     {   0,
     {   0,
-        0,    0,   48,   51,   58,   61,   83,   86,   73,   94,
-      108,  110,  131,  179,  227,  249,  116,  142,  840,  841,
-      837,   55,   64,  841,  267,  841,    0,   44,   79,  841,
-      841,    0,  841,  841,  841,    0,   97,   99,  826,  841,
-      841,    0,  119,  122,  841,  841,    0,  841,    0,  126,
-      138,  841,    0,    0,  145,  153,  841,  311,  841,  155,
-      157,  841,    0,  159,  164,  841,  159,  841,   62,  164,
-      841,  841,  841,  841,    0,  185,  189,  841,  787,  841,
-      185,  192,  201,  203,  205,  207,  209,  834,  211,  213,
-      216,  219,  841,  801,   39,   86,  800,  797,   65,  802,
-
-      198,  787,  184,  796,  109,  203,  791,  798,  801,  841,
-        0,  841,    0,  230,  807,    0,  242,  244,  255,  259,
-      841,    0,  261,  263,  265,  272,  841,    0,  274,  276,
-      278,  280,  841,    0,  282,  284,  286,  288,  841,  841,
-      812,  841,  841,  841,  841,  841,  841,  841,    0,  297,
-      314,  317,  319,    0,  322,  324,  326,  328,  841,  322,
-      326,    0,  841,    0,  841,  330,  332,    0,  344,  347,
-      355,  357,  841,  359,  361,  363,  365,  367,  369,  371,
-      786,  144,  782,  781,  781,  144,  779,  788,  790,  776,
-      779,  366,  785,  771,  168,  772,  780,  781,  784,  768,
-
-      773,  767,  772,  764,  776,    0,  841,  790,    0,  783,
-        0,  374,  377,  775,  756,  765,  755,  767,  757,  765,
-      764,  763,  230,  749,  765,  758,  759,  752,  761,  745,
-      745,  756,  745,  752,  748,  744,  738,  741,  747,  746,
-      736,  747,  745,  841,  841,  373,  731,  739,  732,  728,
-      740,  726,  738,  755,  735,  723,  841,  719,  731,  372,
-      726,  717,  721,  713,  841,  713,  375,  712,  724,  710,
-      841,  714,  841,  713,  711,  841,  702,  841,  718,  703,
-      841,  378,  703,  705,  380,  718,  709,  841,  702,  703,
-      698,  841,  696,  708,  697,  841,  693,  841,  382,  841,
-
-      693,  841,  692,  705,  687,  841,  690,  691,  688,  689,
-      686,  670,  657,  841,  631,  643,  616,  609,  619,  841,
-      605,  616,  615,  600,  599,  600,  605,  591,  604,  841,
-      590,  592,  579,  841,  565,  562,  551,  535,  547,  511,
-      521,  841,  841,  509,  841,  521,  502,  511,  503,  493,
-      367,  841,  372,  372,  353,  841,  345,  309,  309,  841,
-      295,  292,  283,  260,  841,  252,  841,  841,  841,  263,
-      384,  841,  241,  236,  224,  196,  158,  841,  841,  409,
-      423,  437,  451,  465,  479,  493,  507,  227,  521,  535,
-      549,  561,  575,  587,  601,  614,  628,  642,  656,  670,
-
-      104,  684,  698,  712,   77
+        0,    0,   49,   52,   59,   62,   65,   88,   75,   90,
+       94,   97,  119,  168,  217,  240,  125,  152,  857,  858,
+      854,   56,   67,  858,  259,  858,  858,    0,   94,   94,
+      858,  858,    0,  858,  858,  858,    0,  112,  116,  842,
+      858,  858,    0,  131,  133,  858,  858,    0,  858,    0,
+      142,  148,  858,    0,    0,  150,  155,  858,  304,  858,
+      158,  160,  858,    0,  163,  175,  858,  181,  858,   97,
+      191,  858,  858,  858,  858,    0,  179,  181,  858,  803,
+      858,  130,  197,  200,  204,  206,  208,  223,  851,  210,
+      212,  225,  230,  858,  817,  100,   34,  816,  813,   86,
+
+      818,  191,  803,  196,  812,  144,  206,  807,  814,  817,
+      858,    0,  858,    0,  235,  823,    0,  248,  252,  254,
+      256,  858,    0,  258,  264,  266,  268,  858,    0,  270,
+      272,  274,  276,  858,    0,  278,  280,  282,  290,  858,
+      858,  828,  858,  858,  858,  858,  858,  858,  858,    0,
+      307,  310,  312,  316,    0,  318,  320,  322,  326,  858,
+      319,  323,    0,  858,    0,  858,  325,  327,    0,  341,
+      349,  351,  353,  858,  355,  357,  359,  361,  363,  365,
+      367,  802,  344,  798,  797,  797,  280,  795,  341,  807,
+      793,  796,  363,  802,  788,  789,  155,  788,  796,  797,
+
+      800,  784,  789,  783,  788,  780,  792,    0,  858,  806,
+        0,  799,    0,  374,  378,  791,  772,  781,  771,  783,
+      773,  781,  780,  779,  798,  764,  796,  779,  772,  773,
+      766,  775,  759,  759,  756,  769,  758,  765,  761,  757,
+      751,  754,  760,  759,  749,  760,  758,  858,  858,  369,
+      744,  752,  745,  741,  753,  739,  751,  768,  748,  736,
+      858,  735,  731,  743,  368,  738,  729,  733,  725,  738,
+      858,  724,  374,  723,  735,  721,  858,  725,  858,  724,
+      722,  858,  713,  858,  729,  714,  858,  380,  714,  716,
+      382,  729,  728,  719,  858,  712,  713,  708,  858,  706,
+
+      738,  717,  706,  858,  702,  858,  384,  858,  702,  858,
+      701,  714,  696,  858,  699,  700,  697,  696,  697,  694,
+      704,  694,  858,  692,  690,  704,  690,  685,  671,  858,
+      654,  643,  640,  612,  611,  624,  611,  617,  604,  617,
+      616,  858,  598,  598,  608,  858,  594,  591,  600,  563,
+      575,  567,  541,  548,  858,  858,  537,  512,  858,  526,
+      511,  522,  510,  499,  497,  858,  858,  500,  382,  376,
+      368,  858,  364,  351,  341,  858,  302,  309,  293,  275,
+      252,  858,  244,  858,  858,  858,  858,  233,  385,  858,
+      207,  163,  157,  138,   61,  858,  858,  411,  425,  439,
+
+      453,  467,  481,  495,  509,  138,  523,  537,  551,  563,
+      577,  589,  603,  616,  630,  644,  658,  672,   46,  686,
+      700,  714,   43
     } ;
 
     } ;
 
-static yyconst short int yy_def[406] =
+static yyconst short int yy_def[424] =
     {   0,
     {   0,
-      379,    1,  380,  380,  381,  381,  382,  382,  383,  383,
-      384,  384,  385,  385,  386,  386,  387,  387,  379,  379,
-      379,  379,  379,  379,  379,  379,  388,  379,  379,  379,
-      379,  389,  379,  379,  379,  390,  379,  379,  379,  379,
-      379,  391,  379,  379,  379,  379,  392,  379,  393,  379,
-      379,  379,  394,  395,  379,  379,  379,  396,  379,  379,
-      379,  379,  397,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  398,  379,  379,  379,  379,  379,
-      379,  399,  399,  399,  399,  399,  399,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      388,  379,  400,  379,  389,  390,  379,  379,  379,  379,
-      379,  391,  379,  379,  379,  379,  379,  393,  379,  379,
-      379,  379,  379,  395,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  401,  379,
-      379,  379,  379,  397,  379,  379,  379,  379,  379,  379,
-      379,  402,  379,  403,  379,  379,  379,  398,  379,  379,
-      379,  379,  379,  399,  399,  399,  399,  399,  399,  404,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-
-      379,  379,  379,  379,  379,  400,  379,  379,  405,  402,
-      403,  404,  404,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,    0,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-
-      379,  379,  379,  379,  379
+      397,    1,  398,  398,  399,  399,  400,  400,  401,  401,
+      402,  402,  403,  403,  404,  404,  405,  405,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  406,  397,  397,
+      397,  397,  407,  397,  397,  397,  408,  397,  397,  397,
+      397,  397,  409,  397,  397,  397,  397,  410,  397,  411,
+      397,  397,  397,  412,  413,  397,  397,  397,  414,  397,
+      397,  397,  397,  415,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  416,  397,  397,  397,  397,
+      397,  397,  417,  417,  417,  417,  417,  417,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  406,  397,  418,  397,  407,  408,  397,  397,  397,
+      397,  397,  409,  397,  397,  397,  397,  397,  411,  397,
+      397,  397,  397,  397,  413,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  419,
+      397,  397,  397,  397,  415,  397,  397,  397,  397,  397,
+      397,  397,  420,  397,  421,  397,  397,  397,  416,  397,
+      397,  397,  397,  397,  417,  417,  417,  417,  417,  417,
+      422,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+
+      397,  397,  397,  397,  397,  397,  397,  418,  397,  397,
+      423,  420,  421,  422,  422,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,    0,  397,  397,  397,
+
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397
     } ;
 
     } ;
 
-static yyconst short int yy_nxt[892] =
+static yyconst short int yy_nxt[910] =
     {   0,
     {   0,
-       20,   21,   22,   23,   24,   20,   25,   26,   20,   20,
-       27,   28,   29,   29,   30,   31,   32,   33,   20,   20,
-       27,   20,   20,   20,   27,   27,   27,   27,   27,   27,
-       27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
-       27,   27,   27,   27,   27,   27,   27,   34,   35,   20,
-       37,   38,  112,   37,   38,  113,   39,   89,   90,   39,
-       43,   44,   45,   43,   44,   45,   91,   92,  182,   40,
-      163,   41,   40,  164,   41,   55,   56,   57,  183,   46,
-       47,   48,   46,   47,   48,   50,   51,  245,   50,   51,
-       52,  114,  114,   52,  188,   58,   55,   56,   57,  117,
-
-      118,  119,  120,  189,   46,   53,   48,   46,   53,   48,
-       60,   61,   60,   61,  209,   62,   58,   62,   83,   84,
-       85,  123,  124,   86,  125,  126,  184,   87,  129,  130,
-       58,  185,   58,   64,   65,   66,   67,   46,   68,   48,
-      131,  132,   69,  198,   83,   84,   85,  135,  136,   86,
-       70,  199,   71,   87,   72,  137,  138,  150,  151,  152,
-      153,  155,  156,   46,  159,   48,  157,  158,  160,  165,
-      215,  161,  161,  166,  216,  162,  167,  167,   73,  221,
-       74,   64,   65,   66,   67,  217,   68,  169,  170,  222,
-       69,  171,  172,  163,  175,  176,  164,  232,   70,  378,
-
-       71,  233,   72,  175,  177,  178,  176,  175,  176,  175,
-      176,  175,  176,   89,   90,   91,   92,  179,   89,   90,
-      180,   91,   92,  191,  195,  377,   73,  196,   74,   76,
-       77,   78,  200,   79,   80,  111,  192,  111,   81,  256,
-      193,  201,  114,  114,  117,  118,  119,  120,   46,  202,
-       48,   76,   77,   78,  256,   79,   80,  117,  118,  376,
-       81,  119,  120,  123,  124,  125,  126,  123,  124,  375,
-       46,  374,   48,   93,  125,  126,  129,  130,  131,  132,
-      129,  130,  131,  132,  135,  136,  137,  138,  135,  136,
-      137,  138,  372,   94,  371,   95,   96,   97,   98,  150,
-
-      151,  370,   99,  100,  101,  102,  103,  104,  105,  106,
-      107,  108,  369,  109,  110,  140,  152,  153,  140,  150,
-      151,  152,  153,  141,  155,  156,  157,  158,  155,  156,
-      157,  158,  368,  140,  161,  161,  142,  143,  161,  161,
-      367,  144,  167,  167,  167,  167,  169,  170,  145,  171,
-      172,  146,  366,  147,  365,  148,  149,  169,  170,  171,
-      172,  175,  176,  175,  177,  178,  176,  178,  176,  175,
-      177,  175,  176,  175,  213,  228,  175,  213,  159,  178,
-      213,  289,  160,  364,  295,  161,  161,  305,  363,  308,
-      228,  318,  211,  373,  211,  211,  289,  211,  211,  295,
-
-      211,  362,  305,  229,  308,  361,  318,  360,  373,   36,
-       36,   36,   36,   36,   36,   36,   36,   36,   36,   36,
-       36,   36,   36,   42,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42,   49,   49,   49,
-       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
-       49,   54,   54,   54,   54,   54,   54,   54,   54,   54,
-       54,   54,   54,   54,   54,   59,   59,   59,   59,   59,
-       59,   59,   59,   59,   59,   59,   59,   59,   59,   63,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-       63,   63,   63,   75,   75,   75,   75,   75,   75,   75,
-
-       75,   75,   75,   75,   75,   75,   75,   82,   82,   82,
-       82,   82,   82,   82,   82,   82,   82,   82,   82,   82,
-       82,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-      115,  115,  359,  115,  115,  116,  358,  357,  116,  116,
-      116,  116,  356,  116,  116,  116,  116,  355,  116,  122,
-      354,  353,  352,  122,  122,  122,  122,  122,  122,  122,
-      122,  127,  127,  127,  127,  127,  127,  127,  127,  127,
-      127,  127,  127,  127,  127,  128,  351,  350,  128,  128,
-      128,  349,  128,  128,  128,  128,  128,  133,  133,  133,
-      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
-
-      133,  134,  348,  347,  346,  134,  134,  134,  134,  134,
-      134,  134,  134,  134,  139,  139,  139,  139,  139,  139,
-      139,  139,  139,  139,  139,  139,  139,  139,  154,  345,
-      344,  343,  342,  154,  341,  154,  154,  340,  154,  154,
-      339,  154,  168,  338,  337,  336,  168,  335,  334,  168,
-      168,  333,  168,  168,  332,  168,  174,  174,  174,  174,
-      174,  174,  174,  174,  174,  174,  174,  174,  331,  174,
-      206,  330,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  210,  210,  210,  210,  210,  210,
-      210,  210,  210,  210,  210,  329,  210,  210,  211,  328,
-
-      211,  211,  211,  211,  211,  211,  211,  211,  211,  211,
-      211,  211,  212,  212,  212,  212,  212,  212,  212,  212,
-      212,  212,  212,  212,  212,  212,  327,  326,  325,  324,
-      323,  322,  321,  320,  319,  317,  316,  315,  314,  313,
-      312,  311,  310,  309,  307,  306,  304,  303,  302,  301,
-      300,  299,  298,  297,  296,  294,  293,  292,  291,  290,
+       20,   21,   22,   23,   24,   20,   25,   26,   20,   27,
+       20,   28,   29,   30,   30,   31,   32,   33,   34,   20,
+       20,   28,   20,   20,   20,   28,   28,   28,   28,   28,
+       28,   28,   28,   28,   28,   28,   28,   28,   28,   28,
+       28,   28,   28,   28,   28,   28,   28,   28,   35,   36,
+       20,   38,   39,  249,   38,   39,  211,   40,   90,   91,
+       40,   44,   45,   46,   44,   45,   46,   51,   52,   92,
+       93,   41,   53,   42,   41,  185,   42,   56,   57,   58,
+      186,   47,   48,   49,   47,   48,   49,   47,   54,   49,
+       51,   52,   56,   57,   58,   53,   61,   62,   59,   61,
+
+       62,   63,  113,  396,   63,  164,  114,  115,  115,  165,
+       47,   54,   49,   59,  118,  119,  189,   59,  120,  121,
+       59,   65,   66,   67,   68,  190,   69,   84,   85,   86,
+      183,   70,   87,  124,  125,  126,  127,   88,  164,   71,
+      184,   72,  165,   73,  130,  131,  112,   47,  112,   49,
+      132,  133,  136,  137,   84,   85,   86,  138,  139,   87,
+      151,  152,  153,  154,   88,  156,  157,   74,  395,   75,
+       65,   66,   67,   68,   47,   69,   49,  158,  159,  200,
+       70,  170,  171,  172,  173,  236,  160,  201,   71,  237,
+       72,  161,   73,  394,  162,  162,  166,  393,  163,  176,
+
+      177,  167,  176,  178,  168,  168,  179,  177,  176,  177,
+      176,  177,   90,   91,   92,   93,   74,  192,   75,   77,
+       78,   79,  196,   80,   81,  176,  177,   90,   91,   82,
+      193,  180,   92,   93,  194,  181,  202,  197,  392,   47,
+      198,   49,   77,   78,   79,  203,   80,   81,  115,  115,
+      118,  119,   82,  204,  120,  121,  118,  119,  120,  121,
+      124,  125,   47,  390,   49,   94,  126,  127,  124,  125,
+      126,  127,  130,  131,  132,  133,  130,  131,  132,  133,
+      136,  137,  138,  139,  136,  137,   95,  389,   96,   97,
+       98,   99,  138,  139,  388,  100,  101,  102,  103,  104,
+
+      105,  106,  107,  108,  109,  387,  110,  111,  141,  151,
+      152,  141,  153,  154,  151,  152,  223,  142,  153,  154,
+      156,  157,  158,  159,  156,  157,  224,  141,  158,  159,
+      143,  144,  162,  162,  386,  145,  162,  162,  168,  168,
+      168,  168,  146,  170,  171,  147,  385,  148,  384,  149,
+      150,  172,  173,  170,  171,  172,  173,  176,  177,  176,
+      178,  179,  177,  179,  177,  176,  178,  176,  177,  176,
+      215,  217,  226,  231,  160,  218,  176,  215,  296,  161,
+      179,  215,  162,  162,  303,  383,  219,  227,  231,  213,
+      313,  213,  316,  296,  328,  391,  213,  382,  213,  303,
+
+      213,  232,  213,  381,  380,  313,  379,  316,  378,  328,
+      391,   37,   37,   37,   37,   37,   37,   37,   37,   37,
+       37,   37,   37,   37,   37,   43,   43,   43,   43,   43,
+       43,   43,   43,   43,   43,   43,   43,   43,   43,   50,
+       50,   50,   50,   50,   50,   50,   50,   50,   50,   50,
+       50,   50,   50,   55,   55,   55,   55,   55,   55,   55,
+       55,   55,   55,   55,   55,   55,   55,   60,   60,   60,
+       60,   60,   60,   60,   60,   60,   60,   60,   60,   60,
+       60,   64,   64,   64,   64,   64,   64,   64,   64,   64,
+       64,   64,   64,   64,   64,   76,   76,   76,   76,   76,
+
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   83,
+       83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
+       83,   83,   83,  116,  116,  116,  116,  116,  116,  116,
+      116,  116,  116,  116,  377,  116,  116,  117,  376,  375,
+      117,  117,  117,  117,  374,  117,  117,  117,  117,  373,
+      117,  123,  372,  371,  370,  123,  123,  123,  123,  123,
+      123,  123,  123,  128,  128,  128,  128,  128,  128,  128,
+      128,  128,  128,  128,  128,  128,  128,  129,  369,  368,
+      129,  129,  129,  367,  129,  129,  129,  129,  129,  134,
+      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,
+
+      134,  134,  134,  135,  366,  365,  364,  135,  135,  135,
+      135,  135,  135,  135,  135,  135,  140,  140,  140,  140,
+      140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
+      155,  363,  362,  361,  360,  155,  359,  155,  155,  358,
+      155,  155,  357,  155,  169,  356,  355,  354,  169,  353,
+      352,  169,  169,  351,  169,  169,  350,  169,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      349,  175,  208,  348,  208,  208,  208,  208,  208,  208,
+      208,  208,  208,  208,  208,  208,  212,  212,  212,  212,
+      212,  212,  212,  212,  212,  212,  212,  347,  212,  212,
+
+      213,  346,  213,  213,  213,  213,  213,  213,  213,  213,
+      213,  213,  213,  213,  214,  214,  214,  214,  214,  214,
+      214,  214,  214,  214,  214,  214,  214,  214,  345,  344,
+      343,  342,  341,  340,  339,  338,  337,  336,  335,  334,
+      333,  332,  331,  330,  329,  327,  326,  325,  324,  323,
+      322,  321,  320,  319,  318,  317,  315,  314,  312,  311,
+      310,  309,  308,  307,  306,  305,  304,  302,  301,  300,
+      299,  298,  297,  295,  294,  293,  292,  291,  290,  289,
       288,  287,  286,  285,  284,  283,  282,  281,  280,  279,
       278,  277,  276,  275,  274,  273,  272,  271,  270,  269,
       288,  287,  286,  285,  284,  283,  282,  281,  280,  279,
       278,  277,  276,  275,  274,  273,  272,  271,  270,  269,
-      268,  267,  266,  265,  264,  263,  262,  261,  260,  259,
-      258,  257,  255,  254,  253,  252,  251,  250,  249,  248,
-
-      247,  246,  244,  243,  242,  241,  240,  239,  238,  237,
-      236,  235,  234,  231,  230,  227,  226,  225,  224,  223,
-      220,  219,  218,  214,  208,  207,  205,  204,  203,  197,
-      194,  190,  187,  186,  181,   88,  173,  121,   88,  379,
-       19,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379
 
 
+      268,  267,  266,  265,  264,  263,  262,  261,  260,  259,
+      258,  257,  256,  255,  254,  253,  252,  251,  250,  248,
+      247,  246,  245,  244,  243,  242,  241,  240,  239,  238,
+      235,  234,  233,  230,  229,  228,  225,  222,  221,  220,
+      216,  210,  209,  207,  206,  205,  199,  195,  191,  188,
+      187,  182,   89,  174,  122,   89,  397,   19,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+
+      397,  397,  397,  397,  397,  397,  397,  397,  397
     } ;
 
     } ;
 
-static yyconst short int yy_chk[892] =
+static yyconst short int yy_chk[910] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        3,    3,   28,    4,    4,   28,    3,   22,   22,    4,
-        5,    5,    5,    6,    6,    6,   23,   23,   95,    3,
-       69,    3,    4,   69,    4,    9,    9,    9,   95,    5,
-        5,    5,    6,    6,    6,    7,    7,  405,    8,    8,
-        7,   29,   29,    8,   99,    9,   10,   10,   10,   37,
-
-       37,   38,   38,   99,    7,    7,    7,    8,    8,    8,
-       11,   11,   12,   12,  401,   11,   10,   12,   17,   17,
-       17,   43,   43,   17,   44,   44,   96,   17,   50,   50,
-       11,   96,   12,   13,   13,   13,   13,   17,   13,   17,
-       51,   51,   13,  105,   18,   18,   18,   55,   55,   18,
-       13,  105,   13,   18,   13,   56,   56,   60,   60,   61,
-       61,   64,   64,   18,   67,   18,   65,   65,   67,   70,
-      182,   67,   67,   70,  182,   67,   70,   70,   13,  186,
-       13,   14,   14,   14,   14,  182,   14,   76,   76,  186,
-       14,   77,   77,   81,   82,   82,   81,  195,   14,  377,
-
-       14,  195,   14,   83,   83,   84,   84,   85,   85,   86,
-       86,   87,   87,   89,   89,   90,   90,   87,   91,   91,
-       87,   92,   92,  101,  103,  376,   14,  103,   14,   15,
-       15,   15,  106,   15,   15,  388,  101,  388,   15,  223,
-      101,  106,  114,  114,  117,  117,  118,  118,   15,  106,
-       15,   16,   16,   16,  223,   16,   16,  119,  119,  375,
-       16,  120,  120,  123,  123,  124,  124,  125,  125,  374,
-       16,  373,   16,   25,  126,  126,  129,  129,  130,  130,
-      131,  131,  132,  132,  135,  135,  136,  136,  137,  137,
-      138,  138,  370,   25,  366,   25,   25,   25,   25,  150,
-
-      150,  364,   25,   25,   25,   25,   25,   25,   25,   25,
-       25,   25,  363,   25,   25,   58,  151,  151,   58,  152,
-      152,  153,  153,   58,  155,  155,  156,  156,  157,  157,
-      158,  158,  362,   58,  160,  160,   58,   58,  161,  161,
-      361,   58,  166,  166,  167,  167,  169,  169,   58,  170,
-      170,   58,  359,   58,  358,   58,   58,  171,  171,  172,
-      172,  174,  174,  175,  175,  176,  176,  177,  177,  178,
-      178,  179,  179,  180,  180,  192,  212,  212,  246,  213,
-      213,  260,  246,  357,  267,  246,  246,  282,  355,  285,
-      192,  299,  180,  371,  180,  212,  260,  212,  213,  267,
-
-      213,  354,  282,  192,  285,  353,  299,  351,  371,  380,
-      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
-      380,  380,  380,  381,  381,  381,  381,  381,  381,  381,
-      381,  381,  381,  381,  381,  381,  381,  382,  382,  382,
-      382,  382,  382,  382,  382,  382,  382,  382,  382,  382,
-      382,  383,  383,  383,  383,  383,  383,  383,  383,  383,
-      383,  383,  383,  383,  383,  384,  384,  384,  384,  384,
-      384,  384,  384,  384,  384,  384,  384,  384,  384,  385,
-      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
-      385,  385,  385,  386,  386,  386,  386,  386,  386,  386,
-
-      386,  386,  386,  386,  386,  386,  386,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  389,  389,  389,  389,  389,  389,  389,  389,  389,
-      389,  389,  350,  389,  389,  390,  349,  348,  390,  390,
-      390,  390,  347,  390,  390,  390,  390,  346,  390,  391,
-      344,  341,  340,  391,  391,  391,  391,  391,  391,  391,
-      391,  392,  392,  392,  392,  392,  392,  392,  392,  392,
-      392,  392,  392,  392,  392,  393,  339,  338,  393,  393,
-      393,  337,  393,  393,  393,  393,  393,  394,  394,  394,
-      394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
-
-      394,  395,  336,  335,  333,  395,  395,  395,  395,  395,
-      395,  395,  395,  395,  396,  396,  396,  396,  396,  396,
-      396,  396,  396,  396,  396,  396,  396,  396,  397,  332,
-      331,  329,  328,  397,  327,  397,  397,  326,  397,  397,
-      325,  397,  398,  324,  323,  322,  398,  321,  319,  398,
-      398,  318,  398,  398,  317,  398,  399,  399,  399,  399,
-      399,  399,  399,  399,  399,  399,  399,  399,  316,  399,
-      400,  315,  400,  400,  400,  400,  400,  400,  400,  400,
-      400,  400,  400,  400,  402,  402,  402,  402,  402,  402,
-      402,  402,  402,  402,  402,  313,  402,  402,  403,  312,
-
-      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
-      403,  403,  404,  404,  404,  404,  404,  404,  404,  404,
-      404,  404,  404,  404,  404,  404,  311,  310,  309,  308,
-      307,  305,  304,  303,  301,  297,  295,  294,  293,  291,
-      290,  289,  287,  286,  284,  283,  280,  279,  277,  275,
-      274,  272,  270,  269,  268,  266,  264,  263,  262,  261,
-      259,  258,  256,  255,  254,  253,  252,  251,  250,  249,
-      248,  247,  243,  242,  241,  240,  239,  238,  237,  236,
-      235,  234,  233,  232,  231,  230,  229,  228,  227,  226,
-      225,  224,  222,  221,  220,  219,  218,  217,  216,  215,
-
-      214,  210,  208,  205,  204,  203,  202,  201,  200,  199,
-      198,  197,  196,  194,  193,  191,  190,  189,  188,  187,
-      185,  184,  183,  181,  141,  115,  109,  108,  107,  104,
-      102,  100,   98,   97,   94,   88,   79,   39,   21,   19,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379
-
+        1,    3,    3,  423,    4,    4,  419,    3,   22,   22,
+        4,    5,    5,    5,    6,    6,    6,    7,    7,   23,
+       23,    3,    7,    3,    4,   97,    4,    9,    9,    9,
+       97,    5,    5,    5,    6,    6,    6,    7,    7,    7,
+        8,    8,   10,   10,   10,    8,   11,   11,    9,   12,
+
+       12,   11,   29,  395,   12,   70,   29,   30,   30,   70,
+        8,    8,    8,   10,   38,   38,  100,   11,   39,   39,
+       12,   13,   13,   13,   13,  100,   13,   17,   17,   17,
+       96,   13,   17,   44,   44,   45,   45,   17,   82,   13,
+       96,   13,   82,   13,   51,   51,  406,   17,  406,   17,
+       52,   52,   56,   56,   18,   18,   18,   57,   57,   18,
+       61,   61,   62,   62,   18,   65,   65,   13,  394,   13,
+       14,   14,   14,   14,   18,   14,   18,   66,   66,  106,
+       14,   77,   77,   78,   78,  197,   68,  106,   14,  197,
+       14,   68,   14,  393,   68,   68,   71,  392,   68,   83,
+
+       83,   71,   84,   84,   71,   71,   85,   85,   86,   86,
+       87,   87,   90,   90,   91,   91,   14,  102,   14,   15,
+       15,   15,  104,   15,   15,   88,   88,   92,   92,   15,
+      102,   88,   93,   93,  102,   88,  107,  104,  391,   15,
+      104,   15,   16,   16,   16,  107,   16,   16,  115,  115,
+      118,  118,   16,  107,  119,  119,  120,  120,  121,  121,
+      124,  124,   16,  388,   16,   25,  125,  125,  126,  126,
+      127,  127,  130,  130,  131,  131,  132,  132,  133,  133,
+      136,  136,  137,  137,  138,  138,   25,  383,   25,   25,
+       25,   25,  139,  139,  381,   25,   25,   25,   25,   25,
+
+       25,   25,   25,   25,   25,  380,   25,   25,   59,  151,
+      151,   59,  152,  152,  153,  153,  187,   59,  154,  154,
+      156,  156,  157,  157,  158,  158,  187,   59,  159,  159,
+       59,   59,  161,  161,  379,   59,  162,  162,  167,  167,
+      168,  168,   59,  170,  170,   59,  378,   59,  377,   59,
+       59,  171,  171,  172,  172,  173,  173,  175,  175,  176,
+      176,  177,  177,  178,  178,  179,  179,  180,  180,  181,
+      181,  183,  189,  193,  250,  183,  214,  214,  265,  250,
+      215,  215,  250,  250,  273,  375,  183,  189,  193,  181,
+      288,  181,  291,  265,  307,  389,  214,  374,  214,  273,
+
+      215,  193,  215,  373,  371,  288,  370,  291,  369,  307,
+      389,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  399,  399,  399,  399,  399,
+      399,  399,  399,  399,  399,  399,  399,  399,  399,  400,
+      400,  400,  400,  400,  400,  400,  400,  400,  400,  400,
+      400,  400,  400,  401,  401,  401,  401,  401,  401,  401,
+      401,  401,  401,  401,  401,  401,  401,  402,  402,  402,
+      402,  402,  402,  402,  402,  402,  402,  402,  402,  402,
+      402,  403,  403,  403,  403,  403,  403,  403,  403,  403,
+      403,  403,  403,  403,  403,  404,  404,  404,  404,  404,
+
+      404,  404,  404,  404,  404,  404,  404,  404,  404,  405,
+      405,  405,  405,  405,  405,  405,  405,  405,  405,  405,
+      405,  405,  405,  407,  407,  407,  407,  407,  407,  407,
+      407,  407,  407,  407,  368,  407,  407,  408,  365,  364,
+      408,  408,  408,  408,  363,  408,  408,  408,  408,  362,
+      408,  409,  361,  360,  358,  409,  409,  409,  409,  409,
+      409,  409,  409,  410,  410,  410,  410,  410,  410,  410,
+      410,  410,  410,  410,  410,  410,  410,  411,  357,  354,
+      411,  411,  411,  353,  411,  411,  411,  411,  411,  412,
+      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
+
+      412,  412,  412,  413,  352,  351,  350,  413,  413,  413,
+      413,  413,  413,  413,  413,  413,  414,  414,  414,  414,
+      414,  414,  414,  414,  414,  414,  414,  414,  414,  414,
+      415,  349,  348,  347,  345,  415,  344,  415,  415,  343,
+      415,  415,  341,  415,  416,  340,  339,  338,  416,  337,
+      336,  416,  416,  335,  416,  416,  334,  416,  417,  417,
+      417,  417,  417,  417,  417,  417,  417,  417,  417,  417,
+      333,  417,  418,  332,  418,  418,  418,  418,  418,  418,
+      418,  418,  418,  418,  418,  418,  420,  420,  420,  420,
+      420,  420,  420,  420,  420,  420,  420,  331,  420,  420,
+
+      421,  329,  421,  421,  421,  421,  421,  421,  421,  421,
+      421,  421,  421,  421,  422,  422,  422,  422,  422,  422,
+      422,  422,  422,  422,  422,  422,  422,  422,  328,  327,
+      326,  325,  324,  322,  321,  320,  319,  318,  317,  316,
+      315,  313,  312,  311,  309,  305,  303,  302,  301,  300,
+      298,  297,  296,  294,  293,  292,  290,  289,  286,  285,
+      283,  281,  280,  278,  276,  275,  274,  272,  270,  269,
+      268,  267,  266,  264,  263,  262,  260,  259,  258,  257,
+      256,  255,  254,  253,  252,  251,  247,  246,  245,  244,
+      243,  242,  241,  240,  239,  238,  237,  236,  235,  234,
+
+      233,  232,  231,  230,  229,  228,  227,  226,  225,  224,
+      223,  222,  221,  220,  219,  218,  217,  216,  212,  210,
+      207,  206,  205,  204,  203,  202,  201,  200,  199,  198,
+      196,  195,  194,  192,  191,  190,  188,  186,  185,  184,
+      182,  142,  116,  110,  109,  108,  105,  103,  101,   99,
+       98,   95,   89,   80,   40,   21,   19,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+
+      397,  397,  397,  397,  397,  397,  397,  397,  397
     } ;
 
 static yy_state_type yy_last_accepting_state;
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -713,19 +723,20 @@ static char *yy_last_accepting_cpos;
 extern int yy_flex_debug;
 int yy_flex_debug = 1;
 
 extern int yy_flex_debug;
 int yy_flex_debug = 1;
 
-static yyconst short int yy_rule_linenum[101] =
+static yyconst short int yy_rule_linenum[104] =
     {   0,
       119,  120,  121,  122,  123,  124,  125,  126,  127,  128,
       129,  130,  131,  132,  133,  134,  135,  136,  137,  138,
       139,  140,  141,  142,  143,  144,  145,  146,  147,  148,
     {   0,
       119,  120,  121,  122,  123,  124,  125,  126,  127,  128,
       129,  130,  131,  132,  133,  134,  135,  136,  137,  138,
       139,  140,  141,  142,  143,  144,  145,  146,  147,  148,
-      149,  150,  152,  153,  154,  155,  157,  158,  159,  165,
-      168,  171,  174,  175,  178,  181,  184,  192,  198,  214,
-      215,  226,  238,  239,  240,  257,  267,  269,  289,  305,
-      307,  327,  339,  343,  344,  345,  346,  347,  348,  349,
-      350,  351,  357,  368,  374,  375,  377,  379,  397,  403,
-      404,  406,  408,  426,  429,  432,  433,  436,  447,  459,
-      461,  463,  466,  467,  470,  490,  497,  498,  499,  519
-
+      149,  150,  151,  152,  154,  155,  156,  157,  158,  160,
+      161,  162,  168,  171,  174,  177,  178,  181,  184,  187,
+      195,  201,  217,  218,  229,  241,  242,  243,  260,  270,
+      272,  292,  308,  310,  330,  342,  346,  347,  348,  349,
+      350,  351,  352,  353,  354,  360,  371,  377,  378,  380,
+      382,  400,  406,  407,  409,  411,  429,  432,  435,  436,
+      439,  450,  462,  464,  466,  469,  470,  473,  493,  500,
+
+      501,  502,  522
     } ;
 
 /* The intent behind this definition is that it'll catch
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -843,7 +854,7 @@ static void handle_at PARAMS ((braced_code_t code_kind,
 #define SC_PROLOGUE 7
 #define SC_EPILOGUE 8
 
 #define SC_PROLOGUE 7
 #define SC_EPILOGUE 8
 
-#line 847 "scan-gram.c"
+#line 858 "scan-gram.c"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -1017,7 +1028,7 @@ YY_DECL
   /*----------------------------.
   | Scanning Bison directives.  |
   `----------------------------*/
   /*----------------------------.
   | Scanning Bison directives.  |
   `----------------------------*/
-#line 1021 "scan-gram.c"
+#line 1032 "scan-gram.c"
 
        if ( yy_init )
                {
 
        if ( yy_init )
                {
@@ -1068,13 +1079,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 380 )
+                               if ( yy_current_state >= 398 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 841 );
+               while ( yy_base[yy_current_state] != 858 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -1094,13 +1105,13 @@ do_action:      /* This label is used only to access EOF actions. */
                        {
                        if ( yy_act == 0 )
                                fprintf( stderr, "--scanner backing up\n" );
                        {
                        if ( yy_act == 0 )
                                fprintf( stderr, "--scanner backing up\n" );
-                       else if ( yy_act < 101 )
+                       else if ( yy_act < 104 )
                                fprintf( stderr, "--accepting rule at line %d (\"%s\")\n",
                                         yy_rule_linenum[yy_act], yytext );
                                fprintf( stderr, "--accepting rule at line %d (\"%s\")\n",
                                         yy_rule_linenum[yy_act], yytext );
-                       else if ( yy_act == 101 )
+                       else if ( yy_act == 104 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
                                         yytext );
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
                                         yytext );
-                       else if ( yy_act == 102 )
+                       else if ( yy_act == 105 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -1215,151 +1226,166 @@ return PERCENT_OUTPUT;
 case 20:
 YY_RULE_SETUP
 #line 138 "scan-gram.l"
 case 20:
 YY_RULE_SETUP
 #line 138 "scan-gram.l"
-{ rule_length--; return PERCENT_PREC; }
+return PERCENT_PARSE_PARAM;
        YY_BREAK
 case 21:
 YY_RULE_SETUP
 #line 139 "scan-gram.l"
        YY_BREAK
 case 21:
 YY_RULE_SETUP
 #line 139 "scan-gram.l"
-return PERCENT_PRINTER;
+{ rule_length--; return PERCENT_PREC; }
        YY_BREAK
 case 22:
 YY_RULE_SETUP
 #line 140 "scan-gram.l"
        YY_BREAK
 case 22:
 YY_RULE_SETUP
 #line 140 "scan-gram.l"
-return PERCENT_PURE_PARSER;
+return PERCENT_PRINTER;
        YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 141 "scan-gram.l"
        YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 141 "scan-gram.l"
-return PERCENT_RIGHT;
+return PERCENT_PURE_PARSER;
        YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 142 "scan-gram.l"
        YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 142 "scan-gram.l"
-return PERCENT_SKELETON;
+return PERCENT_RIGHT;
        YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 143 "scan-gram.l"
        YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 143 "scan-gram.l"
-return PERCENT_START;
+return PERCENT_LEX_PARAM;
        YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 144 "scan-gram.l"
        YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 144 "scan-gram.l"
-return PERCENT_TOKEN;
+return PERCENT_SKELETON;
        YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 145 "scan-gram.l"
        YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 145 "scan-gram.l"
-return PERCENT_TOKEN;
+return PERCENT_START;
        YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 146 "scan-gram.l"
        YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 146 "scan-gram.l"
-return PERCENT_TOKEN_TABLE;
+return PERCENT_TOKEN;
        YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 147 "scan-gram.l"
        YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 147 "scan-gram.l"
-return PERCENT_TYPE;
+return PERCENT_TOKEN;
        YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 148 "scan-gram.l"
        YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 148 "scan-gram.l"
-return PERCENT_UNION;
+return PERCENT_TOKEN_TABLE;
        YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 149 "scan-gram.l"
        YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 149 "scan-gram.l"
-return PERCENT_VERBOSE;
+return PERCENT_TYPE;
        YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 150 "scan-gram.l"
        YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 150 "scan-gram.l"
-return PERCENT_YACC;
+return PERCENT_UNION;
        YY_BREAK
 case 33:
 YY_RULE_SETUP
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 152 "scan-gram.l"
-return EQUAL;
+#line 151 "scan-gram.l"
+return PERCENT_VERBOSE;
        YY_BREAK
 case 34:
 YY_RULE_SETUP
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 153 "scan-gram.l"
-{ rule_length = 0; return COLON; }
+#line 152 "scan-gram.l"
+return PERCENT_YACC;
        YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 154 "scan-gram.l"
        YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 154 "scan-gram.l"
-{ rule_length = 0; return PIPE; }
+return EQUAL;
        YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 155 "scan-gram.l"
        YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 155 "scan-gram.l"
-return SEMICOLON;
+{ rule_length = 0; return COLON; }
        YY_BREAK
 case 37:
 YY_RULE_SETUP
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 157 "scan-gram.l"
-YY_LINES; YY_STEP;
+#line 156 "scan-gram.l"
+{ rule_length = 0; return PIPE; }
        YY_BREAK
 case 38:
 YY_RULE_SETUP
        YY_BREAK
 case 38:
 YY_RULE_SETUP
+#line 157 "scan-gram.l"
+return COMMA;
+       YY_BREAK
+case 39:
+YY_RULE_SETUP
 #line 158 "scan-gram.l"
 #line 158 "scan-gram.l"
+return SEMICOLON;
+       YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 160 "scan-gram.l"
+YY_LINES; YY_STEP;
+       YY_BREAK
+case 41:
+YY_RULE_SETUP
+#line 161 "scan-gram.l"
 YY_STEP;
        YY_BREAK
 YY_STEP;
        YY_BREAK
-case 39:
+case 42:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 159 "scan-gram.l"
+#line 162 "scan-gram.l"
 {
     yylval->symbol = symbol_get (yytext, *yylloc);
     rule_length++;
     return ID;
   }
        YY_BREAK
 {
     yylval->symbol = symbol_get (yytext, *yylloc);
     rule_length++;
     return ID;
   }
        YY_BREAK
-case 40:
+case 43:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 165 "scan-gram.l"
+#line 168 "scan-gram.l"
 yylval->integer = strtol (yytext, 0, 10); return INT;
        YY_BREAK
 /* Characters.  We don't check there is only one.  */
 yylval->integer = strtol (yytext, 0, 10); return INT;
        YY_BREAK
 /* Characters.  We don't check there is only one.  */
-case 41:
+case 44:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 168 "scan-gram.l"
+#line 171 "scan-gram.l"
 YY_OBS_GROW; yy_push_state (SC_ESCAPED_CHARACTER);
        YY_BREAK
 /* Strings. */
 YY_OBS_GROW; yy_push_state (SC_ESCAPED_CHARACTER);
        YY_BREAK
 /* Strings. */
-case 42:
+case 45:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 171 "scan-gram.l"
+#line 174 "scan-gram.l"
 YY_OBS_GROW; yy_push_state (SC_ESCAPED_STRING);
        YY_BREAK
 /* Comments. */
 YY_OBS_GROW; yy_push_state (SC_ESCAPED_STRING);
        YY_BREAK
 /* Comments. */
-case 43:
+case 46:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 174 "scan-gram.l"
+#line 177 "scan-gram.l"
 yy_push_state (SC_COMMENT);
        YY_BREAK
 yy_push_state (SC_COMMENT);
        YY_BREAK
-case 44:
+case 47:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 175 "scan-gram.l"
+#line 178 "scan-gram.l"
 YY_STEP;
        YY_BREAK
 /* Prologue. */
 YY_STEP;
        YY_BREAK
 /* Prologue. */
-case 45:
+case 48:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 178 "scan-gram.l"
+#line 181 "scan-gram.l"
 yy_push_state (SC_PROLOGUE);
        YY_BREAK
 /* Code in between braces.  */
 yy_push_state (SC_PROLOGUE);
        YY_BREAK
 /* Code in between braces.  */
-case 46:
+case 49:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 181 "scan-gram.l"
+#line 184 "scan-gram.l"
 YY_OBS_GROW; ++braces_level; yy_push_state (SC_BRACED_CODE);
        YY_BREAK
 /* A type. */
 YY_OBS_GROW; ++braces_level; yy_push_state (SC_BRACED_CODE);
        YY_BREAK
 /* A type. */
-case 47:
+case 50:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 184 "scan-gram.l"
+#line 187 "scan-gram.l"
 {
     obstack_grow (&string_obstack, yytext + 1, yyleng - 2);
     YY_OBS_FINISH;
 {
     obstack_grow (&string_obstack, yytext + 1, yyleng - 2);
     YY_OBS_FINISH;
@@ -1367,18 +1393,18 @@ YY_RULE_SETUP
     return TYPE;
   }
        YY_BREAK
     return TYPE;
   }
        YY_BREAK
-case 48:
+case 51:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 192 "scan-gram.l"
+#line 195 "scan-gram.l"
 {
     if (++percent_percent_count == 2)
       yy_push_state (SC_EPILOGUE);
     return PERCENT_PERCENT;
   }
        YY_BREAK
 {
     if (++percent_percent_count == 2)
       yy_push_state (SC_EPILOGUE);
     return PERCENT_PERCENT;
   }
        YY_BREAK
-case 49:
+case 52:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 198 "scan-gram.l"
+#line 201 "scan-gram.l"
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, _(": invalid character: `%c'\n"), *yytext);
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, _(": invalid character: `%c'\n"), *yytext);
@@ -1393,14 +1419,14 @@ YY_RULE_SETUP
   `------------------------------------------------------------*/
 
 
   `------------------------------------------------------------*/
 
 
-case 50:
+case 53:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 214 "scan-gram.l"
+#line 217 "scan-gram.l"
 if (YY_START != SC_COMMENT) obstack_sgrow (&string_obstack, "@<:@");
        YY_BREAK
 if (YY_START != SC_COMMENT) obstack_sgrow (&string_obstack, "@<:@");
        YY_BREAK
-case 51:
+case 54:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 215 "scan-gram.l"
+#line 218 "scan-gram.l"
 if (YY_START != SC_COMMENT) obstack_sgrow (&string_obstack, "@:>@");
        YY_BREAK
 
 if (YY_START != SC_COMMENT) obstack_sgrow (&string_obstack, "@:>@");
        YY_BREAK
 
@@ -1409,9 +1435,9 @@ if (YY_START != SC_COMMENT) obstack_sgrow (&string_obstack, "@:>@");
   `-----------------------------------------------------------*/
 
 
   `-----------------------------------------------------------*/
 
 
-case 52:
+case 55:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 226 "scan-gram.l"
+#line 229 "scan-gram.l"
 { /* End of the comment. */
     if (yy_top_state () == INITIAL)
       {
 { /* End of the comment. */
     if (yy_top_state () == INITIAL)
       {
@@ -1424,23 +1450,23 @@ YY_RULE_SETUP
     yy_pop_state ();
   }
        YY_BREAK
     yy_pop_state ();
   }
        YY_BREAK
-case 53:
+case 56:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 238 "scan-gram.l"
+#line 241 "scan-gram.l"
 if (yy_top_state () != INITIAL) YY_OBS_GROW;
        YY_BREAK
 if (yy_top_state () != INITIAL) YY_OBS_GROW;
        YY_BREAK
-case 54:
+case 57:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 239 "scan-gram.l"
+#line 242 "scan-gram.l"
 if (yy_top_state () != INITIAL) YY_OBS_GROW; YY_LINES;
        YY_BREAK
 if (yy_top_state () != INITIAL) YY_OBS_GROW; YY_LINES;
        YY_BREAK
-case 55:
+case 58:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 240 "scan-gram.l"
+#line 243 "scan-gram.l"
 /* Stray `*'. */if (yy_top_state () != INITIAL) YY_OBS_GROW;
        YY_BREAK
 case YY_STATE_EOF(SC_COMMENT):
 /* Stray `*'. */if (yy_top_state () != INITIAL) YY_OBS_GROW;
        YY_BREAK
 case YY_STATE_EOF(SC_COMMENT):
-#line 242 "scan-gram.l"
+#line 245 "scan-gram.l"
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, _(": unexpected end of file in a comment\n"));
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, _(": unexpected end of file in a comment\n"));
@@ -1454,9 +1480,9 @@ case YY_STATE_EOF(SC_COMMENT):
   `----------------------------------------------------------------*/
 
 
   `----------------------------------------------------------------*/
 
 
-case 56:
+case 59:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 257 "scan-gram.l"
+#line 260 "scan-gram.l"
 {
     assert (yy_top_state () == INITIAL);
     YY_OBS_GROW;
 {
     assert (yy_top_state () == INITIAL);
     YY_OBS_GROW;
@@ -1467,18 +1493,18 @@ YY_RULE_SETUP
     return STRING;
   }
        YY_BREAK
     return STRING;
   }
        YY_BREAK
-case 57:
+case 60:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 267 "scan-gram.l"
+#line 270 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 YY_OBS_GROW;
        YY_BREAK
-case 58:
+case 61:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 269 "scan-gram.l"
+#line 272 "scan-gram.l"
 obstack_1grow (&string_obstack, '\n'); YY_LINES;
        YY_BREAK
 case YY_STATE_EOF(SC_ESCAPED_STRING):
 obstack_1grow (&string_obstack, '\n'); YY_LINES;
        YY_BREAK
 case YY_STATE_EOF(SC_ESCAPED_STRING):
-#line 271 "scan-gram.l"
+#line 274 "scan-gram.l"
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, _(": unexpected end of file in a string\n"));
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, _(": unexpected end of file in a string\n"));
@@ -1496,9 +1522,9 @@ case YY_STATE_EOF(SC_ESCAPED_STRING):
   `---------------------------------------------------------------*/
 
 
   `---------------------------------------------------------------*/
 
 
-case 59:
+case 62:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 289 "scan-gram.l"
+#line 292 "scan-gram.l"
 {
     YY_OBS_GROW;
     assert (yy_top_state () == INITIAL);
 {
     YY_OBS_GROW;
     assert (yy_top_state () == INITIAL);
@@ -1515,18 +1541,18 @@ YY_RULE_SETUP
     }
   }
        YY_BREAK
     }
   }
        YY_BREAK
-case 60:
+case 63:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 305 "scan-gram.l"
+#line 308 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 YY_OBS_GROW;
        YY_BREAK
-case 61:
+case 64:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 307 "scan-gram.l"
+#line 310 "scan-gram.l"
 obstack_1grow (&string_obstack, '\n'); YY_LINES;
        YY_BREAK
 case YY_STATE_EOF(SC_ESCAPED_CHARACTER):
 obstack_1grow (&string_obstack, '\n'); YY_LINES;
        YY_BREAK
 case YY_STATE_EOF(SC_ESCAPED_CHARACTER):
-#line 309 "scan-gram.l"
+#line 312 "scan-gram.l"
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, _(": unexpected end of file in a character\n"));
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, _(": unexpected end of file in a character\n"));
@@ -1543,9 +1569,9 @@ case YY_STATE_EOF(SC_ESCAPED_CHARACTER):
   `----------------------------*/
 
 
   `----------------------------*/
 
 
-case 62:
+case 65:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 327 "scan-gram.l"
+#line 330 "scan-gram.l"
 {
     long c = strtol (yytext + 1, 0, 8);
     if (c > 255)
 {
     long c = strtol (yytext + 1, 0, 8);
     if (c > 255)
@@ -1558,56 +1584,56 @@ YY_RULE_SETUP
       obstack_1grow (&string_obstack, c);
   }
        YY_BREAK
       obstack_1grow (&string_obstack, c);
   }
        YY_BREAK
-case 63:
+case 66:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 339 "scan-gram.l"
+#line 342 "scan-gram.l"
 {
     obstack_1grow (&string_obstack, strtol (yytext + 2, 0, 16));
   }
        YY_BREAK
 {
     obstack_1grow (&string_obstack, strtol (yytext + 2, 0, 16));
   }
        YY_BREAK
-case 64:
+case 67:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 343 "scan-gram.l"
+#line 346 "scan-gram.l"
 obstack_1grow (&string_obstack, '\a');
        YY_BREAK
 obstack_1grow (&string_obstack, '\a');
        YY_BREAK
-case 65:
+case 68:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 344 "scan-gram.l"
+#line 347 "scan-gram.l"
 obstack_1grow (&string_obstack, '\b');
        YY_BREAK
 obstack_1grow (&string_obstack, '\b');
        YY_BREAK
-case 66:
+case 69:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 345 "scan-gram.l"
+#line 348 "scan-gram.l"
 obstack_1grow (&string_obstack, '\f');
        YY_BREAK
 obstack_1grow (&string_obstack, '\f');
        YY_BREAK
-case 67:
+case 70:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 346 "scan-gram.l"
+#line 349 "scan-gram.l"
 obstack_1grow (&string_obstack, '\n');
        YY_BREAK
 obstack_1grow (&string_obstack, '\n');
        YY_BREAK
-case 68:
+case 71:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 347 "scan-gram.l"
+#line 350 "scan-gram.l"
 obstack_1grow (&string_obstack, '\r');
        YY_BREAK
 obstack_1grow (&string_obstack, '\r');
        YY_BREAK
-case 69:
+case 72:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 348 "scan-gram.l"
+#line 351 "scan-gram.l"
 obstack_1grow (&string_obstack, '\t');
        YY_BREAK
 obstack_1grow (&string_obstack, '\t');
        YY_BREAK
-case 70:
+case 73:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 349 "scan-gram.l"
+#line 352 "scan-gram.l"
 obstack_1grow (&string_obstack, '\v');
        YY_BREAK
 obstack_1grow (&string_obstack, '\v');
        YY_BREAK
-case 71:
+case 74:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 350 "scan-gram.l"
+#line 353 "scan-gram.l"
 obstack_1grow (&string_obstack, yytext[1]);
        YY_BREAK
 obstack_1grow (&string_obstack, yytext[1]);
        YY_BREAK
-case 72:
+case 75:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 351 "scan-gram.l"
+#line 354 "scan-gram.l"
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, _(": unrecognized escape: %s\n"), quote (yytext));
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, _(": unrecognized escape: %s\n"), quote (yytext));
@@ -1615,9 +1641,9 @@ YY_RULE_SETUP
   }
        YY_BREAK
 /* FLex wants this rule, in case of a `\<<EOF>>'. */
   }
        YY_BREAK
 /* FLex wants this rule, in case of a `\<<EOF>>'. */
-case 73:
+case 76:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 357 "scan-gram.l"
+#line 360 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 
 YY_OBS_GROW;
        YY_BREAK
 
@@ -1627,38 +1653,38 @@ YY_OBS_GROW;
   `----------------------------------------------------------*/
 
 
   `----------------------------------------------------------*/
 
 
-case 74:
+case 77:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 368 "scan-gram.l"
+#line 371 "scan-gram.l"
 {
     YY_OBS_GROW;
     assert (yy_top_state () != INITIAL);
     yy_pop_state ();
   }
        YY_BREAK
 {
     YY_OBS_GROW;
     assert (yy_top_state () != INITIAL);
     yy_pop_state ();
   }
        YY_BREAK
-case 75:
+case 78:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 374 "scan-gram.l"
+#line 377 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 YY_OBS_GROW;
        YY_BREAK
-case 76:
+case 79:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 375 "scan-gram.l"
+#line 378 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 /* FLex wants this rule, in case of a `\<<EOF>>'. */
 YY_OBS_GROW;
        YY_BREAK
 /* FLex wants this rule, in case of a `\<<EOF>>'. */
-case 77:
+case 80:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 377 "scan-gram.l"
+#line 380 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 YY_OBS_GROW;
        YY_BREAK
-case 78:
+case 81:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 379 "scan-gram.l"
+#line 382 "scan-gram.l"
 YY_OBS_GROW; YY_LINES;
        YY_BREAK
 case YY_STATE_EOF(SC_CHARACTER):
 YY_OBS_GROW; YY_LINES;
        YY_BREAK
 case YY_STATE_EOF(SC_CHARACTER):
-#line 381 "scan-gram.l"
+#line 384 "scan-gram.l"
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, _(": unexpected end of file in a character\n"));
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, _(": unexpected end of file in a character\n"));
@@ -1673,38 +1699,38 @@ case YY_STATE_EOF(SC_CHARACTER):
   `----------------------------------------------------------------*/
 
 
   `----------------------------------------------------------------*/
 
 
-case 79:
+case 82:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 397 "scan-gram.l"
+#line 400 "scan-gram.l"
 {
     assert (yy_top_state () != INITIAL);
     YY_OBS_GROW;
     yy_pop_state ();
   }
        YY_BREAK
 {
     assert (yy_top_state () != INITIAL);
     YY_OBS_GROW;
     yy_pop_state ();
   }
        YY_BREAK
-case 80:
+case 83:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 403 "scan-gram.l"
+#line 406 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 YY_OBS_GROW;
        YY_BREAK
-case 81:
+case 84:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 404 "scan-gram.l"
+#line 407 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 /* FLex wants this rule, in case of a `\<<EOF>>'. */
 YY_OBS_GROW;
        YY_BREAK
 /* FLex wants this rule, in case of a `\<<EOF>>'. */
-case 82:
+case 85:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 406 "scan-gram.l"
+#line 409 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 YY_OBS_GROW;
        YY_BREAK
-case 83:
+case 86:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 408 "scan-gram.l"
+#line 411 "scan-gram.l"
 YY_OBS_GROW; YY_LINES;
        YY_BREAK
 case YY_STATE_EOF(SC_STRING):
 YY_OBS_GROW; YY_LINES;
        YY_BREAK
 case YY_STATE_EOF(SC_STRING):
-#line 410 "scan-gram.l"
+#line 413 "scan-gram.l"
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, _(": unexpected end of file in a string\n"));
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, _(": unexpected end of file in a string\n"));
@@ -1719,32 +1745,32 @@ case YY_STATE_EOF(SC_STRING):
 
 
 /* Characters.  We don't check there is only one.  */
 
 
 /* Characters.  We don't check there is only one.  */
-case 84:
+case 87:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 426 "scan-gram.l"
+#line 429 "scan-gram.l"
 YY_OBS_GROW; yy_push_state (SC_CHARACTER);
        YY_BREAK
 /* Strings. */
 YY_OBS_GROW; yy_push_state (SC_CHARACTER);
        YY_BREAK
 /* Strings. */
-case 85:
+case 88:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 429 "scan-gram.l"
+#line 432 "scan-gram.l"
 YY_OBS_GROW; yy_push_state (SC_STRING);
        YY_BREAK
 /* Comments. */
 YY_OBS_GROW; yy_push_state (SC_STRING);
        YY_BREAK
 /* Comments. */
-case 86:
+case 89:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 432 "scan-gram.l"
+#line 435 "scan-gram.l"
 YY_OBS_GROW; yy_push_state (SC_COMMENT);
        YY_BREAK
 YY_OBS_GROW; yy_push_state (SC_COMMENT);
        YY_BREAK
-case 87:
+case 90:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 433 "scan-gram.l"
+#line 436 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 /* Not comments. */
 YY_OBS_GROW;
        YY_BREAK
 /* Not comments. */
-case 88:
+case 91:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 436 "scan-gram.l"
+#line 439 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 
 YY_OBS_GROW;
        YY_BREAK
 
@@ -1754,9 +1780,9 @@ YY_OBS_GROW;
   `---------------------------------------------------------------*/
 
 
   `---------------------------------------------------------------*/
 
 
-case 89:
+case 92:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 447 "scan-gram.l"
+#line 450 "scan-gram.l"
 {
     YY_OBS_GROW;
     if (--braces_level == 0)
 {
     YY_OBS_GROW;
     if (--braces_level == 0)
@@ -1769,41 +1795,41 @@ YY_RULE_SETUP
       }
   }
        YY_BREAK
       }
   }
        YY_BREAK
-case 90:
+case 93:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 459 "scan-gram.l"
+#line 462 "scan-gram.l"
 YY_OBS_GROW; braces_level++;
        YY_BREAK
 YY_OBS_GROW; braces_level++;
        YY_BREAK
-case 91:
+case 94:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 461 "scan-gram.l"
+#line 464 "scan-gram.l"
 { handle_dollar (current_braced_code,
                                                   yytext, *yylloc); }
        YY_BREAK
 { handle_dollar (current_braced_code,
                                                   yytext, *yylloc); }
        YY_BREAK
-case 92:
+case 95:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 463 "scan-gram.l"
+#line 466 "scan-gram.l"
 { handle_at (current_braced_code,
                                               yytext, *yylloc); }
        YY_BREAK
 { handle_at (current_braced_code,
                                               yytext, *yylloc); }
        YY_BREAK
-case 93:
+case 96:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 466 "scan-gram.l"
+#line 469 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 YY_OBS_GROW;
        YY_BREAK
-case 94:
+case 97:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 467 "scan-gram.l"
+#line 470 "scan-gram.l"
 YY_OBS_GROW; YY_LINES;
        YY_BREAK
 /* A lose $, or /, or etc. */
 YY_OBS_GROW; YY_LINES;
        YY_BREAK
 /* A lose $, or /, or etc. */
-case 95:
+case 98:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 470 "scan-gram.l"
+#line 473 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 case YY_STATE_EOF(SC_BRACED_CODE):
 YY_OBS_GROW;
        YY_BREAK
 case YY_STATE_EOF(SC_BRACED_CODE):
-#line 472 "scan-gram.l"
+#line 475 "scan-gram.l"
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, _(": unexpected end of file in a braced code\n"));
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, _(": unexpected end of file in a braced code\n"));
@@ -1819,9 +1845,9 @@ case YY_STATE_EOF(SC_BRACED_CODE):
   `--------------------------------------------------------------*/
 
 
   `--------------------------------------------------------------*/
 
 
-case 96:
+case 99:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 490 "scan-gram.l"
+#line 493 "scan-gram.l"
 {
     yy_pop_state ();
     YY_OBS_FINISH;
 {
     yy_pop_state ();
     YY_OBS_FINISH;
@@ -1829,23 +1855,23 @@ YY_RULE_SETUP
     return PROLOGUE;
   }
        YY_BREAK
     return PROLOGUE;
   }
        YY_BREAK
-case 97:
+case 100:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 497 "scan-gram.l"
+#line 500 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 YY_OBS_GROW;
        YY_BREAK
-case 98:
+case 101:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 498 "scan-gram.l"
+#line 501 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 YY_OBS_GROW;
        YY_BREAK
-case 99:
+case 102:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 499 "scan-gram.l"
+#line 502 "scan-gram.l"
 YY_OBS_GROW; YY_LINES;
        YY_BREAK
 case YY_STATE_EOF(SC_PROLOGUE):
 YY_OBS_GROW; YY_LINES;
        YY_BREAK
 case YY_STATE_EOF(SC_PROLOGUE):
-#line 501 "scan-gram.l"
+#line 504 "scan-gram.l"
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, _(": unexpected end of file in a prologue\n"));
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, _(": unexpected end of file in a prologue\n"));
@@ -1862,13 +1888,13 @@ case YY_STATE_EOF(SC_PROLOGUE):
   `---------------------------------------------------------------*/
 
 
   `---------------------------------------------------------------*/
 
 
-case 100:
+case 103:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 519 "scan-gram.l"
+#line 522 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 case YY_STATE_EOF(SC_EPILOGUE):
 YY_OBS_GROW;
        YY_BREAK
 case YY_STATE_EOF(SC_EPILOGUE):
-#line 521 "scan-gram.l"
+#line 524 "scan-gram.l"
 {
     yy_pop_state ();
     YY_OBS_FINISH;
 {
     yy_pop_state ();
     YY_OBS_FINISH;
@@ -1877,12 +1903,12 @@ case YY_STATE_EOF(SC_EPILOGUE):
   }
        YY_BREAK
 
   }
        YY_BREAK
 
-case 101:
+case 104:
 YY_RULE_SETUP
 YY_RULE_SETUP
-#line 530 "scan-gram.l"
+#line 533 "scan-gram.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
        YY_BREAK
 YY_FATAL_ERROR( "flex scanner jammed" );
        YY_BREAK
-#line 1886 "scan-gram.c"
+#line 1912 "scan-gram.c"
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
@@ -2174,7 +2200,7 @@ static yy_state_type yy_get_previous_state()
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 380 )
+                       if ( yy_current_state >= 398 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2209,11 +2235,11 @@ yy_state_type yy_current_state;
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 380 )
+               if ( yy_current_state >= 398 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 379);
+       yy_is_jam = (yy_current_state == 397);
 
        return yy_is_jam ? 0 : yy_current_state;
        }
 
        return yy_is_jam ? 0 : yy_current_state;
        }
@@ -2772,7 +2798,7 @@ int main()
        return 0;
        }
 #endif
        return 0;
        }
 #endif
-#line 530 "scan-gram.l"
+#line 533 "scan-gram.l"
 
 
 /*------------------------------------------------------------------.
 
 
 /*------------------------------------------------------------------.
index 2ad8a62d69e4be0c7a424d354cd4c02d74c85f6e..235272f1f90addccca08d84365d8f7dab039ec72 100644 (file)
@@ -126,7 +126,7 @@ blanks   [ \t\f]+
   "%expect"               return PERCENT_EXPECT;
   "%file-prefix"          return PERCENT_FILE_PREFIX;
   "%fixed"[-_]"output"[-_]"files"   return PERCENT_YACC;
   "%expect"               return PERCENT_EXPECT;
   "%file-prefix"          return PERCENT_FILE_PREFIX;
   "%fixed"[-_]"output"[-_]"files"   return PERCENT_YACC;
-  "%glr"[-_]"parser"     return PERCENT_GLR_PARSER;
+  "%glr-parser"           return PERCENT_GLR_PARSER;
   "%left"                 return PERCENT_LEFT;
   "%locations"            return PERCENT_LOCATIONS;
   "%merge"               return PERCENT_MERGE;
   "%left"                 return PERCENT_LEFT;
   "%locations"            return PERCENT_LOCATIONS;
   "%merge"               return PERCENT_MERGE;
@@ -135,10 +135,12 @@ blanks   [ \t\f]+
   "%nonassoc"             return PERCENT_NONASSOC;
   "%nterm"                return PERCENT_NTERM;
   "%output"               return PERCENT_OUTPUT;
   "%nonassoc"             return PERCENT_NONASSOC;
   "%nterm"                return PERCENT_NTERM;
   "%output"               return PERCENT_OUTPUT;
+  "%parse-param"          return PERCENT_PARSE_PARAM;
   "%prec"                 { rule_length--; return PERCENT_PREC; }
   "%printer"              return PERCENT_PRINTER;
   "%pure"[-_]"parser"     return PERCENT_PURE_PARSER;
   "%right"                return PERCENT_RIGHT;
   "%prec"                 { rule_length--; return PERCENT_PREC; }
   "%printer"              return PERCENT_PRINTER;
   "%pure"[-_]"parser"     return PERCENT_PURE_PARSER;
   "%right"                return PERCENT_RIGHT;
+  "%lex-param"            return PERCENT_LEX_PARAM;
   "%skeleton"             return PERCENT_SKELETON;
   "%start"                return PERCENT_START;
   "%term"                 return PERCENT_TOKEN;
   "%skeleton"             return PERCENT_SKELETON;
   "%start"                return PERCENT_START;
   "%term"                 return PERCENT_TOKEN;
@@ -152,6 +154,7 @@ blanks   [ \t\f]+
   "="                     return EQUAL;
   ":"                     { rule_length = 0; return COLON; }
   "|"                     { rule_length = 0; return PIPE; }
   "="                     return EQUAL;
   ":"                     { rule_length = 0; return COLON; }
   "|"                     { rule_length = 0; return PIPE; }
+  ","                     return COMMA;
   ";"                     return SEMICOLON;
 
   {eols}      YY_LINES; YY_STEP;
   ";"                     return SEMICOLON;
 
   {eols}      YY_LINES; YY_STEP;
index 5fd441cf2101e5850e6fa0cb0fac1db68650712b..4e592b270c48b0efbbc4d970edde95e9b06eff36 100644 (file)
@@ -354,7 +354,7 @@ AT_DATA([[expout]],
 [$4
 ])
 # 3. If locations are not used, remove them.
 [$4
 ])
 # 3. If locations are not used, remove them.
-m4_bmatch([$1], [--location], [],
+m4_bmatch([$1], [%locations], [],
 [[sed 's/^[-0-9.]*: //' expout >at-expout
 mv at-expout expout]])
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 [[sed 's/^[-0-9.]*: //' expout >at-expout
 mv at-expout expout]])
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
@@ -451,18 +451,18 @@ m4_define([AT_CHECK_CALC_LALR],
 AT_CHECK_CALC_LALR()
 
 AT_CHECK_CALC_LALR([--defines])
 AT_CHECK_CALC_LALR()
 
 AT_CHECK_CALC_LALR([--defines])
-AT_CHECK_CALC_LALR([--locations])
+AT_CHECK_CALC_LALR([%locations])
 AT_CHECK_CALC_LALR([--name-prefix=calc])
 AT_CHECK_CALC_LALR([--verbose])
 AT_CHECK_CALC_LALR([--yacc])
 AT_CHECK_CALC_LALR([%error-verbose])
 
 AT_CHECK_CALC_LALR([--name-prefix=calc])
 AT_CHECK_CALC_LALR([--verbose])
 AT_CHECK_CALC_LALR([--yacc])
 AT_CHECK_CALC_LALR([%error-verbose])
 
-AT_CHECK_CALC_LALR([%error-verbose --locations])
+AT_CHECK_CALC_LALR([%error-verbose %locations])
 
 
-AT_CHECK_CALC_LALR([%error-verbose --defines --locations --name-prefix=calc --verbose --yacc])
+AT_CHECK_CALC_LALR([%error-verbose --defines %locations --name-prefix=calc --verbose --yacc])
 
 AT_CHECK_CALC_LALR([%debug])
 
 AT_CHECK_CALC_LALR([%debug])
-AT_CHECK_CALC_LALR([%error-verbose %debug --defines --locations --name-prefix=calc --verbose --yacc])
+AT_CHECK_CALC_LALR([%error-verbose %debug --defines %locations --name-prefix=calc --verbose --yacc])
 
 
 # ----------------------- #
 
 
 # ----------------------- #
@@ -476,21 +476,21 @@ AT_BANNER([[Simple GLR Calculator.]])
 # Start a testing chunk which compiles `calc' grammar with
 # BISON-OPTIONS and %glr-parser, and performs several tests over the parser.
 m4_define([AT_CHECK_CALC_GLR],
 # Start a testing chunk which compiles `calc' grammar with
 # BISON-OPTIONS and %glr-parser, and performs several tests over the parser.
 m4_define([AT_CHECK_CALC_GLR],
-[AT_CHECK_CALC([%glr_parser] $@)])
+[AT_CHECK_CALC([%glr-parser] $@)])
 
 
 AT_CHECK_CALC_GLR()
 
 AT_CHECK_CALC_GLR([--defines])
 
 
 AT_CHECK_CALC_GLR()
 
 AT_CHECK_CALC_GLR([--defines])
-AT_CHECK_CALC_GLR([--locations])
+AT_CHECK_CALC_GLR([%locations])
 AT_CHECK_CALC_GLR([--name-prefix=calc])
 AT_CHECK_CALC_GLR([--verbose])
 AT_CHECK_CALC_GLR([--yacc])
 AT_CHECK_CALC_GLR([%error-verbose])
 
 AT_CHECK_CALC_GLR([--name-prefix=calc])
 AT_CHECK_CALC_GLR([--verbose])
 AT_CHECK_CALC_GLR([--yacc])
 AT_CHECK_CALC_GLR([%error-verbose])
 
-AT_CHECK_CALC_GLR([%error-verbose --locations])
+AT_CHECK_CALC_GLR([%error-verbose %locations])
 
 
-AT_CHECK_CALC_GLR([%error-verbose --defines --locations --name-prefix=calc --verbose --yacc])
+AT_CHECK_CALC_GLR([%error-verbose --defines %locations --name-prefix=calc --verbose --yacc])
 
 AT_CHECK_CALC_GLR([%debug])
 
 AT_CHECK_CALC_GLR([%debug])
-AT_CHECK_CALC_GLR([%error-verbose %debug --defines --locations --name-prefix=calc --verbose --yacc])
+AT_CHECK_CALC_GLR([%error-verbose %debug --defines %locations --name-prefix=calc --verbose --yacc])