瀏覽代碼

define prebuild-bison

David Rose 23 年之前
父節點
當前提交
621ad03421
共有 5 個文件被更改,包括 5023 次插入14 次删除
  1. 11 11
      dtool/Config.pp
  2. 3 0
      dtool/LocalSetup.pp
  3. 40 3
      dtool/pptempl/Template.unix.pp
  4. 4854 0
      dtool/src/cppparser/cppBison.cxx.prebuilt
  5. 115 0
      dtool/src/cppparser/cppBison.h.prebuilt

+ 11 - 11
dtool/Config.pp

@@ -278,7 +278,7 @@
 // How about GLX?
 // How about GLX?
 #define GLX_IPATH
 #define GLX_IPATH
 #define GLX_LPATH
 #define GLX_LPATH
-#defer HAVE_WGL $[and $[HAVE_GL],$[UNIX_PLATFORM]]
+#defer HAVE_GLX $[and $[HAVE_GL],$[UNIX_PLATFORM]]
 
 
 // Glut?
 // Glut?
 #define GLUT_IPATH
 #define GLUT_IPATH
@@ -295,12 +295,10 @@
 #define HAVE_SGIGL $[eq $[PLATFORM],Irix]
 #define HAVE_SGIGL $[eq $[PLATFORM],Irix]
 
 
 // Is DirectX available, and should we try to build with it?
 // Is DirectX available, and should we try to build with it?
-#if $[WINDOWS_PLATFORM]
-  #define DX_IPATH
-  #define DX_LPATH
-  #define DX_LIBS d3d8.lib d3dx8.lib dxerr8.lib
-  #defer HAVE_DX $[libtest $[DX_LPATH],$[DX_LIBS]]
-#endif
+#define DX_IPATH
+#define DX_LPATH
+#define DX_LIBS d3d8.lib d3dx8.lib dxerr8.lib
+#defer HAVE_DX $[libtest $[DX_LPATH],$[DX_LIBS]]
 
 
 // Do you want to build the Renderman interface?
 // Do you want to build the Renderman interface?
 #define HAVE_RIB
 #define HAVE_RIB
@@ -421,10 +419,6 @@
   #define USE_COMPILER GCC
   #define USE_COMPILER GCC
 #endif
 #endif
 
 
-///////////////////////////////////////////////////////////////////////
-// The following variables are meaningful when BUILD_TYPE is "unix" or
-// "msvc".  They define a few environmental things.
-//////////////////////////////////////////////////////////////////////
 
 
 // How to invoke bison and flex.  Panda takes advantage of some
 // How to invoke bison and flex.  Panda takes advantage of some
 // bison/flex features, and therefore specifically requires bison and
 // bison/flex features, and therefore specifically requires bison and
@@ -436,6 +430,12 @@
 #defer BISON bison
 #defer BISON bison
 #defer FLEX flex 
 #defer FLEX flex 
 
 
+// You may not even have bison and flex installed.  If you don't, no
+// sweat; Panda ships with the pre-generated output of these programs,
+// so you don't need them unless you want to make changes to the
+// grammars themselves (files named *.yxx or *.lxx).
+#defer HAVE_BISON $[bintest $[BISON]]
+
 // How to invoke sed.  A handful of make rules use this.  Since some
 // How to invoke sed.  A handful of make rules use this.  Since some
 // platforms (specifically, non-Unix platforms like Windows) don't
 // platforms (specifically, non-Unix platforms like Windows) don't
 // have any kind of sed, ppremake performs some limited sed-like
 // have any kind of sed, ppremake performs some limited sed-like

+ 3 - 0
dtool/LocalSetup.pp

@@ -135,6 +135,9 @@ $[cdefine HAVE_AUDIO]
    makes sense to MSVC++. */
    makes sense to MSVC++. */
 $[cdefine EXPORT_TEMPLATES]
 $[cdefine EXPORT_TEMPLATES]
 
 
+/* Define if we have bison and flex available. */
+$[cdefine HAVE_BISON]
+
 /* Define if we are linking PANDAGL in with PANDA. */
 /* Define if we are linking PANDAGL in with PANDA. */
 $[cdefine LINK_IN_GL]
 $[cdefine LINK_IN_GL]
 
 

+ 40 - 3
dtool/pptempl/Template.unix.pp

@@ -137,6 +137,9 @@
 // And $[libs] is the set of libraries we will link with.
 // And $[libs] is the set of libraries we will link with.
 #defer libs $[unique $[complete_local_libs] $[patsubst %:m,,%:c %,%,$[OTHER_LIBS]] $[get_libs]]
 #defer libs $[unique $[complete_local_libs] $[patsubst %:m,,%:c %,%,$[OTHER_LIBS]] $[get_libs]]
 
 
+// This is the set of files we might copy into *.prebuilt, if we have
+// bison and flex (or copy from *.prebuilt if we don't have them).
+#define bison_prebuilt $[patsubst %.yxx,%.h,$[yxx_so_sources] $[yxx_st_sources]] $[patsubst %.yxx,%.cxx,$[yxx_so_sources] $[yxx_st_sources]] $[patsubst %.lxx,%.cxx,$[lxx_so_sources] $[lxx_st_sources]]
 
 
 // Okay, we're ready.  Start outputting the Makefile now.
 // Okay, we're ready.  Start outputting the Makefile now.
 #output Makefile
 #output Makefile
@@ -239,6 +242,9 @@ uninstall-igate :
 $[TAB]rm -f $[sort $[installed_igate_files]]
 $[TAB]rm -f $[sort $[installed_igate_files]]
 #endif
 #endif
 
 
+#if $[HAVE_BISON]
+prebuild-bison : $[patsubst %,%.prebuilt,$[bison_prebuilt]]
+#endif
 
 
 // We need a rule for each directory we might need to make.  This
 // We need a rule for each directory we might need to make.  This
 // loops through the full set of directories and creates a rule to
 // loops through the full set of directories and creates a rule to
@@ -584,17 +590,30 @@ $[TAB]$[LINK_BIN_C]
 // Rules to generate a C++ file from a Bison input file.
 // Rules to generate a C++ file from a Bison input file.
 #foreach file $[sort $[yxx_so_sources] $[yxx_st_sources]]
 #foreach file $[sort $[yxx_so_sources] $[yxx_st_sources]]
 #define target $[patsubst %.yxx,%.cxx,$[file]]
 #define target $[patsubst %.yxx,%.cxx,$[file]]
+#define target_header $[patsubst %.yxx,%.h,$[file]]
+#if $[HAVE_BISON]
 #define source $[file]
 #define source $[file]
 $[target] : $[source]
 $[target] : $[source]
 $[TAB]$[BISON] -y $[YFLAGS] $[if $[YACC_PREFIX],-d --name-prefix=$[YACC_PREFIX]] $[source]
 $[TAB]$[BISON] -y $[YFLAGS] $[if $[YACC_PREFIX],-d --name-prefix=$[YACC_PREFIX]] $[source]
 $[TAB]mv y.tab.c $[target]
 $[TAB]mv y.tab.c $[target]
-$[TAB]mv y.tab.h $[patsubst %.yxx,%.h,$[source]]
-
+$[TAB]mv y.tab.h $[target_header]
+$[target].prebuilt : $[target]
+$[TAB]cp $[target] $[target].prebuilt
+$[target_header].prebuilt : $[target_header]
+$[TAB]cp $[target_header] $[target_header].prebuilt
+#else // HAVE_BISON
+#define source $[target].prebuilt
+$[target] : $[source]
+$[TAB]cp $[source] $[target]
+$[target_header] : $[source]
+$[TAB]cp $[source] $[target_header]
+#endif // HAVE_BISON
 #end file
 #end file
 
 
 // Rules to generate a C++ file from a Flex input file.
 // Rules to generate a C++ file from a Flex input file.
 #foreach file $[sort $[lxx_so_sources] $[lxx_st_sources]]
 #foreach file $[sort $[lxx_so_sources] $[lxx_st_sources]]
 #define target $[patsubst %.lxx,%.cxx,$[file]]
 #define target $[patsubst %.lxx,%.cxx,$[file]]
+#if $[HAVE_BISON]
 #define source $[file]
 #define source $[file]
 $[target] : $[source]
 $[target] : $[source]
 $[TAB]$[FLEX] $[LFLAGS] $[if $[YACC_PREFIX],-P$[YACC_PREFIX]] -olex.yy.c $[source]
 $[TAB]$[FLEX] $[LFLAGS] $[if $[YACC_PREFIX],-P$[YACC_PREFIX]] -olex.yy.c $[source]
@@ -602,9 +621,16 @@ $[TAB]$[FLEX] $[LFLAGS] $[if $[YACC_PREFIX],-P$[YACC_PREFIX]] -olex.yy.c $[sourc
 #define script /#include <unistd.h>/d
 #define script /#include <unistd.h>/d
 $[TAB]$[SED]
 $[TAB]$[SED]
 $[TAB]rm $[source]
 $[TAB]rm $[source]
-
+$[target].prebuilt : $[target]
+$[TAB]cp $[target] $[target].prebuilt
+#else // HAVE_BISON
+#define source $[target].prebuilt
+$[target] : $[source]
+$[TAB]cp $[source] $[target]
+#endif // HAVE_BISON
 #end file
 #end file
 
 
+
 // Rules to compile ordinary C files that appear on a shared library.
 // Rules to compile ordinary C files that appear on a shared library.
 #foreach file $[sort $[c_so_sources]]
 #foreach file $[sort $[c_so_sources]]
 #define target $[patsubst %.c,$[so_dir]/%.o,$[file]]
 #define target $[patsubst %.c,$[so_dir]/%.o,$[file]]
@@ -788,6 +814,10 @@ $[TAB]rm -f $[install_headers_dir]/$[CONFIG_HEADER]
 #endif
 #endif
 uninstall-igate : $[subdirs:%=uninstall-igate-%]
 uninstall-igate : $[subdirs:%=uninstall-igate-%]
 
 
+#if $[HAVE_BISON]
+prebuild-bison : $[subdirs:%=prebuild-bison-%]
+#endif
+
 // Somehow, something in the cttools confuses some shells, so that
 // Somehow, something in the cttools confuses some shells, so that
 // when we are attached, 'cd foo' doesn't work, but 'cd ./foo' does.
 // when we are attached, 'cd foo' doesn't work, but 'cd ./foo' does.
 // Weird.  We get around this by putting a ./ in front of each cd
 // Weird.  We get around this by putting a ./ in front of each cd
@@ -844,6 +874,13 @@ uninstall-igate-$[dirname] :
 $[TAB]cd ./$[PATH] && $(MAKE) uninstall-igate
 $[TAB]cd ./$[PATH] && $(MAKE) uninstall-igate
 #end dirname
 #end dirname
 
 
+#if $[HAVE_BISON]
+#formap dirname subdirs
+prebuild-bison-$[dirname] :
+$[TAB]cd ./$[PATH] && $(MAKE) prebuild-bison
+#end dirname
+#endif
+
 #if $[ne $[CONFIG_HEADER],]
 #if $[ne $[CONFIG_HEADER],]
 $[install_headers_dir] :
 $[install_headers_dir] :
 $[TAB]@test -d $[install_headers_dir] || echo mkdir -p $[install_headers_dir]
 $[TAB]@test -d $[install_headers_dir] || echo mkdir -p $[install_headers_dir]

+ 4854 - 0
dtool/src/cppparser/cppBison.cxx.prebuilt

@@ -0,0 +1,4854 @@
+
+/*  A Bison parser, made from cppBison.yxx
+    by GNU Bison version 1.28  */
+
+#define YYBISON 1  /* Identify Bison output.  */
+
+#define yyparse cppyyparse
+#define yylex cppyylex
+#define yyerror cppyyerror
+#define yylval cppyylval
+#define yychar cppyychar
+#define yydebug cppyydebug
+#define yynerrs cppyynerrs
+#define YYLSP_NEEDED
+
+#define	REAL	257
+#define	INTEGER	258
+#define	CHAR	259
+#define	STRING	260
+#define	SIMPLE_IDENTIFIER	261
+#define	IDENTIFIER	262
+#define	TYPENAME_IDENTIFIER	263
+#define	SCOPING	264
+#define	TYPEDEFNAME	265
+#define	ELLIPSIS	266
+#define	OROR	267
+#define	ANDAND	268
+#define	EQCOMPARE	269
+#define	NECOMPARE	270
+#define	LECOMPARE	271
+#define	GECOMPARE	272
+#define	LSHIFT	273
+#define	RSHIFT	274
+#define	POINTSAT_STAR	275
+#define	DOT_STAR	276
+#define	UNARY	277
+#define	UNARY_NOT	278
+#define	UNARY_NEGATE	279
+#define	UNARY_MINUS	280
+#define	UNARY_STAR	281
+#define	UNARY_REF	282
+#define	POINTSAT	283
+#define	SCOPE	284
+#define	PLUSPLUS	285
+#define	MINUSMINUS	286
+#define	TIMESEQUAL	287
+#define	DIVIDEEQUAL	288
+#define	MODEQUAL	289
+#define	PLUSEQUAL	290
+#define	MINUSEQUAL	291
+#define	OREQUAL	292
+#define	ANDEQUAL	293
+#define	XOREQUAL	294
+#define	LSHIFTEQUAL	295
+#define	RSHIFTEQUAL	296
+#define	TOKENPASTE	297
+#define	KW_BEGIN_PUBLISH	298
+#define	KW_BOOL	299
+#define	KW_CATCH	300
+#define	KW_CHAR	301
+#define	KW_CLASS	302
+#define	KW_CONST	303
+#define	KW_DELETE	304
+#define	KW_DOUBLE	305
+#define	KW_DYNAMIC_CAST	306
+#define	KW_ELSE	307
+#define	KW_END_PUBLISH	308
+#define	KW_ENUM	309
+#define	KW_EXTERN	310
+#define	KW_EXPLICIT	311
+#define	KW_PUBLISHED	312
+#define	KW_FALSE	313
+#define	KW_FLOAT	314
+#define	KW_FRIEND	315
+#define	KW_FOR	316
+#define	KW_GOTO	317
+#define	KW_IF	318
+#define	KW_INLINE	319
+#define	KW_INT	320
+#define	KW_LONG	321
+#define	KW_LONGLONG	322
+#define	KW_MUTABLE	323
+#define	KW_NAMESPACE	324
+#define	KW_NEW	325
+#define	KW_OPERATOR	326
+#define	KW_PRIVATE	327
+#define	KW_PROTECTED	328
+#define	KW_PUBLIC	329
+#define	KW_REGISTER	330
+#define	KW_RETURN	331
+#define	KW_SHORT	332
+#define	KW_SIGNED	333
+#define	KW_SIZEOF	334
+#define	KW_STATIC	335
+#define	KW_STATIC_CAST	336
+#define	KW_STRUCT	337
+#define	KW_TEMPLATE	338
+#define	KW_THROW	339
+#define	KW_TRUE	340
+#define	KW_TRY	341
+#define	KW_TYPEDEF	342
+#define	KW_TYPENAME	343
+#define	KW_UNION	344
+#define	KW_UNSIGNED	345
+#define	KW_USING	346
+#define	KW_VIRTUAL	347
+#define	KW_VOID	348
+#define	KW_VOLATILE	349
+#define	KW_WHILE	350
+#define	START_CPP	351
+#define	START_CONST_EXPR	352
+#define	START_TYPE	353
+
+#line 6 "cppBison.yxx"
+
+
+#include "cppBisonDefs.h"
+#include "cppParser.h"
+#include "cppExpression.h"
+#include "cppSimpleType.h"
+#include "cppExtensionType.h"
+#include "cppStructType.h"
+#include "cppEnumType.h"
+#include "cppFunctionType.h"
+#include "cppTBDType.h"
+#include "cppParameterList.h"
+#include "cppInstance.h"
+#include "cppClassTemplateParameter.h"
+#include "cppTemplateParameterList.h"
+#include "cppInstanceIdentifier.h"
+#include "cppTypedef.h"
+#include "cppTypeDeclaration.h"
+#include "cppVisibility.h"
+#include "cppIdentifier.h"
+#include "cppScope.h"
+#include "cppTemplateScope.h"
+#include "cppNamespace.h"
+#include "cppUsing.h"
+
+////////////////////////////////////////////////////////////////////
+// Defining the interface to the parser.
+////////////////////////////////////////////////////////////////////
+
+CPPScope *current_scope = NULL;
+CPPScope *global_scope = NULL;
+CPPPreprocessor *current_lexer = NULL;
+
+static CPPStructType *current_struct = NULL; 
+static CPPEnumType *current_enum = NULL;
+static int current_storage_class = 0;
+static CPPType *current_type = NULL;
+static CPPExpression *current_expr = NULL;
+static int publish_nest_level = 0;
+static CPPVisibility publish_previous;
+static YYLTYPE publish_loc;
+
+static vector<CPPScope *> last_scopes;
+static vector<int> last_storage_classes;
+static vector<CPPStructType *> last_structs;
+
+int yyparse();
+
+#define YYERROR_VERBOSE
+
+static void
+yyerror(const string &msg) {
+  current_lexer->error(msg);
+}
+
+static void
+yyerror(const string &msg, YYLTYPE &loc) {
+  current_lexer->error(msg, loc.first_line, loc.first_column);
+}
+
+static void
+yywarning(const string &msg, YYLTYPE &loc) {
+  current_lexer->warning(msg, loc.first_line, loc.first_column);
+}
+
+static int
+yylex(YYSTYPE *lval, YYLTYPE *lloc) {
+  CPPToken token = current_lexer->get_next_token();
+  *lval = token._lval;
+  *lloc = token._lloc;
+  return token._token;
+}
+
+void
+parse_cpp(CPPParser *cp) {
+  CPPScope *old_scope = current_scope;
+  CPPScope *old_global_scope = global_scope;
+  CPPPreprocessor *old_lexer = current_lexer;
+
+  current_scope = cp;
+  global_scope = cp;
+  current_lexer = cp;
+  publish_nest_level = 0;
+  yyparse();
+
+  if (publish_nest_level != 0) {
+    yyerror("Unclosed __begin_publish", publish_loc);
+    publish_nest_level = 0;
+  }
+
+  current_scope = old_scope;
+  global_scope = old_global_scope;
+  current_lexer = old_lexer;
+    
+}
+
+CPPExpression *
+parse_const_expr(CPPPreprocessor *pp, CPPScope *new_current_scope,
+                 CPPScope *new_global_scope) {
+  CPPScope *old_scope = current_scope;
+  CPPScope *old_global_scope = global_scope;
+  CPPPreprocessor *old_lexer = current_lexer;
+  CPPExpression *old_expr = current_expr;
+
+  current_scope = new_current_scope;
+  global_scope = new_global_scope;
+  current_expr = (CPPExpression *)NULL;
+  current_lexer = pp;
+  yyparse();
+
+  CPPExpression *result = current_expr;
+
+  current_scope = old_scope;
+  global_scope = old_global_scope;
+  current_lexer = old_lexer;
+  current_expr = old_expr;
+
+  return result;
+}
+
+CPPType *
+parse_type(CPPPreprocessor *pp, CPPScope *new_current_scope,
+           CPPScope *new_global_scope) {
+  CPPScope *old_scope = current_scope;
+  CPPScope *old_global_scope = global_scope;
+  CPPPreprocessor *old_lexer = current_lexer;
+  CPPType *old_type = current_type;
+
+  current_scope = new_current_scope;
+  global_scope = new_global_scope;
+  current_type = (CPPType *)NULL;
+  current_lexer = pp;
+  yyparse();
+
+  CPPType *result = current_type;
+  
+  current_scope = old_scope;
+  global_scope = old_global_scope;
+  current_lexer = old_lexer;
+  current_type = old_type;
+
+  return result;
+}
+
+static void
+push_scope(CPPScope *new_scope) {
+  last_scopes.push_back(current_scope);
+  if (new_scope != NULL) {
+    current_scope = new_scope;
+  }
+}
+
+static void
+pop_scope() {
+  assert(!last_scopes.empty());
+  current_scope = last_scopes.back();
+  last_scopes.pop_back();
+}
+
+static void
+push_storage_class(int new_storage_class) {
+  last_storage_classes.push_back(current_storage_class);
+  current_storage_class = new_storage_class;
+}
+
+static void
+pop_storage_class() {
+  assert(!last_storage_classes.empty());
+  current_storage_class = last_storage_classes.back();
+  last_storage_classes.pop_back();
+}
+
+static void
+push_struct(CPPStructType *new_struct) {
+  last_structs.push_back(current_struct);
+  current_struct = new_struct;
+}
+
+static void
+pop_struct() {
+  assert(!last_structs.empty());
+  current_struct = last_structs.back();
+  last_structs.pop_back();
+}
+
+
+#ifndef YYLTYPE
+typedef
+  struct yyltype
+    {
+      int timestamp;
+      int first_line;
+      int first_column;
+      int last_line;
+      int last_column;
+      char *text;
+   }
+  yyltype;
+
+#define YYLTYPE yyltype
+#endif
+
+#include <stdio.h>
+
+#ifndef __cplusplus
+#ifndef __STDC__
+#define const
+#endif
+#endif
+
+
+
+#define	YYFINAL		837
+#define	YYFLAG		-32768
+#define	YYNTBASE	124
+
+#define YYTRANSLATE(x) ((unsigned)(x) <= 353 ? yytranslate[x] : 215)
+
+static const char yytranslate[] = {     0,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,   122,     2,     2,     2,   115,   108,     2,   118,
+   120,   113,   111,   101,   112,   117,   114,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,   103,   102,   109,
+   104,   110,   105,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+   119,     2,   123,   107,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,   100,   106,   121,   116,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     1,     3,     4,     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,    45,    46,
+    47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+    57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+    77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+    87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+    97,    98,    99
+};
+
+#if YYDEBUG != 0
+static const short yyprhs[] = {     0,
+     0,     3,     6,     9,    11,    14,    17,    19,    23,    28,
+    29,    35,    37,    39,    41,    43,    45,    47,    50,    52,
+    54,    57,    60,    63,    66,    67,    71,    73,    76,    80,
+    83,    86,    89,    92,    95,    98,   101,   103,   107,   111,
+   112,   117,   118,   124,   127,   132,   135,   140,   141,   146,
+   147,   153,   157,   160,   165,   168,   173,   174,   181,   182,
+   189,   190,   198,   199,   210,   211,   223,   224,   233,   234,
+   244,   246,   248,   250,   255,   261,   263,   265,   267,   269,
+   271,   273,   275,   277,   279,   281,   283,   285,   287,   289,
+   291,   293,   295,   297,   299,   301,   303,   305,   307,   309,
+   311,   313,   315,   317,   319,   321,   323,   325,   327,   329,
+   331,   334,   337,   339,   341,   343,   345,   346,   353,   355,
+   357,   359,   363,   366,   371,   375,   380,   382,   384,   386,
+   389,   391,   394,   397,   400,   403,   407,   412,   416,   417,
+   424,   426,   428,   430,   434,   437,   439,   443,   445,   448,
+   450,   453,   455,   459,   465,   469,   474,   476,   478,   481,
+   483,   487,   491,   497,   501,   505,   510,   512,   514,   516,
+   519,   522,   525,   529,   534,   536,   538,   540,   543,   546,
+   549,   553,   558,   566,   568,   571,   574,   577,   581,   586,
+   594,   596,   598,   601,   603,   605,   607,   609,   612,   615,
+   617,   619,   622,   624,   626,   628,   630,   633,   636,   638,
+   640,   643,   646,   649,   652,   656,   657,   663,   664,   672,
+   674,   676,   679,   683,   686,   689,   692,   696,   700,   704,
+   708,   712,   716,   717,   723,   724,   731,   733,   735,   738,
+   740,   744,   748,   754,   756,   758,   760,   762,   763,   770,
+   775,   778,   782,   784,   786,   788,   790,   792,   794,   796,
+   798,   800,   802,   804,   807,   810,   813,   816,   818,   821,
+   823,   827,   830,   832,   833,   836,   838,   841,   843,   845,
+   847,   849,   851,   853,   855,   857,   859,   861,   863,   865,
+   867,   869,   871,   873,   875,   877,   879,   881,   883,   885,
+   887,   889,   891,   893,   895,   897,   899,   901,   903,   905,
+   907,   909,   911,   913,   915,   917,   919,   921,   923,   925,
+   927,   929,   931,   933,   935,   937,   939,   941,   943,   945,
+   947,   949,   951,   953,   955,   957,   959,   961,   963,   965,
+   967,   969,   971,   973,   975,   977,   979,   981,   983,   985,
+   987,   989,   991,   993,   995,   997,   999,  1001,  1003,  1005,
+  1007,  1009,  1011,  1013,  1015,  1017,  1019,  1021,  1023,  1025,
+  1027,  1029,  1031,  1033,  1035,  1037,  1039,  1041,  1043,  1045,
+  1047,  1051,  1053,  1055,  1057,  1059,  1061,  1065,  1067,  1072,
+  1080,  1088,  1093,  1096,  1099,  1102,  1105,  1108,  1112,  1116,
+  1120,  1124,  1128,  1132,  1136,  1140,  1144,  1148,  1152,  1156,
+  1160,  1164,  1168,  1174,  1179,  1184,  1188,  1192,  1196,  1200,
+  1202,  1207,  1215,  1223,  1228,  1233,  1238,  1243,  1248,  1253,
+  1258,  1263,  1268,  1273,  1278,  1281,  1287,  1290,  1293,  1296,
+  1299,  1302,  1306,  1310,  1314,  1318,  1322,  1326,  1330,  1334,
+  1338,  1342,  1346,  1350,  1354,  1358,  1362,  1366,  1370,  1376,
+  1381,  1386,  1390,  1394,  1398,  1402,  1404,  1406,  1408,  1410,
+  1412,  1414,  1416,  1418,  1421,  1424,  1426,  1428,  1430,  1433
+};
+
+static const short yyrhs[] = {    97,
+   125,     0,    98,   209,     0,    99,   178,     0,   214,     0,
+   125,   102,     0,   125,   130,     0,   127,     0,   126,   101,
+   127,     0,   212,   118,   206,   120,     0,     0,   133,   100,
+   129,   125,   121,     0,   134,     0,   156,     0,   128,     0,
+   194,     0,   196,     0,   131,     0,    88,   140,     0,    44,
+     0,    54,     0,    58,   103,     0,    75,   103,     0,    74,
+   103,     0,    73,   103,     0,     0,    61,   132,   130,     0,
+   214,     0,   133,    56,     0,   133,    56,   213,     0,   133,
+    81,     0,   133,    65,     0,   133,    93,     0,   133,    57,
+     0,   133,    95,     0,   133,    69,     0,   133,    76,     0,
+   135,     0,   133,   176,   102,     0,   133,   145,   168,     0,
+     0,   133,   176,   136,   138,     0,     0,   133,    49,   175,
+   137,   139,     0,   162,   168,     0,   162,   167,   101,   138,
+     0,   162,   168,     0,   162,   167,   101,   139,     0,     0,
+   133,   176,   141,   143,     0,     0,   133,    49,   175,   142,
+   144,     0,   133,   145,   168,     0,   162,   168,     0,   162,
+   167,   101,   143,     0,   162,   168,     0,   162,   167,   101,
+   144,     0,     0,     8,   118,   146,   164,   120,   153,     0,
+     0,     9,   118,   147,   164,   120,   153,     0,     0,   116,
+   212,   118,   148,   164,   120,   153,     0,     0,     9,   118,
+   113,   162,   120,   118,   149,   164,   120,   153,     0,     0,
+     9,   118,    10,   113,   162,   120,   118,   150,   164,   120,
+   153,     0,     0,    72,   175,   172,   118,   151,   164,   120,
+   153,     0,     0,    72,    49,   175,   172,   118,   152,   164,
+   120,   153,     0,     8,     0,   214,     0,    49,     0,   153,
+    85,   118,   120,     0,   153,    85,   118,   212,   120,     0,
+   122,     0,   116,     0,   113,     0,   114,     0,   115,     0,
+   111,     0,   112,     0,   106,     0,   108,     0,   107,     0,
+    13,     0,    14,     0,    15,     0,    16,     0,    17,     0,
+    18,     0,   109,     0,   110,     0,    19,     0,    20,     0,
+   104,     0,   101,     0,    31,     0,    32,     0,    33,     0,
+    34,     0,    35,     0,    36,     0,    37,     0,    38,     0,
+    39,     0,    40,     0,    41,     0,    42,     0,    29,     0,
+   119,   123,     0,   118,   120,     0,    71,     0,    50,     0,
+   134,     0,   156,     0,     0,    84,   157,   109,   158,   110,
+   155,     0,   214,     0,   159,     0,   160,     0,   159,   101,
+   160,     0,    48,   212,     0,    48,   212,   104,   178,     0,
+   161,   173,   166,     0,    49,   161,   173,   166,     0,   197,
+     0,     8,     0,     9,     0,    89,   212,     0,   212,     0,
+    72,   154,     0,    49,   162,     0,   113,   162,     0,   108,
+   162,     0,    10,   113,   162,     0,   162,   119,   205,   123,
+     0,   118,   162,   120,     0,     0,   162,   118,   163,   164,
+   120,   153,     0,   214,     0,    12,     0,   165,     0,   165,
+   101,    12,     0,   165,    12,     0,   171,     0,   165,   101,
+   171,     0,   214,     0,   104,   208,     0,   214,     0,   104,
+   209,     0,   102,     0,   100,   201,   121,     0,   103,   126,
+   100,   201,   121,     0,   104,   209,   102,     0,   104,   100,
+   169,   121,     0,   214,     0,   170,     0,   170,   101,     0,
+   209,     0,   100,   169,   121,     0,   170,   101,   209,     0,
+   170,   101,   100,   169,   121,     0,   175,   173,   167,     0,
+     8,   173,   167,     0,    49,   175,   173,   167,     0,   214,
+     0,     8,     0,     9,     0,    49,   172,     0,   113,   172,
+     0,   108,   172,     0,    10,   113,   172,     0,   172,   119,
+   205,   123,     0,   214,     0,     8,     0,     9,     0,    49,
+   173,     0,   113,   173,     0,   108,   173,     0,    10,   113,
+   173,     0,   173,   119,   205,   123,     0,   118,   173,   120,
+   118,   164,   120,   153,     0,   214,     0,    49,   174,     0,
+   113,   174,     0,   108,   174,     0,    10,   113,   174,     0,
+   174,   119,   205,   123,     0,   118,   174,   120,   118,   164,
+   120,   153,     0,   197,     0,     9,     0,    89,   212,     0,
+   179,     0,   181,     0,   186,     0,   188,     0,   193,   212,
+     0,   192,   212,     0,   197,     0,     9,     0,    89,   212,
+     0,   179,     0,   181,     0,   186,     0,   188,     0,   193,
+   212,     0,   192,   212,     0,   197,     0,     9,     0,    89,
+   212,     0,   193,   212,     0,   192,   212,     0,   175,   174,
+     0,    49,   175,   174,     0,     0,   193,   100,   180,   125,
+   121,     0,     0,   193,   212,   182,   183,   100,   125,   121,
+     0,   214,     0,   184,     0,   103,   185,     0,   184,   101,
+   185,     0,    75,   211,     0,    74,   211,     0,    73,   211,
+     0,    93,    75,   211,     0,    93,    74,   211,     0,    93,
+    73,   211,     0,    75,    93,   211,     0,    74,    93,   211,
+     0,    73,    93,   211,     0,     0,   192,   100,   187,   190,
+   121,     0,     0,   192,   212,   100,   189,   190,   121,     0,
+   214,     0,   191,     0,   191,   101,     0,   212,     0,   212,
+   104,   209,     0,   191,   101,   212,     0,   191,   101,   212,
+   104,   209,     0,    55,     0,    48,     0,    83,     0,    90,
+     0,     0,    70,   212,   100,   195,   125,   121,     0,    70,
+   100,   125,   121,     0,    92,   212,     0,    92,    70,   212,
+     0,   198,     0,   199,     0,   200,     0,    45,     0,    47,
+     0,    78,     0,    67,     0,    68,     0,    91,     0,    79,
+     0,    66,     0,    78,   198,     0,    67,   198,     0,    91,
+   198,     0,    79,   198,     0,    60,     0,    67,    60,     0,
+    51,     0,    67,    67,    60,     0,    67,    51,     0,    94,
+     0,     0,   202,   203,     0,   214,     0,   203,   204,     0,
+     3,     0,     4,     0,     6,     0,     5,     0,     8,     0,
+     9,     0,    10,     0,     7,     0,    12,     0,    13,     0,
+    14,     0,    15,     0,    16,     0,    17,     0,    18,     0,
+    19,     0,    20,     0,    21,     0,    22,     0,    29,     0,
+    30,     0,    31,     0,    32,     0,    33,     0,    34,     0,
+    35,     0,    36,     0,    37,     0,    38,     0,    39,     0,
+    40,     0,    41,     0,    42,     0,    45,     0,    46,     0,
+    47,     0,    48,     0,    49,     0,    50,     0,    51,     0,
+    52,     0,    53,     0,    55,     0,    56,     0,    57,     0,
+    59,     0,    60,     0,    61,     0,    62,     0,    63,     0,
+    64,     0,    65,     0,    66,     0,    67,     0,    69,     0,
+    71,     0,    73,     0,    74,     0,    75,     0,    58,     0,
+    76,     0,    77,     0,    78,     0,    79,     0,    80,     0,
+    81,     0,    82,     0,    83,     0,    85,     0,    86,     0,
+    87,     0,    88,     0,    89,     0,    90,     0,    91,     0,
+    93,     0,    94,     0,    95,     0,    96,     0,    43,     0,
+    72,     0,   111,     0,   112,     0,   113,     0,   114,     0,
+   108,     0,   106,     0,   107,     0,   122,     0,   116,     0,
+   104,     0,   115,     0,   109,     0,   110,     0,   118,     0,
+   120,     0,   117,     0,   101,     0,   102,     0,   103,     0,
+   119,     0,   123,     0,   105,     0,   100,   203,   121,     0,
+   214,     0,   209,     0,   214,     0,   207,     0,   209,     0,
+   207,   101,   209,     0,   210,     0,   118,   178,   120,   208,
+     0,    82,   109,   178,   110,   118,   207,   120,     0,    52,
+   109,   178,   110,   118,   207,   120,     0,    80,   118,   178,
+   120,     0,   122,   208,     0,   116,   208,     0,   112,   208,
+     0,   113,   208,     0,   108,   208,     0,   208,   113,   208,
+     0,   208,   114,   208,     0,   208,   115,   208,     0,   208,
+   111,   208,     0,   208,   112,   208,     0,   208,   106,   208,
+     0,   208,   108,   208,     0,   208,    13,   208,     0,   208,
+    14,   208,     0,   208,    15,   208,     0,   208,    16,   208,
+     0,   208,    17,   208,     0,   208,    18,   208,     0,   208,
+    19,   208,     0,   208,    20,   208,     0,   208,   105,   208,
+   103,   208,     0,   208,   119,   209,   123,     0,   208,   118,
+   207,   120,     0,   208,   118,   120,     0,   208,   117,   208,
+     0,   208,    29,   208,     0,   118,   207,   120,     0,   210,
+     0,   118,   178,   120,   209,     0,    82,   109,   178,   110,
+   118,   207,   120,     0,    52,   109,   178,   110,   118,   207,
+   120,     0,     9,   118,   206,   120,     0,    66,   118,   206,
+   120,     0,    47,   118,   206,   120,     0,    45,   118,   206,
+   120,     0,    78,   118,   206,   120,     0,    67,   118,   206,
+   120,     0,    91,   118,   206,   120,     0,    79,   118,   206,
+   120,     0,    60,   118,   206,   120,     0,    51,   118,   206,
+   120,     0,    80,   118,   178,   120,     0,    71,   177,     0,
+    71,   177,   118,   206,   120,     0,   122,   209,     0,   116,
+   209,     0,   112,   209,     0,   113,   209,     0,   108,   209,
+     0,   209,   113,   209,     0,   209,   114,   209,     0,   209,
+   115,   209,     0,   209,   111,   209,     0,   209,   112,   209,
+     0,   209,   106,   209,     0,   209,   108,   209,     0,   209,
+    13,   209,     0,   209,    14,   209,     0,   209,    15,   209,
+     0,   209,    16,   209,     0,   209,    17,   209,     0,   209,
+    18,   209,     0,   209,   109,   209,     0,   209,   110,   209,
+     0,   209,    19,   209,     0,   209,    20,   209,     0,   209,
+   105,   209,   103,   209,     0,   209,   119,   209,   123,     0,
+   209,   118,   207,   120,     0,   209,   118,   120,     0,   209,
+   117,   209,     0,   209,    29,   209,     0,   118,   207,   120,
+     0,     4,     0,    86,     0,    59,     0,     5,     0,     3,
+     0,   213,     0,     8,     0,   212,     0,   193,   212,     0,
+    89,   212,     0,     8,     0,     9,     0,     6,     0,   213,
+     6,     0,     0
+};
+
+#endif
+
+#if YYDEBUG != 0
+static const short yyrline[] = { 0,
+   374,   376,   380,   386,   388,   389,   392,   394,   397,   409,
+   415,   421,   423,   424,   425,   426,   427,   428,   429,   442,
+   451,   455,   459,   463,   469,   477,   484,   489,   493,   504,
+   508,   512,   516,   520,   524,   528,   534,   539,   548,   558,
+   571,   574,   582,   591,   600,   610,   620,   632,   645,   648,
+   656,   659,   672,   681,   691,   701,   712,   719,   737,   741,
+   761,   765,   791,   795,   806,   810,   823,   829,   854,   860,
+   880,   892,   897,   901,   905,   911,   916,   920,   924,   928,
+   932,   936,   940,   944,   948,   952,   956,   960,   964,   968,
+   972,   976,   980,   984,   988,   992,   996,  1000,  1004,  1008,
+  1012,  1016,  1020,  1024,  1028,  1032,  1036,  1040,  1044,  1048,
+  1052,  1056,  1060,  1064,  1070,  1072,  1075,  1080,  1086,  1088,
+  1091,  1098,  1106,  1111,  1115,  1121,  1130,  1135,  1140,  1145,
+  1152,  1157,  1171,  1176,  1181,  1186,  1191,  1196,  1201,  1205,
+  1214,  1219,  1224,  1228,  1233,  1240,  1246,  1253,  1258,  1264,
+  1269,  1275,  1280,  1284,  1288,  1292,  1298,  1300,  1301,  1304,
+  1308,  1309,  1310,  1313,  1319,  1327,  1335,  1340,  1344,  1348,
+  1353,  1358,  1363,  1368,  1375,  1380,  1384,  1388,  1393,  1398,
+  1403,  1408,  1413,  1421,  1426,  1431,  1436,  1441,  1446,  1451,
+  1459,  1464,  1469,  1473,  1477,  1481,  1485,  1489,  1505,  1523,
+  1528,  1533,  1537,  1541,  1545,  1549,  1553,  1569,  1587,  1592,
+  1597,  1601,  1617,  1635,  1642,  1651,  1666,  1675,  1696,  1705,
+  1707,  1710,  1712,  1715,  1720,  1724,  1728,  1732,  1736,  1740,
+  1744,  1748,  1754,  1759,  1766,  1771,  1778,  1780,  1781,  1784,
+  1790,  1795,  1800,  1807,  1814,  1819,  1823,  1829,  1848,  1852,
+  1855,  1862,  1870,  1872,  1873,  1876,  1881,  1885,  1890,  1895,
+  1900,  1905,  1910,  1914,  1919,  1928,  1933,  1940,  1945,  1950,
+  1954,  1959,  1966,  1976,  1981,  1986,  1988,  1991,  1995,  1998,
+  2001,  2004,  2007,  2010,  2013,  2016,  2016,  2016,  2017,  2017,
+  2017,  2017,  2018,  2018,  2018,  2018,  2018,  2019,  2019,  2019,
+  2020,  2020,  2020,  2020,  2020,  2021,  2021,  2021,  2021,  2021,
+  2022,  2022,  2022,  2022,  2022,  2023,  2023,  2023,  2023,  2023,
+  2024,  2024,  2024,  2025,  2025,  2025,  2025,  2026,  2026,  2026,
+  2027,  2027,  2027,  2027,  2027,  2028,  2028,  2028,  2028,  2029,
+  2029,  2029,  2029,  2029,  2030,  2030,  2030,  2030,  2030,  2030,
+  2031,  2031,  2031,  2031,  2031,  2032,  2032,  2033,  2036,  2036,
+  2036,  2036,  2036,  2036,  2036,  2036,  2036,  2036,  2036,  2037,
+  2037,  2037,  2037,  2037,  2037,  2037,  2037,  2037,  2037,  2038,
+  2038,  2041,  2046,  2052,  2057,  2063,  2068,  2074,  2079,  2083,
+  2087,  2091,  2095,  2099,  2103,  2115,  2119,  2123,  2127,  2131,
+  2135,  2139,  2143,  2147,  2151,  2155,  2159,  2163,  2167,  2171,
+  2175,  2179,  2183,  2187,  2191,  2195,  2199,  2203,  2207,  2214,
+  2219,  2223,  2227,  2231,  2238,  2244,  2250,  2256,  2263,  2270,
+  2277,  2284,  2290,  2296,  2300,  2304,  2308,  2312,  2316,  2328,
+  2332,  2336,  2340,  2344,  2348,  2352,  2356,  2360,  2364,  2368,
+  2372,  2376,  2380,  2384,  2388,  2392,  2396,  2400,  2404,  2408,
+  2412,  2416,  2420,  2424,  2428,  2434,  2439,  2443,  2447,  2451,
+  2455,  2459,  2465,  2474,  2482,  2504,  2509,  2515,  2520,  2526
+};
+#endif
+
+
+#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
+
+static const char * const yytname[] = {   "$","error","$undefined.","REAL","INTEGER",
+"CHAR","STRING","SIMPLE_IDENTIFIER","IDENTIFIER","TYPENAME_IDENTIFIER","SCOPING",
+"TYPEDEFNAME","ELLIPSIS","OROR","ANDAND","EQCOMPARE","NECOMPARE","LECOMPARE",
+"GECOMPARE","LSHIFT","RSHIFT","POINTSAT_STAR","DOT_STAR","UNARY","UNARY_NOT",
+"UNARY_NEGATE","UNARY_MINUS","UNARY_STAR","UNARY_REF","POINTSAT","SCOPE","PLUSPLUS",
+"MINUSMINUS","TIMESEQUAL","DIVIDEEQUAL","MODEQUAL","PLUSEQUAL","MINUSEQUAL",
+"OREQUAL","ANDEQUAL","XOREQUAL","LSHIFTEQUAL","RSHIFTEQUAL","TOKENPASTE","KW_BEGIN_PUBLISH",
+"KW_BOOL","KW_CATCH","KW_CHAR","KW_CLASS","KW_CONST","KW_DELETE","KW_DOUBLE",
+"KW_DYNAMIC_CAST","KW_ELSE","KW_END_PUBLISH","KW_ENUM","KW_EXTERN","KW_EXPLICIT",
+"KW_PUBLISHED","KW_FALSE","KW_FLOAT","KW_FRIEND","KW_FOR","KW_GOTO","KW_IF",
+"KW_INLINE","KW_INT","KW_LONG","KW_LONGLONG","KW_MUTABLE","KW_NAMESPACE","KW_NEW",
+"KW_OPERATOR","KW_PRIVATE","KW_PROTECTED","KW_PUBLIC","KW_REGISTER","KW_RETURN",
+"KW_SHORT","KW_SIGNED","KW_SIZEOF","KW_STATIC","KW_STATIC_CAST","KW_STRUCT",
+"KW_TEMPLATE","KW_THROW","KW_TRUE","KW_TRY","KW_TYPEDEF","KW_TYPENAME","KW_UNION",
+"KW_UNSIGNED","KW_USING","KW_VIRTUAL","KW_VOID","KW_VOLATILE","KW_WHILE","START_CPP",
+"START_CONST_EXPR","START_TYPE","'{'","','","';'","':'","'='","'?'","'|'","'^'",
+"'&'","'<'","'>'","'+'","'-'","'*'","'/'","'%'","'~'","'.'","'('","'['","')'",
+"'}'","'!'","']'","grammar","cpp","constructor_inits","constructor_init","extern_c",
+"@1","declaration","friend_declaration","@2","storage_class","type_like_declaration",
+"multiple_var_declaration","@3","@4","multiple_instance_identifiers","multiple_const_instance_identifiers",
+"typedef_declaration","@5","@6","typedef_instance_identifiers","typedef_const_instance_identifiers",
+"function_prototype","@7","@8","@9","@10","@11","@12","@13","function_post",
+"function_operator","more_template_declaration","template_declaration","@14",
+"template_formal_parameters","template_nonempty_formal_parameters","template_formal_parameter",
+"template_formal_parameter_type","instance_identifier","@15","formal_parameter_list",
+"formal_parameters","template_parameter_maybe_initialize","maybe_initialize",
+"maybe_initialize_or_function_body","structure_init","structure_init_body","formal_parameter",
+"not_paren_formal_parameter_identifier","formal_parameter_identifier","empty_instance_identifier",
+"type","type_decl","predefined_type","full_type","anonymous_struct","@16","named_struct",
+"@17","maybe_class_derivation","class_derivation","base_specification","anonymous_enum",
+"@18","named_enum","@19","enum_body","enum_body_no_trailing_comma","enum_keyword",
+"struct_keyword","namespace_declaration","@20","using_declaration","simple_type",
+"simple_int_type","simple_float_type","simple_void_type","code","@21","code_block",
+"element","optional_const_expr","optional_const_expr_comma","const_expr_comma",
+"no_angle_bracket_const_expr","const_expr","const_operand","class_derivation_name",
+"name","string","empty", NULL
+};
+#endif
+
+static const short yyr1[] = {     0,
+   124,   124,   124,   125,   125,   125,   126,   126,   127,   129,
+   128,   130,   130,   130,   130,   130,   130,   130,   130,   130,
+   130,   130,   130,   130,   132,   131,   133,   133,   133,   133,
+   133,   133,   133,   133,   133,   133,   134,   134,   134,   136,
+   135,   137,   135,   138,   138,   139,   139,   141,   140,   142,
+   140,   140,   143,   143,   144,   144,   146,   145,   147,   145,
+   148,   145,   149,   145,   150,   145,   151,   145,   152,   145,
+   145,   153,   153,   153,   153,   154,   154,   154,   154,   154,
+   154,   154,   154,   154,   154,   154,   154,   154,   154,   154,
+   154,   154,   154,   154,   154,   154,   154,   154,   154,   154,
+   154,   154,   154,   154,   154,   154,   154,   154,   154,   154,
+   154,   154,   154,   154,   155,   155,   157,   156,   158,   158,
+   159,   159,   160,   160,   160,   160,   161,   161,   161,   161,
+   162,   162,   162,   162,   162,   162,   162,   162,   163,   162,
+   164,   164,   164,   164,   164,   165,   165,   166,   166,   167,
+   167,   168,   168,   168,   168,   168,   169,   169,   169,   170,
+   170,   170,   170,   171,   171,   171,   172,   172,   172,   172,
+   172,   172,   172,   172,   173,   173,   173,   173,   173,   173,
+   173,   173,   173,   174,   174,   174,   174,   174,   174,   174,
+   175,   175,   175,   175,   175,   175,   175,   175,   175,   176,
+   176,   176,   176,   176,   176,   176,   176,   176,   177,   177,
+   177,   177,   177,   178,   178,   180,   179,   182,   181,   183,
+   183,   184,   184,   185,   185,   185,   185,   185,   185,   185,
+   185,   185,   187,   186,   189,   188,   190,   190,   190,   191,
+   191,   191,   191,   192,   193,   193,   193,   195,   194,   194,
+   196,   196,   197,   197,   197,   198,   198,   198,   198,   198,
+   198,   198,   198,   198,   198,   198,   198,   199,   199,   199,
+   199,   199,   200,   202,   201,   203,   203,   204,   204,   204,
+   204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
+   204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
+   204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
+   204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
+   204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
+   204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
+   204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
+   204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
+   204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
+   204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
+   204,   205,   205,   206,   206,   207,   207,   208,   208,   208,
+   208,   208,   208,   208,   208,   208,   208,   208,   208,   208,
+   208,   208,   208,   208,   208,   208,   208,   208,   208,   208,
+   208,   208,   208,   208,   208,   208,   208,   208,   208,   209,
+   209,   209,   209,   209,   209,   209,   209,   209,   209,   209,
+   209,   209,   209,   209,   209,   209,   209,   209,   209,   209,
+   209,   209,   209,   209,   209,   209,   209,   209,   209,   209,
+   209,   209,   209,   209,   209,   209,   209,   209,   209,   209,
+   209,   209,   209,   209,   209,   210,   210,   210,   210,   210,
+   210,   210,   211,   211,   211,   212,   212,   213,   213,   214
+};
+
+static const short yyr2[] = {     0,
+     2,     2,     2,     1,     2,     2,     1,     3,     4,     0,
+     5,     1,     1,     1,     1,     1,     1,     2,     1,     1,
+     2,     2,     2,     2,     0,     3,     1,     2,     3,     2,
+     2,     2,     2,     2,     2,     2,     1,     3,     3,     0,
+     4,     0,     5,     2,     4,     2,     4,     0,     4,     0,
+     5,     3,     2,     4,     2,     4,     0,     6,     0,     6,
+     0,     7,     0,    10,     0,    11,     0,     8,     0,     9,
+     1,     1,     1,     4,     5,     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,
+     2,     2,     1,     1,     1,     1,     0,     6,     1,     1,
+     1,     3,     2,     4,     3,     4,     1,     1,     1,     2,
+     1,     2,     2,     2,     2,     3,     4,     3,     0,     6,
+     1,     1,     1,     3,     2,     1,     3,     1,     2,     1,
+     2,     1,     3,     5,     3,     4,     1,     1,     2,     1,
+     3,     3,     5,     3,     3,     4,     1,     1,     1,     2,
+     2,     2,     3,     4,     1,     1,     1,     2,     2,     2,
+     3,     4,     7,     1,     2,     2,     2,     3,     4,     7,
+     1,     1,     2,     1,     1,     1,     1,     2,     2,     1,
+     1,     2,     1,     1,     1,     1,     2,     2,     1,     1,
+     2,     2,     2,     2,     3,     0,     5,     0,     7,     1,
+     1,     2,     3,     2,     2,     2,     3,     3,     3,     3,
+     3,     3,     0,     5,     0,     6,     1,     1,     2,     1,
+     3,     3,     5,     1,     1,     1,     1,     0,     6,     4,
+     2,     3,     1,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     1,     2,     2,     2,     2,     1,     2,     1,
+     3,     2,     1,     0,     2,     1,     2,     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,     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,     1,     1,     1,     1,     1,     3,     1,     4,     7,
+     7,     4,     2,     2,     2,     2,     2,     3,     3,     3,
+     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+     3,     3,     5,     4,     4,     3,     3,     3,     3,     1,
+     4,     7,     7,     4,     4,     4,     4,     4,     4,     4,
+     4,     4,     4,     4,     2,     5,     2,     2,     2,     2,
+     2,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+     3,     3,     3,     3,     3,     3,     3,     3,     5,     4,
+     4,     3,     3,     3,     3,     1,     1,     1,     1,     1,
+     1,     1,     1,     2,     2,     1,     1,     1,     2,     0
+};
+
+static const short yydefact[] = {     0,
+   480,     0,     0,   480,     4,   470,   466,   469,   478,   472,
+     0,     0,     0,     0,     0,   468,     0,     0,     0,     0,
+     0,     0,     0,     0,   467,     0,     0,     0,     0,     0,
+     0,     0,     2,   420,   471,   192,   256,   257,   245,     0,
+   270,   244,   268,   263,   259,   260,   258,   262,   246,     0,
+   247,   261,   273,   480,     3,   194,   195,   196,   197,     0,
+     0,   191,   253,   254,   255,    19,    20,     0,    25,     0,
+     0,     0,     0,   117,   480,     0,     5,    14,     6,    17,
+     0,    12,    37,    13,    15,    16,    27,   480,   480,   480,
+   480,     0,   480,   480,   480,   210,     0,   435,     0,     0,
+   209,   480,   480,     0,     0,   480,   441,   439,   440,   438,
+   192,   256,   257,   270,   268,   263,   259,   258,   262,   261,
+     0,     0,   386,   437,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   479,   480,   272,   269,
+   259,   265,   259,   264,   267,   476,   477,   193,   266,     0,
+   480,   480,   480,   480,   214,   184,   233,   199,   216,   198,
+    21,   480,   480,     0,    24,    23,    22,     0,     0,    18,
+     0,   251,    71,   201,     0,    28,    33,    31,    35,     0,
+    36,    30,     0,    32,    34,    10,     0,     0,    40,   203,
+   204,   205,   206,     0,     0,   200,     0,   385,   384,     0,
+     0,     0,     0,     0,     0,     0,   211,   480,   213,   212,
+     0,     0,     0,     0,     0,     0,     0,   465,   449,   450,
+   451,   452,   453,   454,   457,   458,   464,     0,   447,   448,
+   455,   456,   445,   446,   442,   443,   444,   463,   462,     0,
+     0,   215,   271,   480,   185,   187,   186,     0,   480,   480,
+   235,   480,   480,    26,   480,   248,   480,     0,     0,    48,
+   252,    57,    59,    42,    29,     0,   480,   202,   480,     0,
+   274,   152,     0,     0,    39,    38,     0,   208,   207,   424,
+   427,   426,   433,     0,   432,   425,   429,     0,   428,   431,
+   434,     0,   430,   421,   387,     0,   461,   460,   188,     0,
+     0,   383,   382,     0,   238,   240,   237,   480,   480,     0,
+     0,   221,   220,   250,   480,   128,   129,     0,     0,     0,
+     0,   120,   121,   480,   127,   119,    50,    52,     0,   480,
+     0,     0,   480,     0,   480,   168,   169,     0,   480,   480,
+   480,     0,   167,   480,    61,     0,   480,     0,     7,     0,
+   480,     0,     0,     0,     0,     0,     0,     0,    41,   480,
+   131,     0,   436,     0,   459,   480,   189,   234,   239,     0,
+     0,   217,     0,     0,     0,     0,   222,   480,     0,   480,
+   123,   480,   130,   480,     0,   176,   177,     0,   480,   480,
+   480,   480,   480,   175,     0,    49,   480,   480,   142,     0,
+     0,   143,   146,   480,   141,     0,     0,     0,    43,   480,
+     0,   480,   170,   172,   171,    67,   480,    11,   480,   153,
+   275,   276,   274,     0,   480,   480,     0,   158,   160,   157,
+   155,     0,   133,    86,    87,    88,    89,    90,    91,    94,
+    95,   110,    98,    99,   100,   101,   102,   103,   104,   105,
+   106,   107,   108,   109,   114,   113,    97,    96,    83,    85,
+    84,    92,    93,    81,    82,    78,    79,    80,    77,     0,
+     0,    76,   132,   135,   134,     0,     0,   139,   480,     0,
+    44,   150,     0,     0,     0,   242,   241,   236,     0,     0,
+     0,   226,   473,     0,   225,     0,   224,     0,     0,     0,
+   480,   223,   249,     0,   480,     0,   115,   118,   116,   122,
+   480,   178,   180,   179,     0,     0,   480,   125,   148,    51,
+   480,     0,    53,   480,   480,   480,   145,     0,   480,     0,
+     0,   480,     0,    46,    69,   173,   480,     0,     0,   278,
+   279,   281,   280,   285,   282,   283,   284,   286,   287,   288,
+   289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+   299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+   309,   310,   357,   311,   312,   313,   314,   315,   316,   317,
+   318,   319,   320,   321,   322,   337,   323,   324,   325,   326,
+   327,   328,   329,   330,   331,   332,   333,   358,   334,   335,
+   336,   338,   339,   340,   341,   342,   343,   344,   345,   346,
+   347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
+   480,   375,   376,   377,   368,   380,   364,   365,   363,   370,
+   371,   359,   360,   361,   362,   369,   367,   374,   372,   378,
+   373,   366,   379,   277,     0,     8,     0,     0,   156,   159,
+   136,   112,   111,   138,   151,   480,     0,     0,   423,   422,
+   480,     0,   475,   232,   474,   231,   230,   229,   228,   227,
+   219,   124,   126,   181,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   149,   388,     0,     0,    55,     0,
+     0,   165,   480,    73,    58,    72,   144,   147,   164,     0,
+    63,    60,     0,   480,     0,   174,   480,     0,   154,     9,
+   161,   480,   162,     0,   137,    45,   190,   243,   480,     0,
+     0,     0,   397,   395,   396,   394,     0,     0,   393,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   182,
+     0,    54,   151,   166,     0,    65,   480,    47,     0,   480,
+    62,   381,     0,   480,     0,     0,     0,     0,     0,   419,
+   405,   406,   407,   408,   409,   410,   411,   412,   418,     0,
+   403,   404,   401,   402,   398,   399,   400,   417,   416,     0,
+     0,    56,     0,   480,     0,   480,    68,   163,   140,   480,
+     0,   392,     0,   389,     0,   415,   414,    74,     0,     0,
+   480,    70,   183,     0,     0,   413,    75,   480,    64,     0,
+     0,    66,   391,   390,     0,     0,     0
+};
+
+static const short yydefgoto[] = {   835,
+     4,   358,   359,    78,   279,    79,    80,   172,    81,    82,
+    83,   287,   344,   369,   419,   180,   339,   405,   406,   530,
+   198,   340,   343,   429,   767,   804,   547,   714,   705,   483,
+   518,    84,   178,   331,   332,   333,   334,   370,   666,   411,
+   412,   528,   490,   285,   437,   438,   413,   352,   403,   165,
+   414,   199,    98,    55,    56,   262,    57,   263,   321,   322,
+   387,    58,   260,    59,   318,   314,   315,    60,    61,    85,
+   325,    86,    62,    63,    64,    65,   356,   357,   431,   654,
+   311,   207,   208,   695,   123,    34,   502,   371,    35,   209
+};
+
+static const short yypact[] = {   139,
+-32768,  1579,  2512,   724,-32768,-32768,-32768,-32768,-32768,-32768,
+   -96,   -82,   -47,   -45,   -43,-32768,   -13,    -9,    -3,  2574,
+     1,    15,    32,     4,-32768,    55,  1579,  1579,  1579,  1579,
+  1067,  1579,  1995,-32768,    74,-32768,-32768,-32768,-32768,  2588,
+-32768,-32768,-32768,-32768,  1317,-32768,  1485,  1485,-32768,    92,
+-32768,  1485,-32768,    13,-32768,-32768,-32768,-32768,-32768,    49,
+    75,-32768,-32768,-32768,-32768,-32768,-32768,    42,-32768,    77,
+    64,    80,   104,-32768,-32768,    34,-32768,-32768,-32768,-32768,
+  1765,-32768,-32768,-32768,-32768,-32768,-32768,  1579,  1579,  1579,
+  1579,  2512,  1579,  1579,  1579,-32768,    92,    60,    92,    92,
+-32768,  1579,  1579,  2512,  2512,  1579,    67,    67,    67,    67,
+   -96,   -82,   -47,   -45,   -13,    -9,  2744,  1063,  1187,  1195,
+    90,   -61,  1995,    67,  1579,  1579,  1579,  1579,  1579,  1579,
+  1579,  1579,  1579,  1579,  1579,  1579,  1579,  1579,  1579,  1579,
+  1579,  1579,  1579,  1579,  1159,  1579,-32768,    13,-32768,-32768,
+  1447,-32768,  1485,-32768,-32768,-32768,-32768,-32768,-32768,   103,
+    13,    13,    13,    13,    99,-32768,-32768,   121,-32768,    27,
+-32768,  1380,-32768,   123,-32768,-32768,-32768,   119,  1819,-32768,
+    92,-32768,   131,   133,  2588,   251,-32768,-32768,-32768,  2526,
+-32768,-32768,    92,-32768,-32768,-32768,    92,   152,   158,-32768,
+-32768,-32768,-32768,    49,    75,-32768,   143,   164,-32768,   150,
+   154,   157,   162,   167,   170,   172,-32768,  1579,-32768,-32768,
+   177,   182,   185,   204,   196,  1579,  1579,-32768,  2028,  2149,
+  1623,  1623,   410,   410,   367,   367,-32768,  1957,  2164,  2179,
+   410,   410,   468,   468,    67,    67,    67,-32768,-32768,   -52,
+   454,    99,-32768,    13,    99,    99,    99,   106,  1579,    92,
+-32768,-32768,   217,-32768,  2615,-32768,  2450,  2588,   152,-32768,
+-32768,-32768,    25,-32768,    74,  2588,   160,-32768,-32768,   205,
+-32768,-32768,    92,  1243,-32768,-32768,    46,   121,    27,-32768,
+-32768,-32768,-32768,   220,-32768,-32768,-32768,   227,-32768,-32768,
+-32768,   222,-32768,    67,  1995,  1579,-32768,-32768,    99,   246,
+   248,  1995,-32768,   159,   273,   272,-32768,    92,  2639,    24,
+   277,   280,-32768,-32768,-32768,-32768,-32768,    92,  2464,    92,
+   274,   281,-32768,   132,-32768,-32768,-32768,-32768,    46,  2306,
+   270,    46,  2306,    46,   160,-32768,-32768,   275,   160,   160,
+   160,   176,-32768,  2664,-32768,   265,-32768,   231,-32768,   276,
+  1327,  1978,   279,    46,  1689,    46,    46,    46,-32768,   574,
+-32768,  1579,-32768,  1579,  1995,  2306,-32768,-32768,    92,  1579,
+   282,-32768,   592,   659,   682,   209,-32768,-32768,    24,  2688,
+   293,   132,-32768,   320,  2450,-32768,-32768,   292,   132,   132,
+   132,   132,   -44,-32768,    46,-32768,   574,   132,-32768,  2588,
+   288,    22,-32768,   132,-32768,    46,   181,   289,-32768,   574,
+   233,   160,   295,   295,   295,-32768,  1579,-32768,  2306,-32768,
+   946,-32768,-32768,    92,  1579,  1327,   290,   314,  1995,-32768,
+-32768,    46,   236,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   296,
+   294,-32768,-32768,   236,   236,   189,  1243,-32768,  1579,   317,
+-32768,-32768,   -38,   -32,   300,   318,  1995,-32768,    92,   364,
+    92,-32768,-32768,   364,-32768,   364,-32768,   364,   364,   364,
+  2713,-32768,-32768,  2512,   -44,  1874,-32768,-32768,-32768,-32768,
+   132,   305,   305,   305,   239,   628,  1579,-32768,-32768,-32768,
+   574,   326,-32768,   -17,   132,   382,-32768,  2402,   -17,   208,
+   315,   382,   337,-32768,-32768,   295,  2306,   333,   329,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,   341,-32768,   338,   343,-32768,  1411,
+   236,-32768,-32768,-32768,  1978,  2306,   342,    46,-32768,-32768,
+   382,  1579,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   305,   348,   366,   358,   368,   628,   628,
+   628,   628,  1067,   628,  2012,-32768,   369,   390,-32768,    46,
+  1579,-32768,   -17,-32768,   405,-32768,-32768,-32768,-32768,   375,
+-32768,   405,    46,  2306,   374,-32768,   382,   825,-32768,-32768,
+-32768,  1327,  1995,   376,-32768,-32768,   405,  1995,  2306,  2512,
+  2512,  2512,    95,    95,    95,    95,   392,    -8,    95,   628,
+   628,   628,   628,   628,   628,   628,   628,   628,   628,   628,
+   628,   628,   628,   628,   628,   628,   628,  1495,  1579,-32768,
+    46,-32768,  1995,-32768,   395,-32768,  2306,-32768,   397,   382,
+   405,-32768,   394,   382,   398,   409,   411,   422,   628,-32768,
+  2134,  2194,  2327,  2327,  1059,  1059,  1227,  1227,-32768,  1664,
+  2209,  2314,   510,   510,    95,    95,    95,-32768,-32768,     9,
+  1082,-32768,     8,  2306,   416,   382,   405,-32768,   405,   382,
+   419,-32768,   425,    95,   628,-32768,-32768,-32768,   427,   428,
+   382,   405,   405,  1579,  1579,  2012,-32768,   382,   405,    38,
+    56,   405,-32768,-32768,   545,   550,-32768
+};
+
+static const short yypgoto[] = {-32768,
+  -159,-32768,   118,-32768,-32768,   385,-32768,-32768,   -57,   180,
+-32768,-32768,-32768,  -107,  -138,-32768,-32768,-32768,  -130,  -185,
+   399,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  -535,-32768,
+-32768,   190,-32768,-32768,-32768,   184,   259,  -120,-32768,  -304,
+-32768,    76,  -388,  -190,  -431,-32768,    52,  -118,   -89,  -117,
+    30,   413,-32768,   -27,   -73,-32768,   -72,-32768,-32768,-32768,
+   213,   -71,-32768,   -68,-32768,   285,-32768,   -14,    -5,-32768,
+-32768,-32768,     0,   389,-32768,-32768,   165,-32768,     6,-32768,
+  -375,   -65,   -29,   -95,    62,  -136,  -143,   -49,   436,    -1
+};
+
+
+#define	YYLAST		2862
+
+
+static const short yytable[] = {     5,
+   158,   122,    87,   121,   658,    99,   712,   200,   201,   202,
+   168,   170,   203,   265,   100,   156,   157,   179,   532,   101,
+   174,    88,   160,   210,   211,   212,   182,   214,   215,   216,
+   252,   543,    54,   537,   341,    89,   221,   222,   418,   227,
+   225,   156,   157,   255,   256,   257,   258,   217,   227,   219,
+   220,   548,   166,   156,   157,   363,   156,   157,   228,   526,
+    54,   161,   227,    33,   213,    92,   204,   307,   227,   148,
+    90,   495,    91,    87,   527,   205,   223,   224,   338,   147,
+   206,   669,   156,   157,   156,   157,   701,   670,   107,   108,
+   109,   110,   227,   124,   364,   133,   383,   384,   385,   156,
+   157,   527,   319,   181,    93,   200,   201,   202,    94,   227,
+   203,   780,   105,   667,    95,   250,   386,   365,   102,   354,
+   162,    54,   538,   748,   549,   163,  -218,   818,   816,  -218,
+   164,   271,   103,    54,    54,   727,   309,   342,   227,   396,
+   397,   398,   698,   278,   171,   702,   166,   280,   167,   104,
+   709,   697,   298,   366,   288,   289,   227,   833,   367,   166,
+   166,   166,   166,   368,   204,   390,   175,   346,   347,   348,
+    87,     5,   106,   205,   169,   834,   173,   218,   206,   491,
+   399,   771,   176,   144,   145,   146,   229,   230,   231,   232,
+   233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+   243,   244,   245,   246,   247,   248,   177,   251,   349,   226,
+   316,   757,   758,   759,   274,   254,   533,   259,   407,   277,
+   261,   417,   266,   420,   259,   310,   421,   267,   511,   544,
+   423,   424,   425,   360,   807,     1,     2,     3,   809,   400,
+   505,   507,   715,   443,   401,   484,   485,   486,   272,   402,
+   273,   281,   166,   282,   283,   284,     9,   313,   317,   286,
+     5,   323,   290,    87,   227,   336,   335,   350,   316,   291,
+   822,   294,   351,   292,   823,   353,   293,     5,   391,   378,
+   393,   508,   509,   510,   531,   829,   295,   304,   305,   296,
+   773,   297,   832,   426,   427,   540,   299,   337,   488,   489,
+   541,   300,   515,   546,   301,   345,   488,   489,   664,   522,
+   523,   524,   525,   302,   764,   303,   317,    87,   534,   320,
+   312,   661,   355,     5,   539,   488,   489,   710,   335,   496,
+   433,   434,   404,   503,   503,   503,   516,   372,   415,   374,
+   699,   415,   493,   353,   494,   362,   373,   353,   353,   353,
+   545,   427,    87,   488,   489,   432,   674,   527,   685,   440,
+   676,   724,   677,   376,   678,   679,   680,   375,   492,   657,
+   377,   156,   157,   379,   415,   380,   388,   501,   501,   501,
+   389,   395,   416,   394,   360,   430,     5,   422,    87,   696,
+   404,   442,    87,   435,   335,   133,   514,   404,   404,   404,
+   404,   529,   498,    74,   521,   492,   404,   536,   542,   769,
+   659,    39,   404,   427,   660,   662,   663,   668,   492,   671,
+   353,   672,   439,   527,   775,   313,   700,   415,   131,   132,
+   704,   684,   711,   152,   440,   154,   155,   713,   133,   535,
+   159,   497,   200,   201,   202,   703,    49,   203,   717,   673,
+   503,   675,   499,    51,   503,   716,   503,   720,   503,   503,
+   503,   719,   805,   721,   725,   729,   125,   126,   127,   128,
+   129,   130,   131,   132,   730,   731,   732,   139,   140,   141,
+   142,   143,   133,   144,   145,   146,   682,   313,   312,   765,
+   761,   760,   766,   770,   501,   774,   133,   439,   501,   820,
+   501,   204,   501,   501,   501,   152,   154,   155,   159,    87,
+   205,   779,   803,   529,   808,   206,   806,   810,   811,   404,
+   139,   140,   141,   142,   143,   313,   144,   145,   146,   492,
+   812,   813,   492,   404,   706,   821,   824,   492,   748,   152,
+   706,   152,   825,    54,   836,   415,   827,   828,   665,   837,
+   312,   656,   696,   696,   696,   696,   264,   696,   134,   135,
+   726,   136,   137,   138,   139,   140,   141,   142,   143,   762,
+   144,   145,   146,   517,   768,   802,   308,   269,   520,   407,
+   141,   142,   143,   519,   144,   145,   146,   392,   312,   708,
+   683,   270,   420,   733,   734,   735,   736,   655,   739,   156,
+   157,   512,   381,   696,   696,   696,   696,   696,   696,   696,
+   696,   696,   696,   696,   696,   696,   696,   696,   696,   696,
+   696,   275,   754,   755,   756,     0,   757,   758,   759,   432,
+     6,     7,     8,     9,     0,    10,   718,     0,     0,    39,
+   531,     0,   696,     0,   781,   782,   783,   784,   785,   786,
+   787,   788,   789,   790,   791,   792,   793,   794,   795,   796,
+   797,   798,     0,   738,   415,   737,   156,   157,     0,   706,
+     0,     0,     0,   281,    49,   282,   283,   487,   696,   686,
+   499,    51,     0,   814,   500,     0,    16,     0,     0,   156,
+   157,   488,   489,     0,     0,     0,     0,     0,     0,     0,
+     0,   492,   776,   777,   778,     0,    39,   687,     0,   688,
+     0,     0,   415,    25,     0,   706,     0,     0,     0,   826,
+   440,   723,    54,    -1,     0,     0,     0,   415,   800,    39,
+     0,     0,     0,   728,     0,   689,     0,     0,     0,   690,
+   691,    49,     0,   692,     0,   693,     0,   499,    51,   694,
+     0,   504,     0,   819,     0,     0,     0,     0,     0,    54,
+    54,    54,   763,     0,    49,   415,     0,    66,   706,     0,
+   499,    51,   706,     0,   506,     0,     0,    67,     0,     0,
+     0,    68,     0,   439,    69,     0,     0,     0,     0,     0,
+     0,     0,     0,    70,   830,   831,    71,    72,    73,     0,
+     0,     0,   415,     0,   706,     0,     0,    74,   706,     0,
+     0,    75,     0,     0,     0,    76,     0,     0,     0,   706,
+   801,     0,     0,     0,     0,    77,   706,   550,   551,   552,
+   553,   554,   555,   556,   557,     0,   558,   559,   560,   561,
+   562,   563,   564,   565,   566,   567,   568,     0,     0,     0,
+     0,     0,     0,   569,   570,   571,   572,   573,   574,   575,
+   576,   577,   578,   579,   580,   581,   582,   583,     0,   584,
+   585,   586,   587,   588,   589,   590,   591,   592,     0,   593,
+   594,   595,   596,   597,   598,   599,   600,   601,   602,   603,
+   604,   605,     0,   606,     0,   607,   608,   609,   610,   611,
+   612,   613,   614,   615,   616,   617,   618,   619,     0,   620,
+   621,   622,   623,   624,   625,   626,     0,   627,   628,   629,
+   630,     0,     0,     0,   631,   632,   633,   634,   635,   636,
+   637,   638,   639,   640,   641,   642,   643,   644,   645,   646,
+   647,   648,   649,   650,   651,   772,   652,   653,   550,   551,
+   552,   553,   554,   555,   556,   557,     0,   558,   559,   560,
+   561,   562,   563,   564,   565,   566,   567,   568,     0,     0,
+     0,     0,     0,     0,   569,   570,   571,   572,   573,   574,
+   575,   576,   577,   578,   579,   580,   581,   582,   583,     0,
+   584,   585,   586,   587,   588,   589,   590,   591,   592,     0,
+   593,   594,   595,   596,   597,   598,   599,   600,   601,   602,
+   603,   604,   605,     0,   606,     0,   607,   608,   609,   610,
+   611,   612,   613,   614,   615,   616,   617,   618,   619,     0,
+   620,   621,   622,   623,   624,   625,   626,     0,   627,   628,
+   629,   630,     0,     0,     0,   631,   632,   633,   634,   635,
+   636,   637,   638,   639,   640,   641,   642,   643,   644,   645,
+   646,   647,   648,   649,   650,   651,     0,   652,   653,     6,
+     7,     8,     9,     0,    10,   111,     0,   746,   747,     0,
+     0,     0,     0,     0,     0,     0,     0,   748,     0,     0,
+     0,     0,     0,     0,   125,   126,   127,   128,   129,   130,
+   131,   132,     0,     0,     0,     0,     0,    37,     0,    38,
+   133,   112,     0,   113,    39,    40,     0,   114,    15,     0,
+     0,    42,     0,     0,     0,    16,   115,     0,    44,   153,
+    46,     0,   116,   117,    46,     0,     0,    20,     0,     0,
+    47,    48,     0,     0,   118,   119,    23,     0,    24,    49,
+     0,     0,    25,    52,     0,    50,    51,   120,     0,     0,
+    53,     6,     7,     8,     9,     0,    10,    11,     0,   752,
+   753,   754,   755,   756,    27,   757,   758,   759,    28,    29,
+   102,     0,    30,     0,    31,     0,   134,   135,    32,   136,
+   137,   138,   139,   140,   141,   142,   143,     0,   144,   145,
+   146,     0,     0,    12,   817,    13,     0,     0,     0,    14,
+    15,     0,     0,     0,     0,     0,     0,    16,    17,     0,
+     0,     0,     0,     0,    18,    19,     0,     0,     0,    20,
+     0,    37,     0,    38,     0,     0,    21,    22,    23,    37,
+    24,    38,     0,     0,    25,     6,     7,     8,     9,    26,
+    10,    11,    44,   153,    46,   748,     0,     0,     0,     0,
+    44,   153,    46,     0,    47,    48,    27,     0,     0,     0,
+    28,    29,    47,    48,    30,     0,    31,    52,   249,     0,
+    32,     0,     0,     0,     0,    52,     0,    12,     0,    13,
+     0,     0,     0,    14,    15,     0,     0,     0,     0,     0,
+     0,    16,    17,     0,   103,     0,     0,     0,    18,    19,
+     0,     0,   106,    20,     0,     0,     0,     0,     0,     0,
+    21,    22,    23,     0,    24,     0,     0,     0,    25,     6,
+     7,     8,     9,    26,    10,    11,     0,   752,   753,   754,
+   755,   756,   361,   757,   758,   759,     0,     0,     0,     0,
+    27,     0,     0,     0,    28,    29,     0,     0,    30,     0,
+    31,    37,     0,    38,    32,     0,     0,   149,     0,     0,
+     0,    12,     0,    13,     0,     0,   150,    14,    15,     0,
+     0,     0,    44,   151,    46,    16,    17,     0,     0,     0,
+     0,     0,    18,    19,    47,    48,     0,    20,     0,     0,
+     0,     0,     0,     0,    21,    22,    23,    52,    24,     0,
+     0,     0,    25,     6,     7,     8,     9,    26,    10,    11,
+     0,     0,     0,    66,     0,     0,   436,     0,     0,     0,
+     0,     0,     0,    67,    27,     0,     0,    68,    28,    29,
+    69,     0,    30,     0,    31,     0,     0,     0,    32,    70,
+     0,     0,    71,    72,    73,    12,     0,    13,     0,     0,
+     0,    14,    15,    74,     0,     0,     0,    75,     0,    16,
+    17,    76,     0,     0,     0,     0,    18,    19,     0,     0,
+     0,    20,     0,     0,     0,     0,     0,     0,    21,    22,
+    23,    37,    24,    38,     0,     0,    25,     6,     7,     8,
+     9,    26,    10,    11,     0,     0,   253,     0,     0,     0,
+   722,     0,    44,   153,    46,     0,     0,     0,    27,     0,
+     0,     0,    28,    29,    47,    48,    30,     0,    31,    37,
+     0,    38,    32,     0,     0,     0,     0,    52,     0,    12,
+     0,    13,     0,     0,     0,    14,    15,     0,     0,     0,
+    44,   153,    46,    16,    17,     0,     0,     0,     0,     0,
+    18,    19,    47,    48,     0,    20,     0,     0,     0,     0,
+     0,     0,    21,    22,    23,    52,    24,     0,     0,     0,
+    25,     6,     7,     8,     9,    26,    10,    11,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    27,     0,     0,     0,    28,    29,     0,     0,
+    30,     0,    31,     0,   799,     0,    32,     0,     0,     0,
+     0,     0,     0,    12,     0,    13,     0,     0,     0,    14,
+    15,     0,     0,     0,     0,     0,     0,    16,    17,   129,
+   130,   131,   132,     0,    18,    19,     0,     0,     0,    20,
+     0,   133,     0,     0,     0,     0,    21,    22,    23,     0,
+    24,     0,     0,     0,    25,     0,     0,     0,     0,    26,
+     0,     0,     0,     0,     0,     0,   740,   741,   742,   743,
+   744,   745,   746,   747,     0,     0,    27,     0,     0,     0,
+    28,    29,   748,     0,    30,     0,    31,     0,     0,     0,
+    32,   444,   445,   446,   447,   448,   449,   450,   451,     0,
+     0,     0,     0,     0,     0,     0,     0,   452,     0,   453,
+   454,   455,   456,   457,   458,   459,   460,   461,   462,   463,
+   464,   137,   138,   139,   140,   141,   142,   143,   465,   144,
+   145,   146,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   466,
+     0,     0,     0,     0,     0,     0,   815,     0,   749,   750,
+     0,   751,   183,   184,   752,   753,   754,   755,   756,     0,
+   757,   758,   759,     0,     0,     0,     0,     0,     0,   467,
+     0,     0,   468,     0,   469,   470,   471,   472,   473,   474,
+   475,   476,   477,   478,   479,     0,   480,   481,     0,    37,
+   482,    38,    39,   185,     0,    41,     0,     0,     0,    42,
+   186,   187,     0,     0,    43,     0,   183,   184,     0,   188,
+    44,    45,    46,   189,     0,     0,   190,     0,     0,     0,
+   191,     0,    47,    48,     0,   192,     0,    49,     0,     0,
+     0,     0,     0,   193,    51,    52,     0,   194,    53,   195,
+     0,     0,     0,    37,   196,    38,    39,   268,     0,    41,
+     0,     0,     0,    42,   186,   187,     0,     0,    43,     0,
+   197,   183,   184,   188,    44,    45,    46,   189,     0,     0,
+   190,     0,     0,     0,   191,     0,    47,    48,     0,   192,
+     0,    49,     0,     0,     0,     0,     0,   193,    51,    52,
+     0,   194,    53,   195,     0,     0,     0,     0,    37,     0,
+    38,    39,   185,     0,    41,     0,     0,     0,    42,   186,
+   187,     0,     0,    43,   197,     0,     0,     0,   188,    44,
+    45,    46,   189,     0,     0,   190,     0,     0,     0,   191,
+     0,    47,    48,     0,   192,     0,    49,     0,     0,     0,
+     0,     0,   193,    51,    52,     0,   194,    53,   195,   125,
+   126,   127,   128,   129,   130,   131,   132,     0,     0,     0,
+     0,     0,     0,     0,     0,   133,     0,     0,     0,   197,
+   125,   126,   127,   128,   129,   130,   131,   132,     0,     0,
+     0,     0,     0,     0,     0,     0,   133,   125,   126,   127,
+   128,   129,   130,   131,   132,     0,     0,     0,     0,     0,
+     0,     0,     0,   133,   740,   741,   742,   743,   744,   745,
+   746,   747,     0,     0,     0,     0,     0,     0,     0,     0,
+   748,   126,   127,   128,   129,   130,   131,   132,     0,     0,
+     0,     0,     0,     0,     0,     0,   133,     0,     0,   306,
+     0,   134,   135,     0,   136,   137,   138,   139,   140,   141,
+   142,   143,     0,   144,   145,   146,     0,     0,     0,   441,
+     0,     0,   134,   135,     0,   136,   137,   138,   139,   140,
+   141,   142,   143,     0,   144,   145,   146,     0,     0,   134,
+   135,     0,   136,   137,   138,   139,   140,   141,   142,   143,
+     0,   144,   145,   146,     0,     0,   749,   750,     0,   751,
+     0,     0,   752,   753,   754,   755,   756,     0,   757,   758,
+   759,     0,     0,   135,     0,   136,   137,   138,   139,   140,
+   141,   142,   143,     0,   144,   145,   146,   741,   742,   743,
+   744,   745,   746,   747,     0,     0,     0,     0,     0,     0,
+     0,     0,   748,   127,   128,   129,   130,   131,   132,     0,
+     0,     0,     0,     0,     0,     0,     0,   133,   127,   128,
+   129,   130,   131,   132,     0,     0,     0,     0,     0,     0,
+     0,     0,   133,   127,   128,   129,   130,   131,   132,     0,
+     0,     0,     0,     0,     0,     0,     0,   133,   742,   743,
+   744,   745,   746,   747,     0,     0,     0,     0,     0,     0,
+     0,     0,   748,   742,   743,   744,   745,   746,   747,     0,
+     0,     0,     0,     0,     0,     0,     0,   748,     0,   750,
+     0,   751,     0,     0,   752,   753,   754,   755,   756,     0,
+   757,   758,   759,     0,   135,     0,   136,   137,   138,   139,
+   140,   141,   142,   143,     0,   144,   145,   146,     0,     0,
+     0,   136,   137,   138,   139,   140,   141,   142,   143,     0,
+   144,   145,   146,     0,     0,     0,     0,   137,   138,   139,
+   140,   141,   142,   143,     0,   144,   145,   146,     0,   750,
+     0,   751,     0,     0,   752,   753,   754,   755,   756,     0,
+   757,   758,   759,   408,    36,     0,   751,   409,     0,   752,
+   753,   754,   755,   756,     0,   757,   758,   759,   742,   743,
+   744,   745,   746,   747,     0,     0,     0,     0,     0,     0,
+     0,     0,   748,   744,   745,   746,   747,     0,     0,     0,
+    37,     0,    38,    39,   410,   748,    41,     0,     0,     0,
+    42,     0,     0,     0,     0,    43,     0,     0,     0,     0,
+     0,    44,    45,    46,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    47,    48,     0,     0,     0,    49,     0,
+     0,     0,     0,     0,    50,    51,    52,     0,     0,    53,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   408,
+    36,     0,     0,   707,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   752,   753,   754,   755,   756,     0,
+   757,   758,   759,     0,     0,     0,     0,   752,   753,   754,
+   755,   756,     0,   757,   758,   759,    37,     0,    38,    39,
+   410,     0,    41,     0,     0,     0,    42,   326,   327,     0,
+     0,    43,     0,     0,     0,     0,     0,    44,    45,    46,
+     0,   326,   327,     0,     0,     0,     0,     0,     0,    47,
+    48,     0,     0,     0,    49,     0,     0,     0,     0,     0,
+    50,    51,    52,     0,    37,    53,    38,   328,   329,     0,
+    41,     0,     0,     0,     0,     0,     0,     0,    37,    43,
+    38,     0,     0,     0,    41,    44,    45,    46,     0,     0,
+    36,     0,     0,    43,     0,     0,     0,    47,    48,    44,
+    45,    46,     0,     0,    36,     0,     0,     0,   330,     0,
+    52,    47,    48,    53,     0,     0,     0,     0,     0,     0,
+     0,     0,   330,     0,    52,     0,    37,    53,    38,    39,
+    40,     0,    41,     0,     0,     0,    42,     0,     0,     0,
+    37,    43,    38,    39,   276,     0,    41,    44,    45,    46,
+    42,     0,    96,     0,     0,    43,     0,     0,     0,    47,
+    48,    44,    45,    46,    49,     0,    36,     0,     0,     0,
+    50,    51,    52,    47,    48,    53,     0,     0,    49,     0,
+     0,     0,     0,     0,    50,    51,    52,     0,    37,    53,
+    38,    39,     0,     0,    41,     0,     0,     0,    42,     0,
+     0,     0,    37,    43,    38,    39,     0,     0,    41,    44,
+    45,    46,    42,     0,     0,     0,     0,    43,     0,     0,
+     0,    47,    48,    44,    45,    46,    49,     0,    66,     0,
+     0,     0,    97,    51,    52,    47,    48,    53,    67,     0,
+    49,     0,    68,     0,     0,    69,    50,    51,    52,     0,
+     0,    53,    66,     0,    70,     0,     0,    71,    72,    73,
+     0,     0,    67,     0,     0,     0,    68,     0,    74,    69,
+     0,     0,    75,     0,     0,     0,    76,    66,    70,     0,
+     0,    71,    72,    73,     0,     0,    77,    67,     0,     0,
+     0,    68,    74,     0,    69,     0,    75,     0,     0,     0,
+    76,    66,     0,    70,     0,   324,    71,    72,    73,     0,
+    77,    67,     0,     0,     0,    68,     0,    74,    69,     0,
+     0,    75,     0,     0,     0,    76,    66,    70,     0,   382,
+    71,    72,    73,     0,     0,    77,    67,     0,     0,     0,
+    68,    74,     0,    69,     0,    75,     0,     0,     0,    76,
+     0,     0,    70,     0,   428,    71,    72,    73,    37,    77,
+    38,     0,     0,     0,   149,     0,    74,     0,     0,     0,
+    75,     0,     0,   150,    76,     0,     0,     0,   513,    44,
+   151,    46,     0,     0,    77,     0,     0,     0,     0,     0,
+     0,    47,    48,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   681,    52,     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,    95
+};
+
+static const short yycheck[] = {     1,
+    50,    31,     4,    31,   436,    20,   542,    81,    81,    81,
+    60,    61,    81,   173,    20,     8,     9,    75,   407,    20,
+    70,   118,    10,    89,    90,    91,    76,    93,    94,    95,
+   148,   420,     3,    12,    10,   118,   102,   103,   343,   101,
+   106,     8,     9,   161,   162,   163,   164,    97,   101,    99,
+   100,   427,    54,     8,     9,    10,     8,     9,   120,   104,
+    31,    49,   101,     2,    92,   109,    81,   120,   101,    40,
+   118,   376,   118,    75,   119,    81,   104,   105,   269,     6,
+    81,   120,     8,     9,     8,     9,   104,   120,    27,    28,
+    29,    30,   101,    32,    49,    29,    73,    74,    75,     8,
+     9,   119,   262,    70,   118,   179,   179,   179,   118,   101,
+   179,   120,   109,   489,   118,   145,    93,    72,   118,   279,
+   108,    92,   101,    29,   429,   113,   100,   120,   120,   103,
+   118,   181,   118,   104,   105,   671,   254,   113,   101,     8,
+     9,    10,   531,   193,   103,   534,   148,   197,   100,   118,
+   539,   527,   218,   108,   204,   205,   101,   120,   113,   161,
+   162,   163,   164,   118,   179,   325,   103,     8,     9,    10,
+   172,   173,   118,   179,   100,   120,   100,   118,   179,   370,
+    49,   717,   103,   117,   118,   119,   125,   126,   127,   128,
+   129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+   139,   140,   141,   142,   143,   144,   103,   146,    49,   120,
+   260,   117,   118,   119,   185,   113,   407,   119,   339,   190,
+   100,   342,   100,   344,   119,   120,   345,   109,   388,   420,
+   349,   350,   351,   283,   770,    97,    98,    99,   774,   108,
+   384,   385,   547,   364,   113,   366,   367,   368,   118,   118,
+   118,   100,   254,   102,   103,   104,     6,   259,   260,   102,
+   262,   263,   120,   265,   101,   267,   267,   108,   318,   120,
+   806,   110,   113,   120,   810,   277,   120,   279,   328,   121,
+   330,    73,    74,    75,   405,   821,   120,   226,   227,   120,
+   722,   120,   828,   118,   119,   416,   120,   268,   118,   119,
+   120,   120,   392,   422,   120,   276,   118,   119,   120,   399,
+   400,   401,   402,   110,   703,   120,   318,   319,   408,   103,
+   259,   442,   118,   325,   414,   118,   119,   120,   329,   379,
+   100,   101,   334,   383,   384,   385,   394,   118,   340,   118,
+   531,   343,   372,   345,   374,   284,   120,   349,   350,   351,
+   118,   119,   354,   118,   119,   357,   500,   119,   120,   361,
+   504,   666,   506,   118,   508,   509,   510,   306,   370,   435,
+   123,     8,     9,   101,   376,   104,   100,   383,   384,   385,
+   101,   101,   113,   110,   434,   121,   388,   113,   390,   526,
+   392,   113,   394,   118,   395,    29,   104,   399,   400,   401,
+   402,   403,   121,    84,   113,   407,   408,   120,   120,   714,
+   121,    48,   414,   119,   101,   120,   123,   101,   420,   120,
+   422,   104,   361,   119,   729,   427,   101,   429,    19,    20,
+    49,   521,   118,    45,   436,    47,    48,   101,    29,   410,
+    52,   380,   516,   516,   516,   535,    83,   516,   120,   499,
+   500,   501,    89,    90,   504,   123,   506,   120,   508,   509,
+   510,   121,   767,   121,   123,   118,    13,    14,    15,    16,
+    17,    18,    19,    20,   109,   118,   109,   111,   112,   113,
+   114,   115,    29,   117,   118,   119,   514,   489,   427,    85,
+   101,   123,   118,   120,   500,   120,    29,   436,   504,   804,
+   506,   516,   508,   509,   510,   117,   118,   119,   120,   511,
+   516,   120,   118,   515,   121,   516,   120,   120,   110,   521,
+   111,   112,   113,   114,   115,   527,   117,   118,   119,   531,
+   120,   110,   534,   535,   536,   120,   118,   539,    29,   151,
+   542,   153,   118,   514,     0,   547,   120,   120,   487,     0,
+   489,   434,   689,   690,   691,   692,   172,   694,   105,   106,
+   668,   108,   109,   110,   111,   112,   113,   114,   115,   700,
+   117,   118,   119,   394,   713,   761,   123,   179,   395,   700,
+   113,   114,   115,   394,   117,   118,   119,   329,   527,   538,
+   515,   179,   713,   689,   690,   691,   692,   433,   694,     8,
+     9,   389,   318,   740,   741,   742,   743,   744,   745,   746,
+   747,   748,   749,   750,   751,   752,   753,   754,   755,   756,
+   757,   186,   113,   114,   115,    -1,   117,   118,   119,   631,
+     3,     4,     5,     6,    -1,     8,   631,    -1,    -1,    48,
+   761,    -1,   779,    -1,   740,   741,   742,   743,   744,   745,
+   746,   747,   748,   749,   750,   751,   752,   753,   754,   755,
+   756,   757,    -1,   693,   666,   693,     8,     9,    -1,   671,
+    -1,    -1,    -1,   100,    83,   102,   103,   104,   815,    52,
+    89,    90,    -1,   779,    93,    -1,    59,    -1,    -1,     8,
+     9,   118,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   703,   730,   731,   732,    -1,    48,    80,    -1,    82,
+    -1,    -1,   714,    86,    -1,   717,    -1,    -1,    -1,   815,
+   722,   660,   693,     0,    -1,    -1,    -1,   729,   758,    48,
+    -1,    -1,    -1,   672,    -1,   108,    -1,    -1,    -1,   112,
+   113,    83,    -1,   116,    -1,   118,    -1,    89,    90,   122,
+    -1,    93,    -1,   803,    -1,    -1,    -1,    -1,    -1,   730,
+   731,   732,   701,    -1,    83,   767,    -1,    44,   770,    -1,
+    89,    90,   774,    -1,    93,    -1,    -1,    54,    -1,    -1,
+    -1,    58,    -1,   722,    61,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    70,   824,   825,    73,    74,    75,    -1,
+    -1,    -1,   804,    -1,   806,    -1,    -1,    84,   810,    -1,
+    -1,    88,    -1,    -1,    -1,    92,    -1,    -1,    -1,   821,
+   759,    -1,    -1,    -1,    -1,   102,   828,     3,     4,     5,
+     6,     7,     8,     9,    10,    -1,    12,    13,    14,    15,
+    16,    17,    18,    19,    20,    21,    22,    -1,    -1,    -1,
+    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,    35,
+    36,    37,    38,    39,    40,    41,    42,    43,    -1,    45,
+    46,    47,    48,    49,    50,    51,    52,    53,    -1,    55,
+    56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+    66,    67,    -1,    69,    -1,    71,    72,    73,    74,    75,
+    76,    77,    78,    79,    80,    81,    82,    83,    -1,    85,
+    86,    87,    88,    89,    90,    91,    -1,    93,    94,    95,
+    96,    -1,    -1,    -1,   100,   101,   102,   103,   104,   105,
+   106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+   116,   117,   118,   119,   120,   121,   122,   123,     3,     4,
+     5,     6,     7,     8,     9,    10,    -1,    12,    13,    14,
+    15,    16,    17,    18,    19,    20,    21,    22,    -1,    -1,
+    -1,    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,
+    35,    36,    37,    38,    39,    40,    41,    42,    43,    -1,
+    45,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
+    55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+    65,    66,    67,    -1,    69,    -1,    71,    72,    73,    74,
+    75,    76,    77,    78,    79,    80,    81,    82,    83,    -1,
+    85,    86,    87,    88,    89,    90,    91,    -1,    93,    94,
+    95,    96,    -1,    -1,    -1,   100,   101,   102,   103,   104,
+   105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+   115,   116,   117,   118,   119,   120,    -1,   122,   123,     3,
+     4,     5,     6,    -1,     8,     9,    -1,    19,    20,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    -1,    -1,
+    -1,    -1,    -1,    -1,    13,    14,    15,    16,    17,    18,
+    19,    20,    -1,    -1,    -1,    -1,    -1,    45,    -1,    47,
+    29,    45,    -1,    47,    48,    49,    -1,    51,    52,    -1,
+    -1,    55,    -1,    -1,    -1,    59,    60,    -1,    66,    67,
+    68,    -1,    66,    67,    68,    -1,    -1,    71,    -1,    -1,
+    78,    79,    -1,    -1,    78,    79,    80,    -1,    82,    83,
+    -1,    -1,    86,    91,    -1,    89,    90,    91,    -1,    -1,
+    94,     3,     4,     5,     6,    -1,     8,     9,    -1,   111,
+   112,   113,   114,   115,   108,   117,   118,   119,   112,   113,
+   118,    -1,   116,    -1,   118,    -1,   105,   106,   122,   108,
+   109,   110,   111,   112,   113,   114,   115,    -1,   117,   118,
+   119,    -1,    -1,    45,   123,    47,    -1,    -1,    -1,    51,
+    52,    -1,    -1,    -1,    -1,    -1,    -1,    59,    60,    -1,
+    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    71,
+    -1,    45,    -1,    47,    -1,    -1,    78,    79,    80,    45,
+    82,    47,    -1,    -1,    86,     3,     4,     5,     6,    91,
+     8,     9,    66,    67,    68,    29,    -1,    -1,    -1,    -1,
+    66,    67,    68,    -1,    78,    79,   108,    -1,    -1,    -1,
+   112,   113,    78,    79,   116,    -1,   118,    91,   120,    -1,
+   122,    -1,    -1,    -1,    -1,    91,    -1,    45,    -1,    47,
+    -1,    -1,    -1,    51,    52,    -1,    -1,    -1,    -1,    -1,
+    -1,    59,    60,    -1,   118,    -1,    -1,    -1,    66,    67,
+    -1,    -1,   118,    71,    -1,    -1,    -1,    -1,    -1,    -1,
+    78,    79,    80,    -1,    82,    -1,    -1,    -1,    86,     3,
+     4,     5,     6,    91,     8,     9,    -1,   111,   112,   113,
+   114,   115,   100,   117,   118,   119,    -1,    -1,    -1,    -1,
+   108,    -1,    -1,    -1,   112,   113,    -1,    -1,   116,    -1,
+   118,    45,    -1,    47,   122,    -1,    -1,    51,    -1,    -1,
+    -1,    45,    -1,    47,    -1,    -1,    60,    51,    52,    -1,
+    -1,    -1,    66,    67,    68,    59,    60,    -1,    -1,    -1,
+    -1,    -1,    66,    67,    78,    79,    -1,    71,    -1,    -1,
+    -1,    -1,    -1,    -1,    78,    79,    80,    91,    82,    -1,
+    -1,    -1,    86,     3,     4,     5,     6,    91,     8,     9,
+    -1,    -1,    -1,    44,    -1,    -1,   100,    -1,    -1,    -1,
+    -1,    -1,    -1,    54,   108,    -1,    -1,    58,   112,   113,
+    61,    -1,   116,    -1,   118,    -1,    -1,    -1,   122,    70,
+    -1,    -1,    73,    74,    75,    45,    -1,    47,    -1,    -1,
+    -1,    51,    52,    84,    -1,    -1,    -1,    88,    -1,    59,
+    60,    92,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,
+    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
+    80,    45,    82,    47,    -1,    -1,    86,     3,     4,     5,
+     6,    91,     8,     9,    -1,    -1,    60,    -1,    -1,    -1,
+   100,    -1,    66,    67,    68,    -1,    -1,    -1,   108,    -1,
+    -1,    -1,   112,   113,    78,    79,   116,    -1,   118,    45,
+    -1,    47,   122,    -1,    -1,    -1,    -1,    91,    -1,    45,
+    -1,    47,    -1,    -1,    -1,    51,    52,    -1,    -1,    -1,
+    66,    67,    68,    59,    60,    -1,    -1,    -1,    -1,    -1,
+    66,    67,    78,    79,    -1,    71,    -1,    -1,    -1,    -1,
+    -1,    -1,    78,    79,    80,    91,    82,    -1,    -1,    -1,
+    86,     3,     4,     5,     6,    91,     8,     9,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   108,    -1,    -1,    -1,   112,   113,    -1,    -1,
+   116,    -1,   118,    -1,   120,    -1,   122,    -1,    -1,    -1,
+    -1,    -1,    -1,    45,    -1,    47,    -1,    -1,    -1,    51,
+    52,    -1,    -1,    -1,    -1,    -1,    -1,    59,    60,    17,
+    18,    19,    20,    -1,    66,    67,    -1,    -1,    -1,    71,
+    -1,    29,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,
+    82,    -1,    -1,    -1,    86,    -1,    -1,    -1,    -1,    91,
+    -1,    -1,    -1,    -1,    -1,    -1,    13,    14,    15,    16,
+    17,    18,    19,    20,    -1,    -1,   108,    -1,    -1,    -1,
+   112,   113,    29,    -1,   116,    -1,   118,    -1,    -1,    -1,
+   122,    13,    14,    15,    16,    17,    18,    19,    20,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    -1,    31,
+    32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+    42,   109,   110,   111,   112,   113,   114,   115,    50,   117,
+   118,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,
+    -1,    -1,    -1,    -1,    -1,    -1,   103,    -1,   105,   106,
+    -1,   108,     8,     9,   111,   112,   113,   114,   115,    -1,
+   117,   118,   119,    -1,    -1,    -1,    -1,    -1,    -1,   101,
+    -1,    -1,   104,    -1,   106,   107,   108,   109,   110,   111,
+   112,   113,   114,   115,   116,    -1,   118,   119,    -1,    45,
+   122,    47,    48,    49,    -1,    51,    -1,    -1,    -1,    55,
+    56,    57,    -1,    -1,    60,    -1,     8,     9,    -1,    65,
+    66,    67,    68,    69,    -1,    -1,    72,    -1,    -1,    -1,
+    76,    -1,    78,    79,    -1,    81,    -1,    83,    -1,    -1,
+    -1,    -1,    -1,    89,    90,    91,    -1,    93,    94,    95,
+    -1,    -1,    -1,    45,   100,    47,    48,    49,    -1,    51,
+    -1,    -1,    -1,    55,    56,    57,    -1,    -1,    60,    -1,
+   116,     8,     9,    65,    66,    67,    68,    69,    -1,    -1,
+    72,    -1,    -1,    -1,    76,    -1,    78,    79,    -1,    81,
+    -1,    83,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
+    -1,    93,    94,    95,    -1,    -1,    -1,    -1,    45,    -1,
+    47,    48,    49,    -1,    51,    -1,    -1,    -1,    55,    56,
+    57,    -1,    -1,    60,   116,    -1,    -1,    -1,    65,    66,
+    67,    68,    69,    -1,    -1,    72,    -1,    -1,    -1,    76,
+    -1,    78,    79,    -1,    81,    -1,    83,    -1,    -1,    -1,
+    -1,    -1,    89,    90,    91,    -1,    93,    94,    95,    13,
+    14,    15,    16,    17,    18,    19,    20,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    29,    -1,    -1,    -1,   116,
+    13,    14,    15,    16,    17,    18,    19,    20,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    29,    13,    14,    15,
+    16,    17,    18,    19,    20,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    29,    13,    14,    15,    16,    17,    18,
+    19,    20,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    29,    14,    15,    16,    17,    18,    19,    20,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    29,    -1,    -1,   103,
+    -1,   105,   106,    -1,   108,   109,   110,   111,   112,   113,
+   114,   115,    -1,   117,   118,   119,    -1,    -1,    -1,   102,
+    -1,    -1,   105,   106,    -1,   108,   109,   110,   111,   112,
+   113,   114,   115,    -1,   117,   118,   119,    -1,    -1,   105,
+   106,    -1,   108,   109,   110,   111,   112,   113,   114,   115,
+    -1,   117,   118,   119,    -1,    -1,   105,   106,    -1,   108,
+    -1,    -1,   111,   112,   113,   114,   115,    -1,   117,   118,
+   119,    -1,    -1,   106,    -1,   108,   109,   110,   111,   112,
+   113,   114,   115,    -1,   117,   118,   119,    14,    15,    16,
+    17,    18,    19,    20,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    29,    15,    16,    17,    18,    19,    20,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    15,    16,
+    17,    18,    19,    20,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    29,    15,    16,    17,    18,    19,    20,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    15,    16,
+    17,    18,    19,    20,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    29,    15,    16,    17,    18,    19,    20,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    -1,   106,
+    -1,   108,    -1,    -1,   111,   112,   113,   114,   115,    -1,
+   117,   118,   119,    -1,   106,    -1,   108,   109,   110,   111,
+   112,   113,   114,   115,    -1,   117,   118,   119,    -1,    -1,
+    -1,   108,   109,   110,   111,   112,   113,   114,   115,    -1,
+   117,   118,   119,    -1,    -1,    -1,    -1,   109,   110,   111,
+   112,   113,   114,   115,    -1,   117,   118,   119,    -1,   106,
+    -1,   108,    -1,    -1,   111,   112,   113,   114,   115,    -1,
+   117,   118,   119,     8,     9,    -1,   108,    12,    -1,   111,
+   112,   113,   114,   115,    -1,   117,   118,   119,    15,    16,
+    17,    18,    19,    20,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    29,    17,    18,    19,    20,    -1,    -1,    -1,
+    45,    -1,    47,    48,    49,    29,    51,    -1,    -1,    -1,
+    55,    -1,    -1,    -1,    -1,    60,    -1,    -1,    -1,    -1,
+    -1,    66,    67,    68,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    78,    79,    -1,    -1,    -1,    83,    -1,
+    -1,    -1,    -1,    -1,    89,    90,    91,    -1,    -1,    94,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     8,
+     9,    -1,    -1,    12,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   111,   112,   113,   114,   115,    -1,
+   117,   118,   119,    -1,    -1,    -1,    -1,   111,   112,   113,
+   114,   115,    -1,   117,   118,   119,    45,    -1,    47,    48,
+    49,    -1,    51,    -1,    -1,    -1,    55,     8,     9,    -1,
+    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    67,    68,
+    -1,     8,     9,    -1,    -1,    -1,    -1,    -1,    -1,    78,
+    79,    -1,    -1,    -1,    83,    -1,    -1,    -1,    -1,    -1,
+    89,    90,    91,    -1,    45,    94,    47,    48,    49,    -1,
+    51,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    60,
+    47,    -1,    -1,    -1,    51,    66,    67,    68,    -1,    -1,
+     9,    -1,    -1,    60,    -1,    -1,    -1,    78,    79,    66,
+    67,    68,    -1,    -1,     9,    -1,    -1,    -1,    89,    -1,
+    91,    78,    79,    94,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    89,    -1,    91,    -1,    45,    94,    47,    48,
+    49,    -1,    51,    -1,    -1,    -1,    55,    -1,    -1,    -1,
+    45,    60,    47,    48,    49,    -1,    51,    66,    67,    68,
+    55,    -1,     9,    -1,    -1,    60,    -1,    -1,    -1,    78,
+    79,    66,    67,    68,    83,    -1,     9,    -1,    -1,    -1,
+    89,    90,    91,    78,    79,    94,    -1,    -1,    83,    -1,
+    -1,    -1,    -1,    -1,    89,    90,    91,    -1,    45,    94,
+    47,    48,    -1,    -1,    51,    -1,    -1,    -1,    55,    -1,
+    -1,    -1,    45,    60,    47,    48,    -1,    -1,    51,    66,
+    67,    68,    55,    -1,    -1,    -1,    -1,    60,    -1,    -1,
+    -1,    78,    79,    66,    67,    68,    83,    -1,    44,    -1,
+    -1,    -1,    89,    90,    91,    78,    79,    94,    54,    -1,
+    83,    -1,    58,    -1,    -1,    61,    89,    90,    91,    -1,
+    -1,    94,    44,    -1,    70,    -1,    -1,    73,    74,    75,
+    -1,    -1,    54,    -1,    -1,    -1,    58,    -1,    84,    61,
+    -1,    -1,    88,    -1,    -1,    -1,    92,    44,    70,    -1,
+    -1,    73,    74,    75,    -1,    -1,   102,    54,    -1,    -1,
+    -1,    58,    84,    -1,    61,    -1,    88,    -1,    -1,    -1,
+    92,    44,    -1,    70,    -1,   121,    73,    74,    75,    -1,
+   102,    54,    -1,    -1,    -1,    58,    -1,    84,    61,    -1,
+    -1,    88,    -1,    -1,    -1,    92,    44,    70,    -1,   121,
+    73,    74,    75,    -1,    -1,   102,    54,    -1,    -1,    -1,
+    58,    84,    -1,    61,    -1,    88,    -1,    -1,    -1,    92,
+    -1,    -1,    70,    -1,   121,    73,    74,    75,    45,   102,
+    47,    -1,    -1,    -1,    51,    -1,    84,    -1,    -1,    -1,
+    88,    -1,    -1,    60,    92,    -1,    -1,    -1,   121,    66,
+    67,    68,    -1,    -1,   102,    -1,    -1,    -1,    -1,    -1,
+    -1,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   121,    91,    -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,   118
+};
+#define YYPURE 1
+
+/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
+#line 3 "/usr/lib/bison.simple"
+/* This file comes from bison-1.28.  */
+
+/* Skeleton output parser for bison,
+   Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* As a special exception, when this file is copied by Bison into a
+   Bison output file, you may use that output file without restriction.
+   This special exception was added by the Free Software Foundation
+   in version 1.24 of Bison.  */
+
+/* This is the parser code that is written into each bison parser
+  when the %semantic_parser declaration is not specified in the grammar.
+  It was written by Richard Stallman by simplifying the hairy parser
+  used when %semantic_parser is specified.  */
+
+#ifndef YYSTACK_USE_ALLOCA
+#ifdef alloca
+#define YYSTACK_USE_ALLOCA
+#else /* alloca not defined */
+#ifdef __GNUC__
+#define YYSTACK_USE_ALLOCA
+#define alloca __builtin_alloca
+#else /* not GNU C.  */
+#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
+#define YYSTACK_USE_ALLOCA
+#include <alloca.h>
+#else /* not sparc */
+/* We think this test detects Watcom and Microsoft C.  */
+/* This used to test MSDOS, but that is a bad idea
+   since that symbol is in the user namespace.  */
+#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
+#if 0 /* No need for malloc.h, which pollutes the namespace;
+	 instead, just don't use alloca.  */
+#include <malloc.h>
+#endif
+#else /* not MSDOS, or __TURBOC__ */
+#if defined(_AIX)
+/* I don't know what this was needed for, but it pollutes the namespace.
+   So I turned it off.   rms, 2 May 1997.  */
+/* #include <malloc.h>  */
+ #pragma alloca
+#define YYSTACK_USE_ALLOCA
+#else /* not MSDOS, or __TURBOC__, or _AIX */
+#if 0
+#ifdef __hpux /* [email protected] says this works for HPUX 9.05 and up,
+		 and on HPUX 10.  Eventually we can turn this on.  */
+#define YYSTACK_USE_ALLOCA
+#define alloca __builtin_alloca
+#endif /* __hpux */
+#endif
+#endif /* not _AIX */
+#endif /* not MSDOS, or __TURBOC__ */
+#endif /* not sparc */
+#endif /* not GNU C */
+#endif /* alloca not defined */
+#endif /* YYSTACK_USE_ALLOCA not defined */
+
+#ifdef YYSTACK_USE_ALLOCA
+#define YYSTACK_ALLOC alloca
+#else
+#define YYSTACK_ALLOC malloc
+#endif
+
+/* Note: there must be only one dollar sign in this file.
+   It is replaced by the list of actions, each action
+   as one case of the switch.  */
+
+#define yyerrok		(yyerrstatus = 0)
+#define yyclearin	(yychar = YYEMPTY)
+#define YYEMPTY		-2
+#define YYEOF		0
+#define YYACCEPT	goto yyacceptlab
+#define YYABORT 	goto yyabortlab
+#define YYERROR		goto yyerrlab1
+/* Like YYERROR except do call yyerror.
+   This remains here temporarily to ease the
+   transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+#define YYFAIL		goto yyerrlab
+#define YYRECOVERING()  (!!yyerrstatus)
+#define YYBACKUP(token, value) \
+do								\
+  if (yychar == YYEMPTY && yylen == 1)				\
+    { yychar = (token), yylval = (value);			\
+      yychar1 = YYTRANSLATE (yychar);				\
+      YYPOPSTACK;						\
+      goto yybackup;						\
+    }								\
+  else								\
+    { yyerror ("syntax error: cannot back up"); YYERROR; }	\
+while (0)
+
+#define YYTERROR	1
+#define YYERRCODE	256
+
+#ifndef YYPURE
+#define YYLEX		yylex()
+#endif
+
+#ifdef YYPURE
+#ifdef YYLSP_NEEDED
+#ifdef YYLEX_PARAM
+#define YYLEX		yylex(&yylval, &yylloc, YYLEX_PARAM)
+#else
+#define YYLEX		yylex(&yylval, &yylloc)
+#endif
+#else /* not YYLSP_NEEDED */
+#ifdef YYLEX_PARAM
+#define YYLEX		yylex(&yylval, YYLEX_PARAM)
+#else
+#define YYLEX		yylex(&yylval)
+#endif
+#endif /* not YYLSP_NEEDED */
+#endif
+
+/* If nonreentrant, generate the variables here */
+
+#ifndef YYPURE
+
+int	yychar;			/*  the lookahead symbol		*/
+YYSTYPE	yylval;			/*  the semantic value of the		*/
+				/*  lookahead symbol			*/
+
+#ifdef YYLSP_NEEDED
+YYLTYPE yylloc;			/*  location data for the lookahead	*/
+				/*  symbol				*/
+#endif
+
+int yynerrs;			/*  number of parse errors so far       */
+#endif  /* not YYPURE */
+
+#if YYDEBUG != 0
+int yydebug;			/*  nonzero means print parse trace	*/
+/* Since this is uninitialized, it does not stop multiple parsers
+   from coexisting.  */
+#endif
+
+/*  YYINITDEPTH indicates the initial size of the parser's stacks	*/
+
+#ifndef	YYINITDEPTH
+#define YYINITDEPTH 200
+#endif
+
+/*  YYMAXDEPTH is the maximum size the stacks can grow to
+    (effective only if the built-in stack extension method is used).  */
+
+#if YYMAXDEPTH == 0
+#undef YYMAXDEPTH
+#endif
+
+#ifndef YYMAXDEPTH
+#define YYMAXDEPTH 10000
+#endif
+
+/* Define __yy_memcpy.  Note that the size argument
+   should be passed with type unsigned int, because that is what the non-GCC
+   definitions require.  With GCC, __builtin_memcpy takes an arg
+   of type size_t, but it can handle unsigned int.  */
+
+#if __GNUC__ > 1		/* GNU C and GNU C++ define this.  */
+#define __yy_memcpy(TO,FROM,COUNT)	__builtin_memcpy(TO,FROM,COUNT)
+#else				/* not GNU C or C++ */
+#ifndef __cplusplus
+
+/* This is the most reliable way to avoid incompatibilities
+   in available built-in functions on various systems.  */
+static void
+__yy_memcpy (to, from, count)
+     char *to;
+     char *from;
+     unsigned int count;
+{
+  register char *f = from;
+  register char *t = to;
+  register int i = count;
+
+  while (i-- > 0)
+    *t++ = *f++;
+}
+
+#else /* __cplusplus */
+
+/* This is the most reliable way to avoid incompatibilities
+   in available built-in functions on various systems.  */
+static void
+__yy_memcpy (char *to, char *from, unsigned int count)
+{
+  register char *t = to;
+  register char *f = from;
+  register int i = count;
+
+  while (i-- > 0)
+    *t++ = *f++;
+}
+
+#endif
+#endif
+
+#line 217 "/usr/lib/bison.simple"
+
+/* The user can define YYPARSE_PARAM as the name of an argument to be passed
+   into yyparse.  The argument should have type void *.
+   It should actually point to an object.
+   Grammar actions can access the variable by casting it
+   to the proper pointer type.  */
+
+#ifdef YYPARSE_PARAM
+#ifdef __cplusplus
+#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
+#define YYPARSE_PARAM_DECL
+#else /* not __cplusplus */
+#define YYPARSE_PARAM_ARG YYPARSE_PARAM
+#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
+#endif /* not __cplusplus */
+#else /* not YYPARSE_PARAM */
+#define YYPARSE_PARAM_ARG
+#define YYPARSE_PARAM_DECL
+#endif /* not YYPARSE_PARAM */
+
+/* Prevent warning if -Wstrict-prototypes.  */
+#ifdef __GNUC__
+#ifdef YYPARSE_PARAM
+int yyparse (void *);
+#else
+int yyparse (void);
+#endif
+#endif
+
+int
+yyparse(YYPARSE_PARAM_ARG)
+     YYPARSE_PARAM_DECL
+{
+  register int yystate;
+  register int yyn;
+  register short *yyssp;
+  register YYSTYPE *yyvsp;
+  int yyerrstatus;	/*  number of tokens to shift before error messages enabled */
+  int yychar1 = 0;		/*  lookahead token as an internal (translated) token number */
+
+  short	yyssa[YYINITDEPTH];	/*  the state stack			*/
+  YYSTYPE yyvsa[YYINITDEPTH];	/*  the semantic value stack		*/
+
+  short *yyss = yyssa;		/*  refer to the stacks thru separate pointers */
+  YYSTYPE *yyvs = yyvsa;	/*  to allow yyoverflow to reallocate them elsewhere */
+
+#ifdef YYLSP_NEEDED
+  YYLTYPE yylsa[YYINITDEPTH];	/*  the location stack			*/
+  YYLTYPE *yyls = yylsa;
+  YYLTYPE *yylsp;
+
+#define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
+#else
+#define YYPOPSTACK   (yyvsp--, yyssp--)
+#endif
+
+  int yystacksize = YYINITDEPTH;
+  int yyfree_stacks = 0;
+
+#ifdef YYPURE
+  int yychar;
+  YYSTYPE yylval;
+  int yynerrs;
+#ifdef YYLSP_NEEDED
+  YYLTYPE yylloc;
+#endif
+#endif
+
+  YYSTYPE yyval;		/*  the variable used to return		*/
+				/*  semantic values from the action	*/
+				/*  routines				*/
+
+  int yylen;
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Starting parse\n");
+#endif
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;		/* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss - 1;
+  yyvsp = yyvs;
+#ifdef YYLSP_NEEDED
+  yylsp = yyls;
+#endif
+
+/* Push a new state, which is found in  yystate  .  */
+/* In all cases, when you get here, the value and location stacks
+   have just been pushed. so pushing a state here evens the stacks.  */
+yynewstate:
+
+  *++yyssp = yystate;
+
+  if (yyssp >= yyss + yystacksize - 1)
+    {
+      /* Give user a chance to reallocate the stack */
+      /* Use copies of these so that the &'s don't force the real ones into memory. */
+      YYSTYPE *yyvs1 = yyvs;
+      short *yyss1 = yyss;
+#ifdef YYLSP_NEEDED
+      YYLTYPE *yyls1 = yyls;
+#endif
+
+      /* Get the current used size of the three stacks, in elements.  */
+      int size = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      /* Each stack pointer address is followed by the size of
+	 the data in use in that stack, in bytes.  */
+#ifdef YYLSP_NEEDED
+      /* This used to be a conditional around just the two extra args,
+	 but that might be undefined if yyoverflow is a macro.  */
+      yyoverflow("parser stack overflow",
+		 &yyss1, size * sizeof (*yyssp),
+		 &yyvs1, size * sizeof (*yyvsp),
+		 &yyls1, size * sizeof (*yylsp),
+		 &yystacksize);
+#else
+      yyoverflow("parser stack overflow",
+		 &yyss1, size * sizeof (*yyssp),
+		 &yyvs1, size * sizeof (*yyvsp),
+		 &yystacksize);
+#endif
+
+      yyss = yyss1; yyvs = yyvs1;
+#ifdef YYLSP_NEEDED
+      yyls = yyls1;
+#endif
+#else /* no yyoverflow */
+      /* Extend the stack our own way.  */
+      if (yystacksize >= YYMAXDEPTH)
+	{
+	  yyerror("parser stack overflow");
+	  if (yyfree_stacks)
+	    {
+	      free (yyss);
+	      free (yyvs);
+#ifdef YYLSP_NEEDED
+	      free (yyls);
+#endif
+	    }
+	  return 2;
+	}
+      yystacksize *= 2;
+      if (yystacksize > YYMAXDEPTH)
+	yystacksize = YYMAXDEPTH;
+#ifndef YYSTACK_USE_ALLOCA
+      yyfree_stacks = 1;
+#endif
+      yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
+      __yy_memcpy ((char *)yyss, (char *)yyss1,
+		   size * (unsigned int) sizeof (*yyssp));
+      yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
+      __yy_memcpy ((char *)yyvs, (char *)yyvs1,
+		   size * (unsigned int) sizeof (*yyvsp));
+#ifdef YYLSP_NEEDED
+      yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
+      __yy_memcpy ((char *)yyls, (char *)yyls1,
+		   size * (unsigned int) sizeof (*yylsp));
+#endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + size - 1;
+      yyvsp = yyvs + size - 1;
+#ifdef YYLSP_NEEDED
+      yylsp = yyls + size - 1;
+#endif
+
+#if YYDEBUG != 0
+      if (yydebug)
+	fprintf(stderr, "Stack size increased to %d\n", yystacksize);
+#endif
+
+      if (yyssp >= yyss + yystacksize - 1)
+	YYABORT;
+    }
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Entering state %d\n", yystate);
+#endif
+
+  goto yybackup;
+ yybackup:
+
+/* Do appropriate processing given the current state.  */
+/* Read a lookahead token if we need one and don't already have one.  */
+/* yyresume: */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+
+  yyn = yypact[yystate];
+  if (yyn == YYFLAG)
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* yychar is either YYEMPTY or YYEOF
+     or a valid token in external form.  */
+
+  if (yychar == YYEMPTY)
+    {
+#if YYDEBUG != 0
+      if (yydebug)
+	fprintf(stderr, "Reading a token: ");
+#endif
+      yychar = YYLEX;
+    }
+
+  /* Convert token to internal form (in yychar1) for indexing tables with */
+
+  if (yychar <= 0)		/* This means end of input. */
+    {
+      yychar1 = 0;
+      yychar = YYEOF;		/* Don't call YYLEX any more */
+
+#if YYDEBUG != 0
+      if (yydebug)
+	fprintf(stderr, "Now at end of input.\n");
+#endif
+    }
+  else
+    {
+      yychar1 = YYTRANSLATE(yychar);
+
+#if YYDEBUG != 0
+      if (yydebug)
+	{
+	  fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
+	  /* Give the individual parser a way to print the precise meaning
+	     of a token, for further debugging info.  */
+#ifdef YYPRINT
+	  YYPRINT (stderr, yychar, yylval);
+#endif
+	  fprintf (stderr, ")\n");
+	}
+#endif
+    }
+
+  yyn += yychar1;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
+    goto yydefault;
+
+  yyn = yytable[yyn];
+
+  /* yyn is what to do for this token type in this state.
+     Negative => reduce, -yyn is rule number.
+     Positive => shift, yyn is new state.
+       New state is final state => don't bother to shift,
+       just return success.
+     0, or most negative number => error.  */
+
+  if (yyn < 0)
+    {
+      if (yyn == YYFLAG)
+	goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+  else if (yyn == 0)
+    goto yyerrlab;
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Shift the lookahead token.  */
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
+#endif
+
+  /* Discard the token being shifted unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  *++yyvsp = yylval;
+#ifdef YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
+
+  /* count tokens shifted since error; after three, turn off error status.  */
+  if (yyerrstatus) yyerrstatus--;
+
+  yystate = yyn;
+  goto yynewstate;
+
+/* Do the default action for the current state.  */
+yydefault:
+
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+
+/* Do a reduction.  yyn is the number of a rule to reduce with.  */
+yyreduce:
+  yylen = yyr2[yyn];
+  if (yylen > 0)
+    yyval = yyvsp[1-yylen]; /* implement default value of the action */
+
+#if YYDEBUG != 0
+  if (yydebug)
+    {
+      int i;
+
+      fprintf (stderr, "Reducing via rule %d (line %d), ",
+	       yyn, yyrline[yyn]);
+
+      /* Print the symbols being reduced, and their result.  */
+      for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
+	fprintf (stderr, "%s ", yytname[yyrhs[i]]);
+      fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
+    }
+#endif
+
+
+  switch (yyn) {
+
+case 2:
+#line 377 "cppBison.yxx"
+{
+  current_expr = yyvsp[0].u.expr;
+;
+    break;}
+case 3:
+#line 381 "cppBison.yxx"
+{
+  current_type = yyvsp[0].u.type;
+;
+    break;}
+case 9:
+#line 399 "cppBison.yxx"
+{
+  delete yyvsp[-1].u.expr;
+;
+    break;}
+case 10:
+#line 411 "cppBison.yxx"
+{
+  push_storage_class((current_storage_class & ~CPPInstance::SC_c_binding) | 
+                     (yyvsp[-1].u.integer & CPPInstance::SC_c_binding));
+;
+    break;}
+case 11:
+#line 416 "cppBison.yxx"
+{
+  pop_storage_class();
+;
+    break;}
+case 19:
+#line 430 "cppBison.yxx"
+{
+  if (publish_nest_level != 0) {
+    yyerror("Unclosed __begin_publish", publish_loc);
+    publish_nest_level = 0;
+    current_scope->set_current_vis(V_public);
+  }
+
+  publish_previous = current_scope->get_current_vis();
+  publish_loc = yylsp[0];
+  publish_nest_level++;
+  current_scope->set_current_vis(V_published);
+;
+    break;}
+case 20:
+#line 443 "cppBison.yxx"
+{
+  if (publish_nest_level != 1) {
+    yyerror("Unmatched __end_publish", yylsp[0]);
+  } else {
+    current_scope->set_current_vis(publish_previous);
+  }
+  publish_nest_level = 0;
+;
+    break;}
+case 21:
+#line 452 "cppBison.yxx"
+{
+  current_scope->set_current_vis(V_published);
+;
+    break;}
+case 22:
+#line 456 "cppBison.yxx"
+{
+  current_scope->set_current_vis(V_public);
+;
+    break;}
+case 23:
+#line 460 "cppBison.yxx"
+{
+  current_scope->set_current_vis(V_protected);
+;
+    break;}
+case 24:
+#line 464 "cppBison.yxx"
+{
+  current_scope->set_current_vis(V_private);
+;
+    break;}
+case 25:
+#line 471 "cppBison.yxx"
+{
+  CPPScope *new_scope = new CPPScope(current_scope, CPPNameComponent("temp"),
+                                     V_public);
+  push_scope(new_scope);
+;
+    break;}
+case 26:
+#line 477 "cppBison.yxx"
+{
+  delete current_scope;
+  pop_scope();
+;
+    break;}
+case 27:
+#line 486 "cppBison.yxx"
+{
+  yyval.u.integer = 0;
+;
+    break;}
+case 28:
+#line 490 "cppBison.yxx"
+{
+  yyval.u.integer = yyvsp[-1].u.integer | (int)CPPInstance::SC_extern;
+;
+    break;}
+case 29:
+#line 494 "cppBison.yxx"
+{
+  yyval.u.integer = yyvsp[-2].u.integer | (int)CPPInstance::SC_extern;
+  if (yyvsp[0].str == "C") {
+    yyval.u.integer |= (int)CPPInstance::SC_c_binding;
+  } else if (yyvsp[0].str == "C++") {
+    yyval.u.integer &= ~(int)CPPInstance::SC_c_binding;
+  } else {
+    yywarning("Ignoring unknown linkage type \"" + yyvsp[0].str + "\"", yylsp[0]);
+  }
+;
+    break;}
+case 30:
+#line 505 "cppBison.yxx"
+{
+  yyval.u.integer = yyvsp[-1].u.integer | (int)CPPInstance::SC_static;
+;
+    break;}
+case 31:
+#line 509 "cppBison.yxx"
+{
+  yyval.u.integer = yyvsp[-1].u.integer | (int)CPPInstance::SC_inline;
+;
+    break;}
+case 32:
+#line 513 "cppBison.yxx"
+{
+  yyval.u.integer = yyvsp[-1].u.integer | (int)CPPInstance::SC_virtual;
+;
+    break;}
+case 33:
+#line 517 "cppBison.yxx"
+{
+  yyval.u.integer = yyvsp[-1].u.integer | (int)CPPInstance::SC_explicit;
+;
+    break;}
+case 34:
+#line 521 "cppBison.yxx"
+{
+  yyval.u.integer = yyvsp[-1].u.integer | (int)CPPInstance::SC_volatile;
+;
+    break;}
+case 35:
+#line 525 "cppBison.yxx"
+{
+  yyval.u.integer = yyvsp[-1].u.integer | (int)CPPInstance::SC_mutable;
+;
+    break;}
+case 36:
+#line 529 "cppBison.yxx"
+{
+  yyval.u.integer = yyvsp[-1].u.integer | (int)CPPInstance::SC_register;
+;
+    break;}
+case 37:
+#line 536 "cppBison.yxx"
+{
+  /* multiple_var_declaration adds itself to the scope. */
+;
+    break;}
+case 38:
+#line 540 "cppBison.yxx"
+{
+  // We don't really care about the storage class here.  In fact, it's
+  // not actually legal to define a class or struct using a particular
+  // storage class, but we require it just to help yacc out in its
+  // parsing.
+
+  current_scope->add_declaration(yyvsp[-1].u.decl, global_scope, current_lexer, yylsp[-1]);
+;
+    break;}
+case 39:
+#line 549 "cppBison.yxx"
+{
+  if (yyvsp[-1].u.instance != (CPPInstance *)NULL) {
+    yyvsp[-1].u.instance->_storage_class |= (current_storage_class | yyvsp[-2].u.integer);
+    current_scope->add_declaration(yyvsp[-1].u.instance, global_scope, current_lexer, yylsp[-1]);
+    yyvsp[-1].u.instance->set_initializer(yyvsp[0].u.expr);
+  }
+;
+    break;}
+case 40:
+#line 560 "cppBison.yxx"
+{
+  // We don't need to push/pop type, because we can't nest
+  // multiple_var_declarations.
+  if (yyvsp[0].u.decl->as_type_declaration()) {
+    current_type = yyvsp[0].u.decl->as_type_declaration()->_type;
+  } else {
+    current_type = yyvsp[0].u.decl->as_type();
+  }
+  push_storage_class(yyvsp[-1].u.integer);
+;
+    break;}
+case 41:
+#line 571 "cppBison.yxx"
+{
+  pop_storage_class();
+;
+    break;}
+case 42:
+#line 575 "cppBison.yxx"
+{
+  // We don't need to push/pop type, because we can't nest
+  // multiple_var_declarations.
+  current_type = yyvsp[0].u.type;
+  push_storage_class(yyvsp[-2].u.integer);
+;
+    break;}
+case 43:
+#line 582 "cppBison.yxx"
+{
+  pop_storage_class();
+;
+    break;}
+case 44:
+#line 593 "cppBison.yxx"
+{
+  CPPInstance *inst = new CPPInstance(current_type, yyvsp[-1].u.inst_ident,
+                                      current_storage_class,
+                                      yylsp[-1].file);
+  inst->set_initializer(yyvsp[0].u.expr);
+  current_scope->add_declaration(inst, global_scope, current_lexer, yylsp[-1]);
+;
+    break;}
+case 45:
+#line 601 "cppBison.yxx"
+{
+  CPPInstance *inst = new CPPInstance(current_type, yyvsp[-3].u.inst_ident,
+                                      current_storage_class,
+                                      yylsp[-3].file);
+  inst->set_initializer(yyvsp[-2].u.expr);
+  current_scope->add_declaration(inst, global_scope, current_lexer, yylsp[-3]);
+;
+    break;}
+case 46:
+#line 612 "cppBison.yxx"
+{
+  yyvsp[-1].u.inst_ident->add_modifier(IIT_const);
+  CPPInstance *inst = new CPPInstance(current_type, yyvsp[-1].u.inst_ident,
+                                      current_storage_class,
+                                      yylsp[-1].file);
+  inst->set_initializer(yyvsp[0].u.expr);
+  current_scope->add_declaration(inst, global_scope, current_lexer, yylsp[-1]);
+;
+    break;}
+case 47:
+#line 621 "cppBison.yxx"
+{
+  yyvsp[-3].u.inst_ident->add_modifier(IIT_const);
+  CPPInstance *inst = new CPPInstance(current_type, yyvsp[-3].u.inst_ident,
+                                      current_storage_class,
+                                      yylsp[-3].file);
+  inst->set_initializer(yyvsp[-2].u.expr);
+  current_scope->add_declaration(inst, global_scope, current_lexer, yylsp[-3]);
+;
+    break;}
+case 48:
+#line 634 "cppBison.yxx"
+{
+  // We don't need to push/pop type, because we can't nest
+  // multiple_var_declarations.
+  if (yyvsp[0].u.decl->as_type_declaration()) {
+    current_type = yyvsp[0].u.decl->as_type_declaration()->_type;
+  } else {
+    current_type = yyvsp[0].u.decl->as_type();
+  }
+  push_storage_class(yyvsp[-1].u.integer);
+;
+    break;}
+case 49:
+#line 645 "cppBison.yxx"
+{
+  pop_storage_class();
+;
+    break;}
+case 50:
+#line 649 "cppBison.yxx"
+{
+  // We don't need to push/pop type, because we can't nest
+  // multiple_var_declarations.
+  current_type = yyvsp[0].u.type;
+  push_storage_class(yyvsp[-2].u.integer);
+;
+    break;}
+case 51:
+#line 656 "cppBison.yxx"
+{
+  pop_storage_class();
+;
+    break;}
+case 52:
+#line 660 "cppBison.yxx"
+{
+  if (yyvsp[-1].u.instance != (CPPDeclaration *)NULL) {
+    CPPInstance *inst = yyvsp[-1].u.instance->as_instance();
+    if (inst != (CPPInstance *)NULL) {
+      inst->_storage_class |= (current_storage_class | yyvsp[-2].u.integer);
+      current_scope->add_declaration(inst, global_scope, current_lexer, yylsp[-1]);
+      current_scope->add_declaration(new CPPTypedef(inst, current_scope == global_scope), global_scope, current_lexer, yylsp[-1]);
+    }
+  }
+;
+    break;}
+case 53:
+#line 674 "cppBison.yxx"
+{
+  CPPInstance *inst = new CPPInstance(current_type, yyvsp[-1].u.inst_ident,
+                                      current_storage_class,
+                                      yylsp[-1].file);
+  inst->set_initializer(yyvsp[0].u.expr);
+  current_scope->add_declaration(new CPPTypedef(inst, current_scope == global_scope), global_scope, current_lexer, yylsp[-1]);
+;
+    break;}
+case 54:
+#line 682 "cppBison.yxx"
+{
+  CPPInstance *inst = new CPPInstance(current_type, yyvsp[-3].u.inst_ident,
+                                      current_storage_class,
+                                      yylsp[-3].file);
+  inst->set_initializer(yyvsp[-2].u.expr);
+  current_scope->add_declaration(new CPPTypedef(inst, current_scope == global_scope), global_scope, current_lexer, yylsp[-3]);
+;
+    break;}
+case 55:
+#line 693 "cppBison.yxx"
+{
+  yyvsp[-1].u.inst_ident->add_modifier(IIT_const);
+  CPPInstance *inst = new CPPInstance(current_type, yyvsp[-1].u.inst_ident,
+                                      current_storage_class,
+                                      yylsp[-1].file);
+  inst->set_initializer(yyvsp[0].u.expr);
+  current_scope->add_declaration(new CPPTypedef(inst, current_scope == global_scope), global_scope, current_lexer, yylsp[-1]);
+;
+    break;}
+case 56:
+#line 702 "cppBison.yxx"
+{
+  yyvsp[-3].u.inst_ident->add_modifier(IIT_const);
+  CPPInstance *inst = new CPPInstance(current_type, yyvsp[-3].u.inst_ident,
+                                      current_storage_class,
+                                      yylsp[-3].file);
+  inst->set_initializer(yyvsp[-2].u.expr);
+  current_scope->add_declaration(new CPPTypedef(inst, current_scope == global_scope), global_scope, current_lexer, yylsp[-3]);
+;
+    break;}
+case 57:
+#line 716 "cppBison.yxx"
+{
+  push_scope(yyvsp[-1].u.identifier->get_scope(current_scope, global_scope));
+;
+    break;}
+case 58:
+#line 720 "cppBison.yxx"
+{
+  pop_scope();
+  CPPType *type;
+  if (yyvsp[-5].u.identifier->get_simple_name() == current_scope->get_simple_name()) {
+    // This is a constructor, and has no return.
+    type = new CPPSimpleType(CPPSimpleType::T_void);
+  } else {
+    // This isn't a constructor, so it has an implicit return type of
+    // int.
+    type = new CPPSimpleType(CPPSimpleType::T_int);
+  }
+
+  CPPInstanceIdentifier *ii = new CPPInstanceIdentifier(yyvsp[-5].u.identifier);
+  ii->add_func_modifier(yyvsp[-2].u.param_list, yyvsp[0].u.integer);
+
+  yyval.u.instance = new CPPInstance(type, ii, 0, yylsp[-5].file);
+;
+    break;}
+case 59:
+#line 738 "cppBison.yxx"
+{
+  push_scope(yyvsp[-1].u.identifier->get_scope(current_scope, global_scope));
+;
+    break;}
+case 60:
+#line 742 "cppBison.yxx"
+{
+  pop_scope();
+  CPPType *type;
+  if (yyvsp[-5].u.identifier->get_simple_name() == current_scope->get_simple_name()) {
+    // This is a constructor, and has no return.
+    type = new CPPSimpleType(CPPSimpleType::T_void);
+  } else {
+    // This isn't a constructor, so it has an implicit return type of
+    // int.
+    type = new CPPSimpleType(CPPSimpleType::T_int);
+  }
+
+  CPPInstanceIdentifier *ii = new CPPInstanceIdentifier(yyvsp[-5].u.identifier);
+  ii->add_func_modifier(yyvsp[-2].u.param_list, yyvsp[0].u.integer);
+
+  yyval.u.instance = new CPPInstance(type, ii, 0, yylsp[-5].file);
+;
+    break;}
+case 61:
+#line 762 "cppBison.yxx"
+{
+  push_scope(yyvsp[-1].u.identifier->get_scope(current_scope, global_scope));
+;
+    break;}
+case 62:
+#line 766 "cppBison.yxx"
+{
+  pop_scope();
+  if (yyvsp[-5].u.identifier->is_scoped()) {
+    yyerror("Invalid destructor name: ~" + yyvsp[-5].u.identifier->get_fully_scoped_name(), yylsp[-5]);
+  } else {
+    CPPIdentifier *ident = 
+      new CPPIdentifier("~" + yyvsp[-5].u.identifier->get_simple_name(), yylsp[-5].file);
+    delete yyvsp[-5].u.identifier;
+
+    CPPType *type;
+    type = new CPPSimpleType(CPPSimpleType::T_void);
+    
+    CPPInstanceIdentifier *ii = new CPPInstanceIdentifier(ident);
+    ii->add_func_modifier(yyvsp[-2].u.param_list, yyvsp[0].u.integer);
+
+    yyval.u.instance = new CPPInstance(type, ii, 0, yylsp[-5].file);
+  }
+;
+    break;}
+case 63:
+#line 792 "cppBison.yxx"
+{
+  push_scope(yyvsp[-2].u.inst_ident->get_scope(current_scope, global_scope));
+;
+    break;}
+case 64:
+#line 796 "cppBison.yxx"
+{
+  pop_scope();
+  CPPType *type = yyvsp[-9].u.identifier->find_type(current_scope, global_scope, false, current_lexer);
+  assert(type != NULL);
+
+  CPPInstanceIdentifier *ii = yyvsp[-6].u.inst_ident;
+  ii->add_modifier(IIT_pointer);
+  ii->add_func_modifier(yyvsp[-2].u.param_list, yyvsp[0].u.integer);
+  yyval.u.instance = new CPPInstance(type, ii, 0, yylsp[-9].file);
+;
+    break;}
+case 65:
+#line 807 "cppBison.yxx"
+{
+  push_scope(yyvsp[-2].u.inst_ident->get_scope(current_scope, global_scope));
+;
+    break;}
+case 66:
+#line 811 "cppBison.yxx"
+{
+  pop_scope();
+  CPPType *type = yyvsp[-10].u.identifier->find_type(current_scope, global_scope, false, current_lexer);
+  assert(type != NULL);
+
+  CPPInstanceIdentifier *ii = yyvsp[-6].u.inst_ident;
+  ii->add_scoped_pointer_modifier(yyvsp[-8].u.identifier);
+  ii->add_func_modifier(yyvsp[-2].u.param_list, yyvsp[0].u.integer);
+  yyval.u.instance = new CPPInstance(type, ii, 0, yylsp[-10].file);
+;
+    break;}
+case 67:
+#line 824 "cppBison.yxx"
+{
+  if (yyvsp[-3].u.identifier != NULL) {
+    push_scope(yyvsp[-3].u.identifier->get_scope(current_scope, global_scope));
+  }
+;
+    break;}
+case 68:
+#line 830 "cppBison.yxx"
+{
+  if (yyvsp[-7].u.identifier != NULL) {
+    pop_scope();
+  }
+
+  // We use formal_parameter_identifier, because that can match a type
+  // name with or without an identifier, but especially without, which
+  // is what follows the keyword "operator" in a typecast function.
+  // As an added bonus, the type of the formal_parameter will be the
+  // typecast type, i.e. the return type of the typecast function.
+
+  // We give all typecast operators the name "operator typecast".
+  // Only their return type will differentiate them.  (Naturally, this
+  // violates actual C++ rules, but we're not an actual C++ compiler
+  // so we don't care.  And this is the easiest way to do it.)
+  CPPIdentifier *ident = yyvsp[-7].u.identifier;
+  if (ident == NULL) {
+    ident = new CPPIdentifier("operator typecast", yylsp[-7].file);
+  } else {
+    ident->add_name("operator typecast");
+  }
+  yyval.u.instance = CPPInstance::make_typecast_function
+    (new CPPInstance(yyvsp[-6].u.type, yyvsp[-5].u.inst_ident, 0, yylsp[-5].file), ident, yyvsp[-2].u.param_list, yyvsp[0].u.integer);
+;
+    break;}
+case 69:
+#line 855 "cppBison.yxx"
+{
+  if (yyvsp[-4].u.identifier != NULL) {
+    push_scope(yyvsp[-4].u.identifier->get_scope(current_scope, global_scope));
+  }
+;
+    break;}
+case 70:
+#line 861 "cppBison.yxx"
+{
+  if (yyvsp[-8].u.identifier != NULL) {
+    pop_scope();
+  }
+
+  CPPIdentifier *ident = yyvsp[-8].u.identifier;
+  if (ident == NULL) {
+    ident = new CPPIdentifier("operator typecast", yylsp[-8].file);
+  } else {
+    ident->add_name("operator typecast");
+  }
+  yyvsp[-5].u.inst_ident->add_modifier(IIT_const);
+  yyval.u.instance = CPPInstance::make_typecast_function
+    (new CPPInstance(yyvsp[-6].u.type, yyvsp[-5].u.inst_ident, 0, yylsp[-5].file), ident, yyvsp[-2].u.param_list, yyvsp[0].u.integer);
+;
+    break;}
+case 71:
+#line 881 "cppBison.yxx"
+{
+  CPPDeclaration *decl = 
+    yyvsp[0].u.identifier->find_symbol(current_scope, global_scope, current_lexer);
+  if (decl != (CPPDeclaration *)NULL) {
+    yyval.u.instance = decl->as_instance();
+  } else {
+    yyval.u.instance = (CPPInstance *)NULL;
+  }
+;
+    break;}
+case 72:
+#line 894 "cppBison.yxx"
+{
+  yyval.u.integer = 0;
+;
+    break;}
+case 73:
+#line 898 "cppBison.yxx"
+{
+  yyval.u.integer = (int)CPPFunctionType::F_const_method;
+;
+    break;}
+case 74:
+#line 902 "cppBison.yxx"
+{
+  yyval.u.integer = yyvsp[-3].u.integer;
+;
+    break;}
+case 75:
+#line 906 "cppBison.yxx"
+{
+  yyval.u.integer = yyvsp[-4].u.integer;
+;
+    break;}
+case 76:
+#line 913 "cppBison.yxx"
+{
+  yyval.str = "!";
+;
+    break;}
+case 77:
+#line 917 "cppBison.yxx"
+{
+  yyval.str = "~";
+;
+    break;}
+case 78:
+#line 921 "cppBison.yxx"
+{
+  yyval.str = "*";
+;
+    break;}
+case 79:
+#line 925 "cppBison.yxx"
+{
+  yyval.str = "/";
+;
+    break;}
+case 80:
+#line 929 "cppBison.yxx"
+{
+  yyval.str = "%";
+;
+    break;}
+case 81:
+#line 933 "cppBison.yxx"
+{
+  yyval.str = "+";
+;
+    break;}
+case 82:
+#line 937 "cppBison.yxx"
+{
+  yyval.str = "-";
+;
+    break;}
+case 83:
+#line 941 "cppBison.yxx"
+{
+  yyval.str = "|";
+;
+    break;}
+case 84:
+#line 945 "cppBison.yxx"
+{
+  yyval.str = "&";
+;
+    break;}
+case 85:
+#line 949 "cppBison.yxx"
+{
+  yyval.str = "^";
+;
+    break;}
+case 86:
+#line 953 "cppBison.yxx"
+{
+  yyval.str = "||";
+;
+    break;}
+case 87:
+#line 957 "cppBison.yxx"
+{
+  yyval.str = "&&";
+;
+    break;}
+case 88:
+#line 961 "cppBison.yxx"
+{
+  yyval.str = "==";
+;
+    break;}
+case 89:
+#line 965 "cppBison.yxx"
+{
+  yyval.str = "!=";
+;
+    break;}
+case 90:
+#line 969 "cppBison.yxx"
+{
+  yyval.str = "<=";
+;
+    break;}
+case 91:
+#line 973 "cppBison.yxx"
+{
+  yyval.str = ">=";
+;
+    break;}
+case 92:
+#line 977 "cppBison.yxx"
+{
+  yyval.str = "<";
+;
+    break;}
+case 93:
+#line 981 "cppBison.yxx"
+{
+  yyval.str = ">";
+;
+    break;}
+case 94:
+#line 985 "cppBison.yxx"
+{
+  yyval.str = "<<";
+;
+    break;}
+case 95:
+#line 989 "cppBison.yxx"
+{
+  yyval.str = ">>";
+;
+    break;}
+case 96:
+#line 993 "cppBison.yxx"
+{
+  yyval.str = "=";
+;
+    break;}
+case 97:
+#line 997 "cppBison.yxx"
+{
+  yyval.str = ",";
+;
+    break;}
+case 98:
+#line 1001 "cppBison.yxx"
+{
+  yyval.str = "++";
+;
+    break;}
+case 99:
+#line 1005 "cppBison.yxx"
+{
+  yyval.str = "--";
+;
+    break;}
+case 100:
+#line 1009 "cppBison.yxx"
+{
+  yyval.str = "*=";
+;
+    break;}
+case 101:
+#line 1013 "cppBison.yxx"
+{
+  yyval.str = "/=";
+;
+    break;}
+case 102:
+#line 1017 "cppBison.yxx"
+{
+  yyval.str = "%=";
+;
+    break;}
+case 103:
+#line 1021 "cppBison.yxx"
+{
+  yyval.str = "+=";
+;
+    break;}
+case 104:
+#line 1025 "cppBison.yxx"
+{
+  yyval.str = "-=";
+;
+    break;}
+case 105:
+#line 1029 "cppBison.yxx"
+{
+  yyval.str = "|=";
+;
+    break;}
+case 106:
+#line 1033 "cppBison.yxx"
+{
+  yyval.str = "&=";
+;
+    break;}
+case 107:
+#line 1037 "cppBison.yxx"
+{
+  yyval.str = "^=";
+;
+    break;}
+case 108:
+#line 1041 "cppBison.yxx"
+{
+  yyval.str = "<<=";
+;
+    break;}
+case 109:
+#line 1045 "cppBison.yxx"
+{
+  yyval.str = ">>=";
+;
+    break;}
+case 110:
+#line 1049 "cppBison.yxx"
+{
+  yyval.str = "->";
+;
+    break;}
+case 111:
+#line 1053 "cppBison.yxx"
+{
+  yyval.str = "[]";
+;
+    break;}
+case 112:
+#line 1057 "cppBison.yxx"
+{
+  yyval.str = "()";
+;
+    break;}
+case 113:
+#line 1061 "cppBison.yxx"
+{
+  yyval.str = "new";
+;
+    break;}
+case 114:
+#line 1065 "cppBison.yxx"
+{
+  yyval.str = "delete";
+;
+    break;}
+case 117:
+#line 1077 "cppBison.yxx"
+{
+  push_scope(new CPPTemplateScope(current_scope));
+;
+    break;}
+case 118:
+#line 1081 "cppBison.yxx"
+{
+  pop_scope();
+;
+    break;}
+case 121:
+#line 1093 "cppBison.yxx"
+{
+  CPPTemplateScope *ts = current_scope->as_template_scope();
+  assert(ts != NULL);
+  ts->add_template_parameter(yyvsp[0].u.decl);
+;
+    break;}
+case 122:
+#line 1099 "cppBison.yxx"
+{
+  CPPTemplateScope *ts = current_scope->as_template_scope();
+  assert(ts != NULL);
+  ts->add_template_parameter(yyvsp[0].u.decl);
+;
+    break;}
+case 123:
+#line 1108 "cppBison.yxx"
+{
+  yyval.u.decl = CPPType::new_type(new CPPClassTemplateParameter(yyvsp[0].u.identifier));
+;
+    break;}
+case 124:
+#line 1112 "cppBison.yxx"
+{
+  yyval.u.decl = CPPType::new_type(new CPPClassTemplateParameter(yyvsp[-2].u.identifier, yyvsp[0].u.type));
+;
+    break;}
+case 125:
+#line 1116 "cppBison.yxx"
+{
+  CPPInstance *inst = new CPPInstance(yyvsp[-2].u.type, yyvsp[-1].u.inst_ident, 0, yylsp[-1].file);
+  inst->set_initializer(yyvsp[0].u.expr);
+  yyval.u.decl = inst;
+;
+    break;}
+case 126:
+#line 1122 "cppBison.yxx"
+{
+  yyvsp[-1].u.inst_ident->add_modifier(IIT_const);
+  CPPInstance *inst = new CPPInstance(yyvsp[-2].u.type, yyvsp[-1].u.inst_ident, 0, yylsp[-1].file);
+  inst->set_initializer(yyvsp[0].u.expr);
+  yyval.u.decl = inst;
+;
+    break;}
+case 127:
+#line 1132 "cppBison.yxx"
+{
+  yyval.u.type = CPPType::new_type(yyvsp[0].u.simple_type);
+;
+    break;}
+case 128:
+#line 1136 "cppBison.yxx"
+{
+  yywarning("Not a type: " + yyvsp[0].u.identifier->get_fully_scoped_name(), yylsp[0]);
+  yyval.u.type = CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_unknown));
+;
+    break;}
+case 129:
+#line 1141 "cppBison.yxx"
+{
+  yyval.u.type = yyvsp[0].u.identifier->find_type(current_scope, global_scope, false, current_lexer);
+  assert(yyval.u.type != NULL);
+;
+    break;}
+case 130:
+#line 1146 "cppBison.yxx"
+{
+  yyval.u.type = CPPType::new_type(new CPPTBDType(yyvsp[0].u.identifier));
+;
+    break;}
+case 131:
+#line 1154 "cppBison.yxx"
+{
+  yyval.u.inst_ident = new CPPInstanceIdentifier(yyvsp[0].u.identifier);
+;
+    break;}
+case 132:
+#line 1158 "cppBison.yxx"
+{
+  // For an operator function.  We implement this simply by building a
+  // ficticious name for the function; in other respects it's just
+  // like a regular function.
+  CPPIdentifier *ident = yyvsp[-1].u.identifier;
+  if (ident == NULL) {
+    ident = new CPPIdentifier("operator "+yyvsp[0].str, yylsp[0].file);
+  } else {
+    ident->_names.push_back("operator "+yyvsp[0].str);
+  }
+
+  yyval.u.inst_ident = new CPPInstanceIdentifier(ident);
+;
+    break;}
+case 133:
+#line 1172 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[0].u.inst_ident;
+  yyval.u.inst_ident->add_modifier(IIT_const);
+;
+    break;}
+case 134:
+#line 1177 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[0].u.inst_ident;
+  yyval.u.inst_ident->add_modifier(IIT_pointer);
+;
+    break;}
+case 135:
+#line 1182 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[0].u.inst_ident;
+  yyval.u.inst_ident->add_modifier(IIT_reference);
+;
+    break;}
+case 136:
+#line 1187 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[0].u.inst_ident;
+  yyval.u.inst_ident->add_scoped_pointer_modifier(yyvsp[-2].u.identifier);
+;
+    break;}
+case 137:
+#line 1192 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[-3].u.inst_ident;
+  yyval.u.inst_ident->add_array_modifier(yyvsp[-1].u.expr);
+;
+    break;}
+case 138:
+#line 1197 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[-1].u.inst_ident;
+  yyval.u.inst_ident->add_modifier(IIT_paren);
+;
+    break;}
+case 139:
+#line 1202 "cppBison.yxx"
+{
+  push_scope(yyvsp[-1].u.inst_ident->get_scope(current_scope, global_scope));
+;
+    break;}
+case 140:
+#line 1206 "cppBison.yxx"
+{
+  pop_scope();
+  yyval.u.inst_ident = yyvsp[-5].u.inst_ident;
+  yyval.u.inst_ident->add_func_modifier(yyvsp[-2].u.param_list, yyvsp[0].u.integer);
+;
+    break;}
+case 141:
+#line 1216 "cppBison.yxx"
+{
+  yyval.u.param_list = new CPPParameterList;
+;
+    break;}
+case 142:
+#line 1220 "cppBison.yxx"
+{
+  yyval.u.param_list = new CPPParameterList;
+  yyval.u.param_list->_includes_ellipsis = true;
+;
+    break;}
+case 143:
+#line 1225 "cppBison.yxx"
+{
+  yyval.u.param_list = yyvsp[0].u.param_list;
+;
+    break;}
+case 144:
+#line 1229 "cppBison.yxx"
+{
+  yyval.u.param_list = yyvsp[-2].u.param_list;
+  yyval.u.param_list->_includes_ellipsis = true;
+;
+    break;}
+case 145:
+#line 1234 "cppBison.yxx"
+{
+  yyval.u.param_list = yyvsp[-1].u.param_list;
+  yyval.u.param_list->_includes_ellipsis = true;
+;
+    break;}
+case 146:
+#line 1242 "cppBison.yxx"
+{
+  yyval.u.param_list = new CPPParameterList;
+  yyval.u.param_list->_parameters.push_back(yyvsp[0].u.instance);
+;
+    break;}
+case 147:
+#line 1247 "cppBison.yxx"
+{
+  yyval.u.param_list = yyvsp[-2].u.param_list;
+  yyval.u.param_list->_parameters.push_back(yyvsp[0].u.instance);
+;
+    break;}
+case 148:
+#line 1255 "cppBison.yxx"
+{
+  yyval.u.expr = (CPPExpression *)NULL;
+;
+    break;}
+case 149:
+#line 1259 "cppBison.yxx"
+{
+  yyval.u.expr = yyvsp[0].u.expr;
+;
+    break;}
+case 150:
+#line 1266 "cppBison.yxx"
+{
+  yyval.u.expr = (CPPExpression *)NULL;
+;
+    break;}
+case 151:
+#line 1270 "cppBison.yxx"
+{
+  yyval.u.expr = yyvsp[0].u.expr;
+;
+    break;}
+case 152:
+#line 1277 "cppBison.yxx"
+{
+  yyval.u.expr = (CPPExpression *)NULL;
+;
+    break;}
+case 153:
+#line 1281 "cppBison.yxx"
+{
+  yyval.u.expr = (CPPExpression *)NULL;
+;
+    break;}
+case 154:
+#line 1285 "cppBison.yxx"
+{
+  yyval.u.expr = (CPPExpression *)NULL;
+;
+    break;}
+case 155:
+#line 1289 "cppBison.yxx"
+{
+  yyval.u.expr = yyvsp[-1].u.expr;
+;
+    break;}
+case 156:
+#line 1293 "cppBison.yxx"
+{
+  yyval.u.expr = (CPPExpression *)NULL;
+;
+    break;}
+case 160:
+#line 1306 "cppBison.yxx"
+{
+;
+    break;}
+case 164:
+#line 1315 "cppBison.yxx"
+{
+  yyval.u.instance = new CPPInstance(yyvsp[-2].u.type, yyvsp[-1].u.inst_ident, 0, yylsp[-1].file);
+  yyval.u.instance->set_initializer(yyvsp[0].u.expr);
+;
+    break;}
+case 165:
+#line 1320 "cppBison.yxx"
+{
+  yywarning("Not a type: " + yyvsp[-2].u.identifier->get_fully_scoped_name(), yylsp[-2]);
+  CPPType *type =
+    CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_unknown));
+  yyval.u.instance = new CPPInstance(type, yyvsp[-1].u.inst_ident, 0, yylsp[-1].file);
+  yyval.u.instance->set_initializer(yyvsp[0].u.expr);
+;
+    break;}
+case 166:
+#line 1328 "cppBison.yxx"
+{
+  yyvsp[-1].u.inst_ident->add_modifier(IIT_const);
+  yyval.u.instance = new CPPInstance(yyvsp[-2].u.type, yyvsp[-1].u.inst_ident, 0, yylsp[-1].file);
+  yyval.u.instance->set_initializer(yyvsp[0].u.expr);
+;
+    break;}
+case 167:
+#line 1337 "cppBison.yxx"
+{
+  yyval.u.inst_ident = new CPPInstanceIdentifier((CPPIdentifier *)NULL);
+;
+    break;}
+case 168:
+#line 1341 "cppBison.yxx"
+{
+  yyval.u.inst_ident = new CPPInstanceIdentifier(yyvsp[0].u.identifier);
+;
+    break;}
+case 169:
+#line 1345 "cppBison.yxx"
+{
+  yyval.u.inst_ident = new CPPInstanceIdentifier(yyvsp[0].u.identifier);
+;
+    break;}
+case 170:
+#line 1349 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[0].u.inst_ident;
+  yyval.u.inst_ident->add_modifier(IIT_const);
+;
+    break;}
+case 171:
+#line 1354 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[0].u.inst_ident;
+  yyval.u.inst_ident->add_modifier(IIT_pointer);
+;
+    break;}
+case 172:
+#line 1359 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[0].u.inst_ident;
+  yyval.u.inst_ident->add_modifier(IIT_reference);
+;
+    break;}
+case 173:
+#line 1364 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[0].u.inst_ident;
+  yyval.u.inst_ident->add_scoped_pointer_modifier(yyvsp[-2].u.identifier);
+;
+    break;}
+case 174:
+#line 1369 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[-3].u.inst_ident;
+  yyval.u.inst_ident->add_array_modifier(yyvsp[-1].u.expr);
+;
+    break;}
+case 175:
+#line 1377 "cppBison.yxx"
+{
+  yyval.u.inst_ident = new CPPInstanceIdentifier((CPPIdentifier *)NULL);
+;
+    break;}
+case 176:
+#line 1381 "cppBison.yxx"
+{
+  yyval.u.inst_ident = new CPPInstanceIdentifier(yyvsp[0].u.identifier);
+;
+    break;}
+case 177:
+#line 1385 "cppBison.yxx"
+{
+  yyval.u.inst_ident = new CPPInstanceIdentifier(yyvsp[0].u.identifier);
+;
+    break;}
+case 178:
+#line 1389 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[0].u.inst_ident;
+  yyval.u.inst_ident->add_modifier(IIT_const);
+;
+    break;}
+case 179:
+#line 1394 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[0].u.inst_ident;
+  yyval.u.inst_ident->add_modifier(IIT_pointer);
+;
+    break;}
+case 180:
+#line 1399 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[0].u.inst_ident;
+  yyval.u.inst_ident->add_modifier(IIT_reference);
+;
+    break;}
+case 181:
+#line 1404 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[0].u.inst_ident;
+  yyval.u.inst_ident->add_scoped_pointer_modifier(yyvsp[-2].u.identifier);
+;
+    break;}
+case 182:
+#line 1409 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[-3].u.inst_ident;
+  yyval.u.inst_ident->add_array_modifier(yyvsp[-1].u.expr);
+;
+    break;}
+case 183:
+#line 1414 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[-5].u.inst_ident;
+  yyval.u.inst_ident->add_modifier(IIT_paren);
+  yyval.u.inst_ident->add_func_modifier(yyvsp[-2].u.param_list, yyvsp[0].u.integer);
+;
+    break;}
+case 184:
+#line 1423 "cppBison.yxx"
+{
+  yyval.u.inst_ident = new CPPInstanceIdentifier((CPPIdentifier *)NULL);
+;
+    break;}
+case 185:
+#line 1427 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[0].u.inst_ident;
+  yyval.u.inst_ident->add_modifier(IIT_const);
+;
+    break;}
+case 186:
+#line 1432 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[0].u.inst_ident;
+  yyval.u.inst_ident->add_modifier(IIT_pointer);
+;
+    break;}
+case 187:
+#line 1437 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[0].u.inst_ident;
+  yyval.u.inst_ident->add_modifier(IIT_reference);
+;
+    break;}
+case 188:
+#line 1442 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[0].u.inst_ident;
+  yyval.u.inst_ident->add_scoped_pointer_modifier(yyvsp[-2].u.identifier);
+;
+    break;}
+case 189:
+#line 1447 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[-3].u.inst_ident;
+  yyval.u.inst_ident->add_array_modifier(yyvsp[-1].u.expr);
+;
+    break;}
+case 190:
+#line 1452 "cppBison.yxx"
+{
+  yyval.u.inst_ident = yyvsp[-5].u.inst_ident;
+  yyval.u.inst_ident->add_modifier(IIT_paren);
+  yyval.u.inst_ident->add_func_modifier(yyvsp[-2].u.param_list, yyvsp[0].u.integer);
+;
+    break;}
+case 191:
+#line 1461 "cppBison.yxx"
+{
+  yyval.u.type = CPPType::new_type(yyvsp[0].u.simple_type);
+;
+    break;}
+case 192:
+#line 1465 "cppBison.yxx"
+{
+  yyval.u.type = yyvsp[0].u.identifier->find_type(current_scope, global_scope, false, current_lexer);
+  assert(yyval.u.type != NULL);
+;
+    break;}
+case 193:
+#line 1470 "cppBison.yxx"
+{
+  yyval.u.type = CPPType::new_type(new CPPTBDType(yyvsp[0].u.identifier));
+;
+    break;}
+case 194:
+#line 1474 "cppBison.yxx"
+{
+  yyval.u.type = CPPType::new_type(yyvsp[0].u.struct_type);
+;
+    break;}
+case 195:
+#line 1478 "cppBison.yxx"
+{
+  yyval.u.type = CPPType::new_type(yyvsp[0].u.struct_type);
+;
+    break;}
+case 196:
+#line 1482 "cppBison.yxx"
+{
+  yyval.u.type = CPPType::new_type(yyvsp[0].u.enum_type);
+;
+    break;}
+case 197:
+#line 1486 "cppBison.yxx"
+{
+  yyval.u.type = CPPType::new_type(yyvsp[0].u.enum_type);
+;
+    break;}
+case 198:
+#line 1490 "cppBison.yxx"
+{
+  CPPType *type = yyvsp[0].u.identifier->find_type(current_scope, global_scope, false, current_lexer);
+  if (type != NULL) {
+    yyval.u.type = type;
+  } else {
+    CPPExtensionType *et = 
+      CPPType::new_type(new CPPExtensionType(yyvsp[-1].u.extension_enum, yyvsp[0].u.identifier, current_scope, yylsp[-1].file))
+      ->as_extension_type();
+    CPPScope *scope = yyvsp[0].u.identifier->get_scope(current_scope, global_scope);
+    if (scope != NULL) {
+      scope->define_extension_type(et);
+    }
+    yyval.u.type = et;
+  }
+;
+    break;}
+case 199:
+#line 1506 "cppBison.yxx"
+{
+  CPPType *type = yyvsp[0].u.identifier->find_type(current_scope, global_scope, false, current_lexer);
+  if (type != NULL) {
+    yyval.u.type = type;
+  } else {
+    CPPExtensionType *et = 
+      CPPType::new_type(new CPPExtensionType(yyvsp[-1].u.extension_enum, yyvsp[0].u.identifier, current_scope, yylsp[-1].file))
+      ->as_extension_type();
+    CPPScope *scope = yyvsp[0].u.identifier->get_scope(current_scope, global_scope);
+    if (scope != NULL) {
+      scope->define_extension_type(et);
+    }
+    yyval.u.type = et;
+  }
+;
+    break;}
+case 200:
+#line 1525 "cppBison.yxx"
+{
+  yyval.u.decl = CPPType::new_type(yyvsp[0].u.simple_type);
+;
+    break;}
+case 201:
+#line 1529 "cppBison.yxx"
+{
+  yyval.u.decl = yyvsp[0].u.identifier->find_type(current_scope, global_scope, false, current_lexer);
+  assert(yyval.u.decl != NULL);
+;
+    break;}
+case 202:
+#line 1534 "cppBison.yxx"
+{
+  yyval.u.decl = CPPType::new_type(new CPPTBDType(yyvsp[0].u.identifier));
+;
+    break;}
+case 203:
+#line 1538 "cppBison.yxx"
+{
+  yyval.u.decl = CPPType::new_type(yyvsp[0].u.struct_type);
+;
+    break;}
+case 204:
+#line 1542 "cppBison.yxx"
+{
+  yyval.u.decl = new CPPTypeDeclaration(CPPType::new_type(yyvsp[0].u.struct_type));
+;
+    break;}
+case 205:
+#line 1546 "cppBison.yxx"
+{
+  yyval.u.decl = CPPType::new_type(yyvsp[0].u.enum_type);
+;
+    break;}
+case 206:
+#line 1550 "cppBison.yxx"
+{
+  yyval.u.decl = new CPPTypeDeclaration(CPPType::new_type(yyvsp[0].u.enum_type));
+;
+    break;}
+case 207:
+#line 1554 "cppBison.yxx"
+{
+  CPPType *type = yyvsp[0].u.identifier->find_type(current_scope, global_scope, false, current_lexer);
+  if (type != NULL) {
+    yyval.u.decl = type;
+  } else {
+    CPPExtensionType *et = 
+      CPPType::new_type(new CPPExtensionType(yyvsp[-1].u.extension_enum, yyvsp[0].u.identifier, current_scope, yylsp[-1].file))
+      ->as_extension_type();
+    CPPScope *scope = yyvsp[0].u.identifier->get_scope(current_scope, global_scope);
+    if (scope != NULL) {
+      scope->define_extension_type(et);
+    }
+    yyval.u.decl = et;
+  }
+;
+    break;}
+case 208:
+#line 1570 "cppBison.yxx"
+{
+  CPPType *type = yyvsp[0].u.identifier->find_type(current_scope, global_scope, false, current_lexer);
+  if (type != NULL) {
+    yyval.u.decl = type;
+  } else {
+    CPPExtensionType *et = 
+      CPPType::new_type(new CPPExtensionType(yyvsp[-1].u.extension_enum, yyvsp[0].u.identifier, current_scope, yylsp[-1].file))
+      ->as_extension_type();
+    CPPScope *scope = yyvsp[0].u.identifier->get_scope(current_scope, global_scope);
+    if (scope != NULL) {
+      scope->define_extension_type(et);
+    }
+    yyval.u.decl = et;
+  }
+;
+    break;}
+case 209:
+#line 1589 "cppBison.yxx"
+{
+  yyval.u.type = CPPType::new_type(yyvsp[0].u.simple_type);
+;
+    break;}
+case 210:
+#line 1593 "cppBison.yxx"
+{
+  yyval.u.type = yyvsp[0].u.identifier->find_type(current_scope, global_scope, false, current_lexer);
+  assert(yyval.u.type != NULL);
+;
+    break;}
+case 211:
+#line 1598 "cppBison.yxx"
+{
+  yyval.u.type = CPPType::new_type(new CPPTBDType(yyvsp[0].u.identifier));
+;
+    break;}
+case 212:
+#line 1602 "cppBison.yxx"
+{
+  CPPType *type = yyvsp[0].u.identifier->find_type(current_scope, global_scope, false, current_lexer);
+  if (type != NULL) {
+    yyval.u.type = type;
+  } else {
+    CPPExtensionType *et = 
+      CPPType::new_type(new CPPExtensionType(yyvsp[-1].u.extension_enum, yyvsp[0].u.identifier, current_scope, yylsp[-1].file))
+      ->as_extension_type();
+    CPPScope *scope = yyvsp[0].u.identifier->get_scope(current_scope, global_scope);
+    if (scope != NULL) {
+      scope->define_extension_type(et);
+    }
+    yyval.u.type = et;
+  }
+;
+    break;}
+case 213:
+#line 1618 "cppBison.yxx"
+{
+  CPPType *type = yyvsp[0].u.identifier->find_type(current_scope, global_scope, false, current_lexer);
+  if (type != NULL) {
+    yyval.u.type = type;
+  } else {
+    CPPExtensionType *et = 
+      CPPType::new_type(new CPPExtensionType(yyvsp[-1].u.extension_enum, yyvsp[0].u.identifier, current_scope, yylsp[-1].file))
+      ->as_extension_type();
+    CPPScope *scope = yyvsp[0].u.identifier->get_scope(current_scope, global_scope);
+    if (scope != NULL) {
+      scope->define_extension_type(et);
+    }
+    yyval.u.type = et;
+  }
+;
+    break;}
+case 214:
+#line 1637 "cppBison.yxx"
+{
+  CPPInstance *inst = new CPPInstance(yyvsp[-1].u.type, yyvsp[0].u.inst_ident, 0, yylsp[-1].file);
+  yyval.u.type = inst->_type;
+  delete inst;
+;
+    break;}
+case 215:
+#line 1643 "cppBison.yxx"
+{
+  yyvsp[0].u.inst_ident->add_modifier(IIT_const);
+  CPPInstance *inst = new CPPInstance(yyvsp[-1].u.type, yyvsp[0].u.inst_ident, 0, yylsp[-2].file);
+  yyval.u.type = inst->_type;
+  delete inst;
+;
+    break;}
+case 216:
+#line 1653 "cppBison.yxx"
+{
+  CPPVisibility starting_vis = 
+  (yyvsp[-1].u.extension_enum == CPPExtensionType::T_class) ? V_private : V_public;
+  
+  CPPScope *new_scope = new CPPScope(current_scope, CPPNameComponent("anon"),
+                                     starting_vis);
+  CPPStructType *st = new CPPStructType(yyvsp[-1].u.extension_enum, NULL, current_scope,
+                                        new_scope, yylsp[-1].file);
+  new_scope->set_struct_type(st);
+
+  push_scope(new_scope);
+  push_struct(st);
+;
+    break;}
+case 217:
+#line 1667 "cppBison.yxx"
+{
+  yyval.u.struct_type = current_struct;
+  current_struct->_incomplete = false;
+  pop_struct();
+  pop_scope();
+;
+    break;}
+case 218:
+#line 1677 "cppBison.yxx"
+{
+  CPPVisibility starting_vis = 
+  (yyvsp[-1].u.extension_enum == CPPExtensionType::T_class) ? V_private : V_public;
+
+  CPPScope *scope = yyvsp[0].u.identifier->get_scope(current_scope, global_scope, current_lexer);
+  if (scope == NULL) {
+    scope = current_scope;
+  }
+  CPPScope *new_scope = new CPPScope(scope, yyvsp[0].u.identifier->_names.back(),
+                                     starting_vis);
+
+  CPPStructType *st = new CPPStructType(yyvsp[-1].u.extension_enum, yyvsp[0].u.identifier, current_scope,
+                                        new_scope, yylsp[-1].file);
+  new_scope->set_struct_type(st);
+  current_scope->define_extension_type(st);
+  
+  push_scope(new_scope);
+  push_struct(st);
+;
+    break;}
+case 219:
+#line 1697 "cppBison.yxx"
+{
+  yyval.u.struct_type = current_struct;
+  current_struct->_incomplete = false;
+  pop_struct();
+  pop_scope();
+;
+    break;}
+case 224:
+#line 1717 "cppBison.yxx"
+{
+  current_struct->append_derivation(yyvsp[0].u.type, V_public, false);
+;
+    break;}
+case 225:
+#line 1721 "cppBison.yxx"
+{
+  current_struct->append_derivation(yyvsp[0].u.type, V_protected, false);
+;
+    break;}
+case 226:
+#line 1725 "cppBison.yxx"
+{
+  current_struct->append_derivation(yyvsp[0].u.type, V_private, false);
+;
+    break;}
+case 227:
+#line 1729 "cppBison.yxx"
+{
+  current_struct->append_derivation(yyvsp[0].u.type, V_public, true);
+;
+    break;}
+case 228:
+#line 1733 "cppBison.yxx"
+{
+  current_struct->append_derivation(yyvsp[0].u.type, V_protected, true);
+;
+    break;}
+case 229:
+#line 1737 "cppBison.yxx"
+{
+  current_struct->append_derivation(yyvsp[0].u.type, V_private, true);
+;
+    break;}
+case 230:
+#line 1741 "cppBison.yxx"
+{
+  current_struct->append_derivation(yyvsp[0].u.type, V_public, true);
+;
+    break;}
+case 231:
+#line 1745 "cppBison.yxx"
+{
+  current_struct->append_derivation(yyvsp[0].u.type, V_protected, true);
+;
+    break;}
+case 232:
+#line 1749 "cppBison.yxx"
+{
+  current_struct->append_derivation(yyvsp[0].u.type, V_private, true);
+;
+    break;}
+case 233:
+#line 1756 "cppBison.yxx"
+{
+  current_enum = new CPPEnumType(NULL, current_scope, yylsp[-1].file);
+;
+    break;}
+case 234:
+#line 1760 "cppBison.yxx"
+{
+  yyval.u.enum_type = current_enum;
+  current_enum = NULL;
+;
+    break;}
+case 235:
+#line 1768 "cppBison.yxx"
+{
+  current_enum = new CPPEnumType(yyvsp[-1].u.identifier, current_scope, yylsp[-2].file);
+;
+    break;}
+case 236:
+#line 1772 "cppBison.yxx"
+{
+  yyval.u.enum_type = current_enum;
+  current_enum = NULL;
+;
+    break;}
+case 240:
+#line 1786 "cppBison.yxx"
+{
+  assert(current_enum != NULL);
+  current_enum->add_element(yyvsp[0].u.identifier->get_simple_name(), current_scope);
+;
+    break;}
+case 241:
+#line 1791 "cppBison.yxx"
+{
+  assert(current_enum != NULL);
+  current_enum->add_element(yyvsp[-2].u.identifier->get_simple_name(), current_scope, yyvsp[0].u.expr);
+;
+    break;}
+case 242:
+#line 1796 "cppBison.yxx"
+{
+  assert(current_enum != NULL);
+  current_enum->add_element(yyvsp[0].u.identifier->get_simple_name(), current_scope);
+;
+    break;}
+case 243:
+#line 1801 "cppBison.yxx"
+{
+  assert(current_enum != NULL);
+  current_enum->add_element(yyvsp[-2].u.identifier->get_simple_name(), current_scope, yyvsp[0].u.expr);
+;
+    break;}
+case 244:
+#line 1809 "cppBison.yxx"
+{
+  yyval.u.extension_enum = CPPExtensionType::T_enum;
+;
+    break;}
+case 245:
+#line 1816 "cppBison.yxx"
+{
+  yyval.u.extension_enum = CPPExtensionType::T_class;
+;
+    break;}
+case 246:
+#line 1820 "cppBison.yxx"
+{
+  yyval.u.extension_enum = CPPExtensionType::T_struct;
+;
+    break;}
+case 247:
+#line 1824 "cppBison.yxx"
+{
+  yyval.u.extension_enum = CPPExtensionType::T_union;
+;
+    break;}
+case 248:
+#line 1831 "cppBison.yxx"
+{
+  CPPScope *scope = yyvsp[-1].u.identifier->find_scope(current_scope, global_scope, current_lexer);
+  if (scope == NULL) {
+    // This must be a new namespace declaration.
+    CPPScope *parent_scope = 
+      yyvsp[-1].u.identifier->get_scope(current_scope, global_scope, current_lexer);
+    if (parent_scope == NULL) {
+      parent_scope = current_scope;
+    }
+    scope = new CPPScope(parent_scope, yyvsp[-1].u.identifier->_names.back(), V_public);
+  }
+
+  CPPNamespace *nspace = new CPPNamespace(yyvsp[-1].u.identifier, scope, yylsp[-2].file);
+  current_scope->add_declaration(nspace, global_scope, current_lexer, yylsp[-2]);
+  current_scope->define_namespace(nspace);
+  push_scope(scope);
+;
+    break;}
+case 249:
+#line 1849 "cppBison.yxx"
+{
+  pop_scope();
+;
+    break;}
+case 251:
+#line 1857 "cppBison.yxx"
+{
+  CPPUsing *using_decl = new CPPUsing(yyvsp[0].u.identifier, false, yylsp[-1].file);
+  current_scope->add_declaration(using_decl, global_scope, current_lexer, yylsp[-1]);
+  current_scope->add_using(using_decl, global_scope, current_lexer);
+;
+    break;}
+case 252:
+#line 1863 "cppBison.yxx"
+{
+  CPPUsing *using_decl = new CPPUsing(yyvsp[0].u.identifier, true, yylsp[-2].file);
+  current_scope->add_declaration(using_decl, global_scope, current_lexer, yylsp[-2]);
+  current_scope->add_using(using_decl, global_scope, current_lexer);
+;
+    break;}
+case 256:
+#line 1878 "cppBison.yxx"
+{
+  yyval.u.simple_type = new CPPSimpleType(CPPSimpleType::T_bool);
+;
+    break;}
+case 257:
+#line 1882 "cppBison.yxx"
+{
+  yyval.u.simple_type = new CPPSimpleType(CPPSimpleType::T_char);
+;
+    break;}
+case 258:
+#line 1886 "cppBison.yxx"
+{
+  yyval.u.simple_type = new CPPSimpleType(CPPSimpleType::T_int,
+                         CPPSimpleType::F_short);
+;
+    break;}
+case 259:
+#line 1891 "cppBison.yxx"
+{
+  yyval.u.simple_type = new CPPSimpleType(CPPSimpleType::T_int,
+                         CPPSimpleType::F_long);
+;
+    break;}
+case 260:
+#line 1896 "cppBison.yxx"
+{
+  yyval.u.simple_type = new CPPSimpleType(CPPSimpleType::T_int,
+                         CPPSimpleType::F_longlong);
+;
+    break;}
+case 261:
+#line 1901 "cppBison.yxx"
+{
+  yyval.u.simple_type = new CPPSimpleType(CPPSimpleType::T_int,
+                         CPPSimpleType::F_unsigned);
+;
+    break;}
+case 262:
+#line 1906 "cppBison.yxx"
+{
+  yyval.u.simple_type = new CPPSimpleType(CPPSimpleType::T_int,
+                         CPPSimpleType::F_signed);
+;
+    break;}
+case 263:
+#line 1911 "cppBison.yxx"
+{
+  yyval.u.simple_type = new CPPSimpleType(CPPSimpleType::T_int);
+;
+    break;}
+case 264:
+#line 1915 "cppBison.yxx"
+{
+  yyval.u.simple_type = yyvsp[0].u.simple_type;
+  yyval.u.simple_type->_flags |= CPPSimpleType::F_short;
+;
+    break;}
+case 265:
+#line 1920 "cppBison.yxx"
+{
+  yyval.u.simple_type = yyvsp[0].u.simple_type;
+  if (yyval.u.simple_type->_flags & CPPSimpleType::F_long) {
+    yyval.u.simple_type->_flags |= CPPSimpleType::F_longlong;
+  } else {
+    yyval.u.simple_type->_flags |= CPPSimpleType::F_long;
+  }
+;
+    break;}
+case 266:
+#line 1929 "cppBison.yxx"
+{
+  yyval.u.simple_type = yyvsp[0].u.simple_type;
+  yyval.u.simple_type->_flags |= CPPSimpleType::F_unsigned;
+;
+    break;}
+case 267:
+#line 1934 "cppBison.yxx"
+{
+  yyval.u.simple_type = yyvsp[0].u.simple_type;
+  yyval.u.simple_type->_flags |= CPPSimpleType::F_signed;
+;
+    break;}
+case 268:
+#line 1942 "cppBison.yxx"
+{
+  yyval.u.simple_type = new CPPSimpleType(CPPSimpleType::T_float);
+;
+    break;}
+case 269:
+#line 1946 "cppBison.yxx"
+{
+  yyval.u.simple_type = new CPPSimpleType(CPPSimpleType::T_float,
+                         CPPSimpleType::F_long);
+;
+    break;}
+case 270:
+#line 1951 "cppBison.yxx"
+{
+  yyval.u.simple_type = new CPPSimpleType(CPPSimpleType::T_double);
+;
+    break;}
+case 271:
+#line 1955 "cppBison.yxx"
+{
+  yyval.u.simple_type = new CPPSimpleType(CPPSimpleType::T_float,
+                         CPPSimpleType::F_longlong);
+;
+    break;}
+case 272:
+#line 1960 "cppBison.yxx"
+{
+  yyval.u.simple_type = new CPPSimpleType(CPPSimpleType::T_double,
+                         CPPSimpleType::F_long);
+;
+    break;}
+case 273:
+#line 1968 "cppBison.yxx"
+{
+  yyval.u.simple_type = new CPPSimpleType(CPPSimpleType::T_void);
+;
+    break;}
+case 274:
+#line 1977 "cppBison.yxx"
+{
+  current_lexer->_resolve_identifiers = false;
+;
+    break;}
+case 275:
+#line 1981 "cppBison.yxx"
+{
+  current_lexer->_resolve_identifiers = true;
+;
+    break;}
+case 278:
+#line 1993 "cppBison.yxx"
+{
+;
+    break;}
+case 279:
+#line 1996 "cppBison.yxx"
+{
+;
+    break;}
+case 280:
+#line 1999 "cppBison.yxx"
+{
+;
+    break;}
+case 281:
+#line 2002 "cppBison.yxx"
+{
+;
+    break;}
+case 282:
+#line 2005 "cppBison.yxx"
+{
+;
+    break;}
+case 283:
+#line 2008 "cppBison.yxx"
+{
+;
+    break;}
+case 284:
+#line 2011 "cppBison.yxx"
+{
+;
+    break;}
+case 285:
+#line 2014 "cppBison.yxx"
+{
+;
+    break;}
+case 358:
+#line 2034 "cppBison.yxx"
+{
+;
+    break;}
+case 382:
+#line 2043 "cppBison.yxx"
+{
+  yyval.u.expr = (CPPExpression *)NULL;
+;
+    break;}
+case 383:
+#line 2047 "cppBison.yxx"
+{
+  yyval.u.expr = yyvsp[0].u.expr;
+;
+    break;}
+case 384:
+#line 2054 "cppBison.yxx"
+{
+  yyval.u.expr = (CPPExpression *)NULL;
+;
+    break;}
+case 385:
+#line 2058 "cppBison.yxx"
+{
+  yyval.u.expr = yyvsp[0].u.expr;
+;
+    break;}
+case 386:
+#line 2065 "cppBison.yxx"
+{
+  yyval.u.expr = yyvsp[0].u.expr;
+;
+    break;}
+case 387:
+#line 2069 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(',', yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 388:
+#line 2076 "cppBison.yxx"
+{
+  yyval.u.expr = yyvsp[0].u.expr;
+;
+    break;}
+case 389:
+#line 2080 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(CPPExpression::typecast_op(yyvsp[-2].u.type, yyvsp[0].u.expr));
+;
+    break;}
+case 390:
+#line 2084 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(CPPExpression::typecast_op(yyvsp[-4].u.type, yyvsp[-1].u.expr));
+;
+    break;}
+case 391:
+#line 2088 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(CPPExpression::typecast_op(yyvsp[-4].u.type, yyvsp[-1].u.expr));
+;
+    break;}
+case 392:
+#line 2092 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(CPPExpression::sizeof_func(yyvsp[-1].u.type));
+;
+    break;}
+case 393:
+#line 2096 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(UNARY_NOT, yyvsp[0].u.expr);
+;
+    break;}
+case 394:
+#line 2100 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(UNARY_NEGATE, yyvsp[0].u.expr);
+;
+    break;}
+case 395:
+#line 2104 "cppBison.yxx"
+{
+  if (yyvsp[0].u.expr->_type == CPPExpression::T_integer) {
+    yyval.u.expr = yyvsp[0].u.expr;
+    yyval.u.expr->_u._integer = -yyval.u.expr->_u._integer;
+  } else if (yyvsp[0].u.expr->_type == CPPExpression::T_real) {
+    yyval.u.expr = yyvsp[0].u.expr;
+    yyval.u.expr->_u._real = -yyval.u.expr->_u._real;
+  } else {
+    yyval.u.expr = new CPPExpression(UNARY_MINUS, yyvsp[0].u.expr);
+  }
+;
+    break;}
+case 396:
+#line 2116 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(UNARY_STAR, yyvsp[0].u.expr);
+;
+    break;}
+case 397:
+#line 2120 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(UNARY_REF, yyvsp[0].u.expr);
+;
+    break;}
+case 398:
+#line 2124 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('*', yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 399:
+#line 2128 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('/', yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 400:
+#line 2132 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('%', yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 401:
+#line 2136 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('+', yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 402:
+#line 2140 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('-', yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 403:
+#line 2144 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('|', yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 404:
+#line 2148 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('&', yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 405:
+#line 2152 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(OROR, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 406:
+#line 2156 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(ANDAND, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 407:
+#line 2160 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(EQCOMPARE, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 408:
+#line 2164 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(NECOMPARE, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 409:
+#line 2168 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(LECOMPARE, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 410:
+#line 2172 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(GECOMPARE, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 411:
+#line 2176 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(LSHIFT, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 412:
+#line 2180 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(RSHIFT, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 413:
+#line 2184 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('?', yyvsp[-4].u.expr, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 414:
+#line 2188 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('[', yyvsp[-3].u.expr, yyvsp[-1].u.expr);
+;
+    break;}
+case 415:
+#line 2192 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('f', yyvsp[-3].u.expr, yyvsp[-1].u.expr);
+;
+    break;}
+case 416:
+#line 2196 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('f', yyvsp[-2].u.expr);
+;
+    break;}
+case 417:
+#line 2200 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('.', yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 418:
+#line 2204 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(POINTSAT, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 419:
+#line 2208 "cppBison.yxx"
+{
+  yyval.u.expr = yyvsp[-1].u.expr;
+;
+    break;}
+case 420:
+#line 2216 "cppBison.yxx"
+{
+  yyval.u.expr = yyvsp[0].u.expr;
+;
+    break;}
+case 421:
+#line 2220 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(CPPExpression::typecast_op(yyvsp[-2].u.type, yyvsp[0].u.expr));
+;
+    break;}
+case 422:
+#line 2224 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(CPPExpression::typecast_op(yyvsp[-4].u.type, yyvsp[-1].u.expr));
+;
+    break;}
+case 423:
+#line 2228 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(CPPExpression::typecast_op(yyvsp[-4].u.type, yyvsp[-1].u.expr));
+;
+    break;}
+case 424:
+#line 2232 "cppBison.yxx"
+{
+  // A constructor call.
+  CPPType *type = yyvsp[-3].u.identifier->find_type(current_scope, global_scope, false, current_lexer);
+  assert(type != NULL);
+  yyval.u.expr = new CPPExpression(CPPExpression::construct_op(type, yyvsp[-1].u.expr));
+;
+    break;}
+case 425:
+#line 2239 "cppBison.yxx"
+{
+  CPPType *type = 
+    CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_int));
+  yyval.u.expr = new CPPExpression(CPPExpression::construct_op(type, yyvsp[-1].u.expr));
+;
+    break;}
+case 426:
+#line 2245 "cppBison.yxx"
+{
+  CPPType *type = 
+    CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_char));
+  yyval.u.expr = new CPPExpression(CPPExpression::construct_op(type, yyvsp[-1].u.expr));
+;
+    break;}
+case 427:
+#line 2251 "cppBison.yxx"
+{
+  CPPType *type = 
+    CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_bool));
+  yyval.u.expr = new CPPExpression(CPPExpression::construct_op(type, yyvsp[-1].u.expr));
+;
+    break;}
+case 428:
+#line 2257 "cppBison.yxx"
+{
+  CPPType *type = 
+    CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_int,
+                                        CPPSimpleType::F_short));
+  yyval.u.expr = new CPPExpression(CPPExpression::construct_op(type, yyvsp[-1].u.expr));
+;
+    break;}
+case 429:
+#line 2264 "cppBison.yxx"
+{
+  CPPType *type = 
+    CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_int,
+                                        CPPSimpleType::F_long));
+  yyval.u.expr = new CPPExpression(CPPExpression::construct_op(type, yyvsp[-1].u.expr));
+;
+    break;}
+case 430:
+#line 2271 "cppBison.yxx"
+{
+  CPPType *type = 
+    CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_int,
+                                        CPPSimpleType::F_unsigned));
+  yyval.u.expr = new CPPExpression(CPPExpression::construct_op(type, yyvsp[-1].u.expr));
+;
+    break;}
+case 431:
+#line 2278 "cppBison.yxx"
+{
+  CPPType *type = 
+    CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_int,
+                                        CPPSimpleType::F_signed));
+  yyval.u.expr = new CPPExpression(CPPExpression::construct_op(type, yyvsp[-1].u.expr));
+;
+    break;}
+case 432:
+#line 2285 "cppBison.yxx"
+{
+  CPPType *type = 
+    CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_float));
+  yyval.u.expr = new CPPExpression(CPPExpression::construct_op(type, yyvsp[-1].u.expr));
+;
+    break;}
+case 433:
+#line 2291 "cppBison.yxx"
+{
+  CPPType *type = 
+    CPPType::new_type(new CPPSimpleType(CPPSimpleType::T_double));
+  yyval.u.expr = new CPPExpression(CPPExpression::construct_op(type, yyvsp[-1].u.expr));
+;
+    break;}
+case 434:
+#line 2297 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(CPPExpression::sizeof_func(yyvsp[-1].u.type));
+;
+    break;}
+case 435:
+#line 2301 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(CPPExpression::new_op(yyvsp[0].u.type));
+;
+    break;}
+case 436:
+#line 2305 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(CPPExpression::new_op(yyvsp[-3].u.type, yyvsp[-1].u.expr));
+;
+    break;}
+case 437:
+#line 2309 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(UNARY_NOT, yyvsp[0].u.expr);
+;
+    break;}
+case 438:
+#line 2313 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(UNARY_NEGATE, yyvsp[0].u.expr);
+;
+    break;}
+case 439:
+#line 2317 "cppBison.yxx"
+{
+  if (yyvsp[0].u.expr->_type == CPPExpression::T_integer) {
+    yyval.u.expr = yyvsp[0].u.expr;
+    yyval.u.expr->_u._integer = -yyval.u.expr->_u._integer;
+  } else if (yyvsp[0].u.expr->_type == CPPExpression::T_real) {
+    yyval.u.expr = yyvsp[0].u.expr;
+    yyval.u.expr->_u._real = -yyval.u.expr->_u._real;
+  } else {
+    yyval.u.expr = new CPPExpression(UNARY_MINUS, yyvsp[0].u.expr);
+  }
+;
+    break;}
+case 440:
+#line 2329 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(UNARY_STAR, yyvsp[0].u.expr);
+;
+    break;}
+case 441:
+#line 2333 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(UNARY_REF, yyvsp[0].u.expr);
+;
+    break;}
+case 442:
+#line 2337 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('*', yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 443:
+#line 2341 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('/', yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 444:
+#line 2345 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('%', yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 445:
+#line 2349 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('+', yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 446:
+#line 2353 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('-', yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 447:
+#line 2357 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('|', yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 448:
+#line 2361 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('&', yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 449:
+#line 2365 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(OROR, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 450:
+#line 2369 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(ANDAND, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 451:
+#line 2373 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(EQCOMPARE, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 452:
+#line 2377 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(NECOMPARE, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 453:
+#line 2381 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(LECOMPARE, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 454:
+#line 2385 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(GECOMPARE, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 455:
+#line 2389 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('<', yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 456:
+#line 2393 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('>', yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 457:
+#line 2397 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(LSHIFT, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 458:
+#line 2401 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(RSHIFT, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 459:
+#line 2405 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('?', yyvsp[-4].u.expr, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 460:
+#line 2409 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('[', yyvsp[-3].u.expr, yyvsp[-1].u.expr);
+;
+    break;}
+case 461:
+#line 2413 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('f', yyvsp[-3].u.expr, yyvsp[-1].u.expr);
+;
+    break;}
+case 462:
+#line 2417 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('f', yyvsp[-2].u.expr);
+;
+    break;}
+case 463:
+#line 2421 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression('.', yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 464:
+#line 2425 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(POINTSAT, yyvsp[-2].u.expr, yyvsp[0].u.expr);
+;
+    break;}
+case 465:
+#line 2429 "cppBison.yxx"
+{
+  yyval.u.expr = yyvsp[-1].u.expr;
+;
+    break;}
+case 466:
+#line 2436 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(yyvsp[0].u.integer);
+;
+    break;}
+case 467:
+#line 2440 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(true);
+;
+    break;}
+case 468:
+#line 2444 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(false);
+;
+    break;}
+case 469:
+#line 2448 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(yyvsp[0].u.integer);
+;
+    break;}
+case 470:
+#line 2452 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(yyvsp[0].u.real);
+;
+    break;}
+case 471:
+#line 2456 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(yyvsp[0].str);
+;
+    break;}
+case 472:
+#line 2460 "cppBison.yxx"
+{
+  yyval.u.expr = new CPPExpression(yyvsp[0].u.identifier, current_scope, global_scope, current_lexer);
+;
+    break;}
+case 473:
+#line 2467 "cppBison.yxx"
+{
+  CPPType *type = yyvsp[0].u.identifier->find_type(current_scope, global_scope, true);
+  if (type == NULL) {
+    type = CPPType::new_type(new CPPTBDType(yyvsp[0].u.identifier));
+  }
+  yyval.u.type = type;
+;
+    break;}
+case 474:
+#line 2475 "cppBison.yxx"
+{
+  CPPType *type = yyvsp[0].u.identifier->find_type(current_scope, global_scope, true, current_lexer);
+  if (type == NULL) {
+    type = CPPType::new_type(new CPPTBDType(yyvsp[0].u.identifier));
+  }
+  yyval.u.type = type;
+;
+    break;}
+case 475:
+#line 2483 "cppBison.yxx"
+{
+  yyval.u.type = CPPType::new_type(new CPPTBDType(yyvsp[0].u.identifier));
+;
+    break;}
+case 476:
+#line 2506 "cppBison.yxx"
+{
+  yyval.u.identifier = yyvsp[0].u.identifier;
+;
+    break;}
+case 477:
+#line 2510 "cppBison.yxx"
+{
+  yyval.u.identifier = yyvsp[0].u.identifier;
+;
+    break;}
+case 478:
+#line 2517 "cppBison.yxx"
+{
+  yyval.str = yyvsp[0].str;
+;
+    break;}
+case 479:
+#line 2521 "cppBison.yxx"
+{
+  yyval.str = yyvsp[-1].str + yyvsp[0].str;
+;
+    break;}
+}
+   /* the action file gets copied in in place of this dollarsign */
+#line 543 "/usr/lib/bison.simple"
+
+  yyvsp -= yylen;
+  yyssp -= yylen;
+#ifdef YYLSP_NEEDED
+  yylsp -= yylen;
+#endif
+
+#if YYDEBUG != 0
+  if (yydebug)
+    {
+      short *ssp1 = yyss - 1;
+      fprintf (stderr, "state stack now");
+      while (ssp1 != yyssp)
+	fprintf (stderr, " %d", *++ssp1);
+      fprintf (stderr, "\n");
+    }
+#endif
+
+  *++yyvsp = yyval;
+
+#ifdef YYLSP_NEEDED
+  yylsp++;
+  if (yylen == 0)
+    {
+      yylsp->first_line = yylloc.first_line;
+      yylsp->first_column = yylloc.first_column;
+      yylsp->last_line = (yylsp-1)->last_line;
+      yylsp->last_column = (yylsp-1)->last_column;
+      yylsp->text = 0;
+    }
+  else
+    {
+      yylsp->last_line = (yylsp+yylen-1)->last_line;
+      yylsp->last_column = (yylsp+yylen-1)->last_column;
+    }
+#endif
+
+  /* Now "shift" the result of the reduction.
+     Determine what state that goes to,
+     based on the state we popped back to
+     and the rule number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
+  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTBASE];
+
+  goto yynewstate;
+
+yyerrlab:   /* here on detecting error */
+
+  if (! yyerrstatus)
+    /* If not already recovering from an error, report this error.  */
+    {
+      ++yynerrs;
+
+#ifdef YYERROR_VERBOSE
+      yyn = yypact[yystate];
+
+      if (yyn > YYFLAG && yyn < YYLAST)
+	{
+	  int size = 0;
+	  char *msg;
+	  int x, count;
+
+	  count = 0;
+	  /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
+	  for (x = (yyn < 0 ? -yyn : 0);
+	       x < (sizeof(yytname) / sizeof(char *)); x++)
+	    if (yycheck[x + yyn] == x)
+	      size += strlen(yytname[x]) + 15, count++;
+	  msg = (char *) malloc(size + 15);
+	  if (msg != 0)
+	    {
+	      strcpy(msg, "parse error");
+
+	      if (count < 5)
+		{
+		  count = 0;
+		  for (x = (yyn < 0 ? -yyn : 0);
+		       x < (sizeof(yytname) / sizeof(char *)); x++)
+		    if (yycheck[x + yyn] == x)
+		      {
+			strcat(msg, count == 0 ? ", expecting `" : " or `");
+			strcat(msg, yytname[x]);
+			strcat(msg, "'");
+			count++;
+		      }
+		}
+	      yyerror(msg);
+	      free(msg);
+	    }
+	  else
+	    yyerror ("parse error; also virtual memory exceeded");
+	}
+      else
+#endif /* YYERROR_VERBOSE */
+	yyerror("parse error");
+    }
+
+  goto yyerrlab1;
+yyerrlab1:   /* here on error raised explicitly by an action */
+
+  if (yyerrstatus == 3)
+    {
+      /* if just tried and failed to reuse lookahead token after an error, discard it.  */
+
+      /* return failure if at end of input */
+      if (yychar == YYEOF)
+	YYABORT;
+
+#if YYDEBUG != 0
+      if (yydebug)
+	fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
+#endif
+
+      yychar = YYEMPTY;
+    }
+
+  /* Else will try to reuse lookahead token
+     after shifting the error token.  */
+
+  yyerrstatus = 3;		/* Each real token shifted decrements this */
+
+  goto yyerrhandle;
+
+yyerrdefault:  /* current state does not do anything special for the error token. */
+
+#if 0
+  /* This is wrong; only states that explicitly want error tokens
+     should shift them.  */
+  yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
+  if (yyn) goto yydefault;
+#endif
+
+yyerrpop:   /* pop the current state because it cannot handle the error token */
+
+  if (yyssp == yyss) YYABORT;
+  yyvsp--;
+  yystate = *--yyssp;
+#ifdef YYLSP_NEEDED
+  yylsp--;
+#endif
+
+#if YYDEBUG != 0
+  if (yydebug)
+    {
+      short *ssp1 = yyss - 1;
+      fprintf (stderr, "Error: state stack now");
+      while (ssp1 != yyssp)
+	fprintf (stderr, " %d", *++ssp1);
+      fprintf (stderr, "\n");
+    }
+#endif
+
+yyerrhandle:
+
+  yyn = yypact[yystate];
+  if (yyn == YYFLAG)
+    goto yyerrdefault;
+
+  yyn += YYTERROR;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
+    goto yyerrdefault;
+
+  yyn = yytable[yyn];
+  if (yyn < 0)
+    {
+      if (yyn == YYFLAG)
+	goto yyerrpop;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+  else if (yyn == 0)
+    goto yyerrpop;
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Shifting error token, ");
+#endif
+
+  *++yyvsp = yylval;
+#ifdef YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
+
+  yystate = yyn;
+  goto yynewstate;
+
+ yyacceptlab:
+  /* YYACCEPT comes here.  */
+  if (yyfree_stacks)
+    {
+      free (yyss);
+      free (yyvs);
+#ifdef YYLSP_NEEDED
+      free (yyls);
+#endif
+    }
+  return 0;
+
+ yyabortlab:
+  /* YYABORT comes here.  */
+  if (yyfree_stacks)
+    {
+      free (yyss);
+      free (yyvs);
+#ifdef YYLSP_NEEDED
+      free (yyls);
+#endif
+    }
+  return 1;
+}
+#line 2528 "cppBison.yxx"

+ 115 - 0
dtool/src/cppparser/cppBison.h.prebuilt

@@ -0,0 +1,115 @@
+
+#ifndef YYLTYPE
+typedef
+  struct yyltype
+    {
+      int timestamp;
+      int first_line;
+      int first_column;
+      int last_line;
+      int last_column;
+      char *text;
+   }
+  yyltype;
+
+#define YYLTYPE yyltype
+#endif
+
+#define	REAL	257
+#define	INTEGER	258
+#define	CHAR	259
+#define	STRING	260
+#define	SIMPLE_IDENTIFIER	261
+#define	IDENTIFIER	262
+#define	TYPENAME_IDENTIFIER	263
+#define	SCOPING	264
+#define	TYPEDEFNAME	265
+#define	ELLIPSIS	266
+#define	OROR	267
+#define	ANDAND	268
+#define	EQCOMPARE	269
+#define	NECOMPARE	270
+#define	LECOMPARE	271
+#define	GECOMPARE	272
+#define	LSHIFT	273
+#define	RSHIFT	274
+#define	POINTSAT_STAR	275
+#define	DOT_STAR	276
+#define	UNARY	277
+#define	UNARY_NOT	278
+#define	UNARY_NEGATE	279
+#define	UNARY_MINUS	280
+#define	UNARY_STAR	281
+#define	UNARY_REF	282
+#define	POINTSAT	283
+#define	SCOPE	284
+#define	PLUSPLUS	285
+#define	MINUSMINUS	286
+#define	TIMESEQUAL	287
+#define	DIVIDEEQUAL	288
+#define	MODEQUAL	289
+#define	PLUSEQUAL	290
+#define	MINUSEQUAL	291
+#define	OREQUAL	292
+#define	ANDEQUAL	293
+#define	XOREQUAL	294
+#define	LSHIFTEQUAL	295
+#define	RSHIFTEQUAL	296
+#define	TOKENPASTE	297
+#define	KW_BEGIN_PUBLISH	298
+#define	KW_BOOL	299
+#define	KW_CATCH	300
+#define	KW_CHAR	301
+#define	KW_CLASS	302
+#define	KW_CONST	303
+#define	KW_DELETE	304
+#define	KW_DOUBLE	305
+#define	KW_DYNAMIC_CAST	306
+#define	KW_ELSE	307
+#define	KW_END_PUBLISH	308
+#define	KW_ENUM	309
+#define	KW_EXTERN	310
+#define	KW_EXPLICIT	311
+#define	KW_PUBLISHED	312
+#define	KW_FALSE	313
+#define	KW_FLOAT	314
+#define	KW_FRIEND	315
+#define	KW_FOR	316
+#define	KW_GOTO	317
+#define	KW_IF	318
+#define	KW_INLINE	319
+#define	KW_INT	320
+#define	KW_LONG	321
+#define	KW_LONGLONG	322
+#define	KW_MUTABLE	323
+#define	KW_NAMESPACE	324
+#define	KW_NEW	325
+#define	KW_OPERATOR	326
+#define	KW_PRIVATE	327
+#define	KW_PROTECTED	328
+#define	KW_PUBLIC	329
+#define	KW_REGISTER	330
+#define	KW_RETURN	331
+#define	KW_SHORT	332
+#define	KW_SIGNED	333
+#define	KW_SIZEOF	334
+#define	KW_STATIC	335
+#define	KW_STATIC_CAST	336
+#define	KW_STRUCT	337
+#define	KW_TEMPLATE	338
+#define	KW_THROW	339
+#define	KW_TRUE	340
+#define	KW_TRY	341
+#define	KW_TYPEDEF	342
+#define	KW_TYPENAME	343
+#define	KW_UNION	344
+#define	KW_UNSIGNED	345
+#define	KW_USING	346
+#define	KW_VIRTUAL	347
+#define	KW_VOID	348
+#define	KW_VOLATILE	349
+#define	KW_WHILE	350
+#define	START_CPP	351
+#define	START_CONST_EXPR	352
+#define	START_TYPE	353
+