
/*  A Bison parser, made from parser.y with Bison version GNU Bison version 1.22
  */

#define YYBISON 1  /* Identify Bison output.  */

#define	ERROR	258
#define	DOTNEW	259
#define	ABSTRACT	260
#define	BOOLEAN	261
#define	BREAK	262
#define	BYTE	263
#define	CASE	264
#define	CATCH	265
#define	CHAR	266
#define	CLASS	267
#define	CONTINUE	268
#define	DEFAULT	269
#define	DO	270
#define	DOUBLE	271
#define	ELSE	272
#define	EXTENDS	273
#define	FALSE_TOKEN	274
#define	FINAL	275
#define	FINALLY	276
#define	FLOAT	277
#define	FOR	278
#define	IF	279
#define	IMPLEMENTS	280
#define	IMPORT	281
#define	INSTANCEOF	282
#define	INT	283
#define	INTERFACE	284
#define	LONG	285
#define	NATIVE	286
#define	NULL_TOKEN	287
#define	PACKAGE	288
#define	PRIVATE	289
#define	PROTECTED	290
#define	PUBLIC	291
#define	RETURN	292
#define	SHORT	293
#define	STATIC	294
#define	SUPER	295
#define	SWITCH	296
#define	SYNCHRONIZED	297
#define	THIS	298
#define	THROW	299
#define	THROWS	300
#define	TRANSIENT	301
#define	VOLATILE	302
#define	TRUE_TOKEN	303
#define	TRY	304
#define	VOID	305
#define	WHILE	306
#define	SHIFT_RIGHT_EQUALS	307
#define	FILL_SHIFT_RIGHT_EQUALS	308
#define	SHIFT_LEFT_EQUALS	309
#define	ADD_EQUALS	310
#define	SUB_EQUALS	311
#define	MUL_EQUALS	312
#define	DIV_EQUALS	313
#define	MOD_EQUALS	314
#define	AND_EQUALS	315
#define	XOR_EQUALS	316
#define	OR_EQUALS	317
#define	OR	318
#define	AND	319
#define	EQUAL_COMPARE	320
#define	NOT_EQUAL	321
#define	LTEQ	322
#define	GTEQ	323
#define	BITSHIFT_RIGHT	324
#define	FILL_SHIFT_RIGHT	325
#define	SHIFT_LEFT	326
#define	INCR	327
#define	DECR	328
#define	NEW	329
#define	INT_LITERAL	330
#define	CHARACTER_LITERAL	331
#define	LONG_LITERAL	332
#define	FLOAT_LITERAL	333
#define	DOUBLE_LITERAL	334
#define	SYMBOL	335
#define	STRING_LITERAL	336

#line 1 "parser.y"

// Copyright (c) 1995  David Engberg  All rights reserved
// $Id: parser.y,v 1.18 1997/11/10 00:48:06 geppetto Exp $
#include <map>
#include <stream.h>
#include <cstdlib>
#include <deque>
#include "unicode_string.h"
#include "Compiler.h"
#include "parser_decls.h"
#include "JavaAccessFlags.h"
#include "JavaTypeSignature.h"
#include "JavaFieldSignature.h"
#include "Expression.h"
#include "VariableDeclaration.h"
#include "Statement.h"
#include "IntermediateClass.h"
#include "BinaryExpression.h"
#include "LocalVariableRecord.h"

CCompiler* gCurrentCompiler = 0;
const unicode_char kSymbolDivider = (unicode_char)'/';

CExpression* InterpretSymbolExpression(const unicode_string& symbol);

#ifndef NDEBUG
#ifndef YYDEBUG
#define YYDEBUG 1
#endif
#endif


#line 34 "parser.y"
typedef union {
  unicode_string* text;
  deque<unicode_string>* stringList;
  unsigned long longNumber;   // also used for a single character, etc.
  unsigned long long doubleLong;
  float floatNumber;
  double doubleFloat;
  CJavaAccessFlags* modifiers;
  CJavaTypeSignature* typeSignature;
  CVariableDeclaration* fieldSignature;
  deque<CVariableDeclaration>* fieldList;
  CExpression* expression;
  ExpressionList* expressionList;
  deque<CVariableDeclaration*>* variableList;
  CStatement* statement;
  CCompoundStatement* compoundStatement;
  StatementList* statementList;
  deque<CCatchClause*>* catchList;
  CCatchClause* catchClause;
} YYSTYPE;

#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		584
#define	YYFLAG		-32768
#define	YYNTBASE	106

#define YYTRANSLATE(x) ((unsigned)(x) <= 336 ? yytranslate[x] : 271)

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,    97,     2,     2,     2,    99,   102,     2,    91,
    92,    86,    94,    87,    95,    84,    98,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,    93,    85,   100,
    90,   101,   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,
    82,     2,    83,   103,     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,    88,   104,    89,    96,     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,     2,     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
};

#if YYDEBUG != 0
static const short yyprhs[] = {     0,
     0,     2,     4,     6,     8,    10,    12,    14,    16,    18,
    20,    22,    24,    26,    28,    30,    32,    34,    36,    38,
    40,    42,    44,    46,    48,    50,    52,    54,    56,    60,
    64,    68,    70,    72,    74,    78,    80,    84,    85,    88,
    89,    92,    93,    97,    99,   101,   105,   111,   113,   115,
   116,   118,   120,   123,   125,   127,   129,   131,   133,   135,
   137,   139,   141,   143,   144,   152,   153,   155,   158,   159,
   161,   164,   166,   170,   174,   175,   178,   179,   183,   184,
   188,   189,   193,   194,   196,   198,   200,   202,   204,   208,
   210,   215,   221,   226,   232,   233,   236,   238,   240,   244,
   246,   249,   251,   255,   256,   258,   261,   270,   279,   280,
   282,   283,   285,   287,   291,   295,   300,   303,   305,   309,
   311,   313,   316,   317,   318,   328,   332,   337,   343,   349,
   350,   352,   353,   360,   361,   363,   366,   370,   374,   375,
   377,   379,   382,   384,   386,   388,   391,   392,   397,   398,
   400,   402,   405,   407,   409,   411,   414,   418,   420,   422,
   424,   426,   428,   430,   432,   434,   436,   438,   440,   442,
   444,   446,   448,   450,   452,   454,   456,   458,   460,   462,
   464,   466,   468,   472,   476,   479,   481,   483,   485,   487,
   489,   491,   493,   499,   507,   515,   521,   525,   526,   528,
   530,   533,   535,   539,   542,   548,   554,   562,   573,   584,
   585,   586,   588,   590,   592,   593,   595,   596,   598,   600,
   602,   606,   609,   613,   616,   620,   623,   627,   631,   637,
   641,   646,   647,   649,   651,   654,   655,   656,   664,   667,
   669,   671,   673,   675,   679,   681,   683,   685,   687,   693,
   694,   704,   711,   712,   723,   725,   729,   734,   739,   741,
   744,   748,   749,   751,   754,   758,   762,   766,   771,   778,
   785,   790,   795,   797,   799,   801,   803,   806,   809,   811,
   813,   816,   819,   821,   824,   827,   829,   832,   835,   837,
   843,   848,   854,   856,   860,   864,   868,   870,   874,   878,
   880,   884,   888,   892,   894,   898,   902,   906,   910,   914,
   916,   920,   924,   926,   930,   932,   936,   938,   942,   944,
   948,   950,   954,   956,   962,   964,   966,   970,   972,   974,
   976,   978,   980,   982,   984,   986,   988,   990,   992,   994,
   996,   998,  1000,  1002
};

static const short yyrhs[] = {   122,
     0,    75,     0,    81,     0,    76,     0,    77,     0,    78,
     0,    79,     0,    48,     0,    19,     0,    32,     0,   109,
     0,   113,     0,     6,     0,   110,     0,   111,     0,   112,
     0,     8,     0,    38,     0,    28,     0,    30,     0,    11,
     0,    22,     0,    16,     0,   114,     0,   117,     0,   118,
     0,   114,     0,   114,     0,   109,    82,    83,     0,   118,
    82,    83,     0,   117,    82,    83,     0,   119,     0,   120,
     0,   121,     0,   118,    84,   121,     0,    80,     0,   125,
   123,   124,     0,     0,   123,   126,     0,     0,   124,   129,
     0,     0,    33,   118,    85,     0,   127,     0,   128,     0,
    26,   118,    85,     0,    26,   118,    84,    86,    85,     0,
   133,     0,   174,     0,     0,   131,     0,   132,     0,   131,
   132,     0,    36,     0,    35,     0,    34,     0,    39,     0,
     5,     0,    20,     0,    31,     0,    42,     0,    46,     0,
    47,     0,     0,   130,    12,   121,   135,   137,   134,   140,
     0,     0,   136,     0,    18,   115,     0,     0,   138,     0,
    25,   139,     0,   116,     0,   139,    87,   116,     0,    88,
   141,    89,     0,     0,   141,   142,     0,     0,   147,   143,
   146,     0,     0,   167,   144,   146,     0,     0,   168,   145,
   146,     0,     0,    85,     0,   148,     0,   158,     0,   133,
     0,   174,     0,   130,   149,    85,     0,   150,     0,   108,
   121,   241,   152,     0,   150,    87,   121,   241,   152,     0,
   108,   121,   241,   152,     0,   151,    87,   121,   241,   152,
     0,     0,    90,   153,     0,   269,     0,   154,     0,    88,
   155,    89,     0,   157,     0,   156,   157,     0,   153,     0,
   156,    87,   153,     0,     0,    87,     0,   159,   166,     0,
   130,   108,   121,    91,   161,    92,   241,   160,     0,   130,
    50,   121,    91,   161,    92,   241,   160,     0,     0,   164,
     0,     0,   162,     0,   163,     0,   162,    87,   163,     0,
   108,   121,   241,     0,    20,   108,   121,   241,     0,    45,
   165,     0,   115,     0,   165,    87,   115,     0,   184,     0,
    85,     0,    39,   184,     0,     0,     0,   130,   119,   169,
    91,   161,    92,   160,   170,   171,     0,    88,   186,    89,
     0,    88,   172,   186,    89,     0,    43,    91,   173,    92,
    85,     0,    40,    91,   173,    92,    85,     0,     0,   237,
     0,     0,   130,    29,   121,   176,   175,   178,     0,     0,
   177,     0,    18,   116,     0,   177,    87,   116,     0,    88,
   179,    89,     0,     0,   180,     0,   181,     0,   180,   181,
     0,   182,     0,   183,     0,   148,     0,   159,    85,     0,
     0,    88,   185,   186,    89,     0,     0,   187,     0,   188,
     0,   187,   188,     0,   189,     0,   192,     0,   133,     0,
   190,    85,     0,    20,   191,    85,     0,   149,     0,   151,
     0,   194,     0,   196,     0,   200,     0,   201,     0,   208,
     0,   211,     0,   194,     0,   197,     0,   202,     0,   209,
     0,   212,     0,   184,     0,   195,     0,   198,     0,   203,
     0,   210,     0,   220,     0,   221,     0,   222,     0,   224,
     0,   223,     0,   225,     0,    85,     0,   121,    93,   192,
     0,   121,    93,   193,     0,   199,    85,     0,   266,     0,
   250,     0,   251,     0,   247,     0,   248,     0,   244,     0,
   234,     0,    24,    91,   269,    92,   192,     0,    24,    91,
   269,    92,   193,    17,   192,     0,    24,    91,   269,    92,
   193,    17,   193,     0,    41,    91,   269,    92,   204,     0,
    88,   205,    89,     0,     0,   206,     0,   207,     0,   206,
   207,     0,   188,     0,     9,   270,    93,     0,    14,    93,
     0,    51,    91,   269,    92,   192,     0,    51,    91,   269,
    92,   193,     0,    15,   192,    51,    91,   269,    92,    85,
     0,    23,   213,    91,   214,    85,   216,    85,   217,    92,
   192,     0,    23,   213,    91,   214,    85,   216,    85,   217,
    92,   193,     0,     0,     0,   215,     0,   219,     0,   190,
     0,     0,   269,     0,     0,   218,     0,   219,     0,   199,
     0,   219,    87,   199,     0,     7,    85,     0,     7,   121,
    85,     0,    13,    85,     0,    13,   121,    85,     0,    37,
    85,     0,    37,   269,    85,     0,    44,   269,    85,     0,
    42,    91,   269,    92,   184,     0,    49,   184,   227,     0,
    49,   184,   226,   231,     0,     0,   227,     0,   228,     0,
   227,   228,     0,     0,     0,    10,   229,    91,   163,    92,
   230,   184,     0,    21,   184,     0,   233,     0,   238,     0,
   107,     0,    43,     0,    91,   269,    92,     0,   234,     0,
   243,     0,   244,     0,   245,     0,    74,   115,    91,   173,
    92,     0,     0,    74,   115,    91,   173,    92,    88,   235,
   141,    89,     0,   232,     4,   115,    91,   173,    92,     0,
     0,   232,     4,   115,    91,   173,    92,    88,   236,   141,
    89,     0,   269,     0,   237,    87,   269,     0,    74,   109,
   239,   241,     0,    74,   114,   239,   241,     0,   240,     0,
   239,   240,     0,    82,   269,    83,     0,     0,   242,     0,
    82,    83,     0,   242,    82,    83,     0,   232,    84,   121,
     0,    40,    84,   121,     0,   118,    91,   173,    92,     0,
   232,    84,   121,    91,   173,    92,     0,    40,    84,   121,
    91,   173,    92,     0,   118,    82,   269,    83,     0,   233,
    82,   269,    83,     0,   232,     0,   118,     0,   247,     0,
   248,     0,   246,    72,     0,   246,    73,     0,   250,     0,
   251,     0,    94,   249,     0,    95,   249,     0,   252,     0,
    72,   249,     0,    73,   249,     0,   246,     0,    96,   249,
     0,    97,   249,     0,   253,     0,    91,   109,   241,    92,
   249,     0,    91,   269,    92,   252,     0,    91,   118,   242,
    92,   252,     0,   249,     0,   254,    86,   249,     0,   254,
    98,   249,     0,   254,    99,   249,     0,   254,     0,   255,
    94,   254,     0,   255,    95,   254,     0,   255,     0,   256,
    71,   255,     0,   256,    69,   255,     0,   256,    70,   255,
     0,   256,     0,   257,   100,   256,     0,   257,   101,   256,
     0,   257,    67,   256,     0,   257,    68,   256,     0,   257,
    27,   113,     0,   257,     0,   258,    65,   257,     0,   258,
    66,   257,     0,   258,     0,   259,   102,   258,     0,   259,
     0,   260,   103,   259,     0,   260,     0,   261,   104,   260,
     0,   261,     0,   262,    64,   261,     0,   262,     0,   263,
    63,   262,     0,   263,     0,   263,   105,   269,    93,   264,
     0,   264,     0,   266,     0,   267,   268,   265,     0,   118,
     0,   243,     0,   245,     0,    90,     0,    57,     0,    58,
     0,    59,     0,    55,     0,    56,     0,    54,     0,    52,
     0,    53,     0,    60,     0,    61,     0,    62,     0,   265,
     0,   269,     0
};

#endif

#if YYDEBUG != 0
static const short yyrline[] = { 0,
   133,   136,   139,   144,   146,   148,   150,   152,   154,   156,
   160,   162,   165,   168,   171,   173,   176,   179,   181,   183,
   185,   189,   192,   196,   202,   205,   209,   213,   217,   223,
   228,   235,   237,   240,   244,   254,   258,   262,   263,   266,
   267,   271,   275,   282,   284,   287,   295,   303,   305,   308,
   310,   313,   315,   323,   329,   334,   339,   344,   349,   354,
   359,   364,   369,   376,   392,   395,   397,   400,   405,   407,
   410,   415,   422,   430,   434,   435,   438,   442,   442,   445,
   445,   448,   450,   451,   459,   461,   462,   463,   491,   509,
   519,   564,   603,   652,   695,   697,   704,   706,   709,   714,
   716,   720,   726,   733,   734,   737,   742,   772,   803,   805,
   808,   810,   813,   819,   836,   848,   861,   866,   873,   881,
   883,   887,   892,   905,   919,   931,   936,   943,   948,   954,
   956,   959,   974,   977,   979,   982,   989,   997,  1001,  1002,
  1005,  1007,  1010,  1012,  1015,  1019,  1024,  1027,  1034,  1036,
  1039,  1047,  1056,  1058,  1059,  1063,  1066,  1070,  1074,  1084,
  1086,  1087,  1088,  1089,  1090,  1093,  1095,  1096,  1097,  1098,
  1101,  1104,  1105,  1106,  1107,  1108,  1109,  1110,  1111,  1112,
  1113,  1116,  1121,  1126,  1131,  1136,  1138,  1139,  1140,  1141,
  1142,  1143,  1146,  1151,  1156,  1161,  1166,  1171,  1173,  1176,
  1184,  1193,  1195,  1197,  1231,  1236,  1241,  1246,  1255,  1264,
  1268,  1270,  1273,  1283,  1287,  1289,  1292,  1294,  1297,  1301,
  1307,  1314,  1317,  1321,  1324,  1328,  1331,  1335,  1340,  1345,
  1351,  1360,  1362,  1365,  1371,  1378,  1381,  1393,  1399,  1404,
  1406,  1409,  1411,  1413,  1417,  1418,  1419,  1420,  1423,  1429,
  1434,  1440,  1445,  1450,  1458,  1464,  1471,  1482,  1491,  1497,
  1504,  1509,  1511,  1514,  1517,  1521,  1527,  1535,  1557,  1562,
  1570,  1577,  1581,  1583,  1588,  1589,  1592,  1597,  1602,  1604,
  1605,  1607,  1609,  1612,  1617,  1622,  1624,  1626,  1628,  1631,
  1638,  1652,  1660,  1662,  1664,  1666,  1670,  1672,  1674,  1678,
  1680,  1682,  1684,  1688,  1690,  1692,  1694,  1696,  1698,  1705,
  1707,  1709,  1713,  1715,  1719,  1721,  1725,  1727,  1731,  1733,
  1737,  1739,  1743,  1745,  1749,  1751,  1754,  1759,  1765,  1766,
  1769,  1772,  1774,  1776,  1778,  1780,  1782,  1784,  1786,  1788,
  1790,  1792,  1796,  1800
};

static const char * const yytname[] = {   "$","error","$illegal.","ERROR","DOTNEW",
"ABSTRACT","BOOLEAN","BREAK","BYTE","CASE","CATCH","CHAR","CLASS","CONTINUE",
"DEFAULT","DO","DOUBLE","ELSE","EXTENDS","FALSE_TOKEN","FINAL","FINALLY","FLOAT",
"FOR","IF","IMPLEMENTS","IMPORT","INSTANCEOF","INT","INTERFACE","LONG","NATIVE",
"NULL_TOKEN","PACKAGE","PRIVATE","PROTECTED","PUBLIC","RETURN","SHORT","STATIC",
"SUPER","SWITCH","SYNCHRONIZED","THIS","THROW","THROWS","TRANSIENT","VOLATILE",
"TRUE_TOKEN","TRY","VOID","WHILE","SHIFT_RIGHT_EQUALS","FILL_SHIFT_RIGHT_EQUALS",
"SHIFT_LEFT_EQUALS","ADD_EQUALS","SUB_EQUALS","MUL_EQUALS","DIV_EQUALS","MOD_EQUALS",
"AND_EQUALS","XOR_EQUALS","OR_EQUALS","OR","AND","EQUAL_COMPARE","NOT_EQUAL",
"LTEQ","GTEQ","BITSHIFT_RIGHT","FILL_SHIFT_RIGHT","SHIFT_LEFT","INCR","DECR",
"NEW","INT_LITERAL","CHARACTER_LITERAL","LONG_LITERAL","FLOAT_LITERAL","DOUBLE_LITERAL",
"SYMBOL","STRING_LITERAL","'['","']'","'.'","';'","'*'","','","'{'","'}'","'='",
"'('","')'","':'","'+'","'-'","'~'","'!'","'/'","'%'","'<'","'>'","'&'","'^'",
"'|'","'?'","Goal","Literal","Type","PrimitiveType","NumericType","IntegralType",
"FloatingPointType","ReferenceType","ClassOrInterfaceType","ClassType","InterfaceType",
"ArrayType","Name","SimpleName","QualifiedName","Identifier","CompilationUnit",
"OptImportDeclarations","OptTypeDeclarations","OptPackageDeclaration","ImportDeclaration",
"SingleTypeImportDeclaration","TypeImportOnDemandDeclaration","TypeDeclaration",
"OptModifiers","Modifiers","Modifier","ClassDeclaration","@1","OptSuper","Super",
"OptInterfaces","Interfaces","InterfaceTypeList","ClassBody","OptClassBodyDeclarations",
"ClassBodyDeclaration","@2","@3","@4","OptIllegalSemicolon","ClassMemberDeclaration",
"FieldDeclaration","VariableDeclaration","PartialVariable","FinalPartialVariable",
"OptVariableInitializer","VariableInitializer","ArrayInitializer","OptVariableInitializers",
"VariableInitializers","OptComma","MethodDeclaration","MethodHeader","OptThrows",
"OptFormalParameterList","FormalParameterList","FormalParameter","Throws","ClassTypeList",
"MethodBody","StaticInitializer","ConstructorDeclaration","@5","@6","ConstructorBody",
"ExplicitConstructorInvocation","OptArgumentList","InterfaceDeclaration","@7",
"OptExtendsInterfaces","ExtendsInterfaces","InterfaceBody","OptInterfaceMemberDeclarations",
"InterfaceMemberDeclarations","InterfaceMemberDeclaration","ConstantDeclaration",
"AbstractMethodDeclaration","Block","@8","OptBlockStatements","BlockStatements",
"BlockStatement","LocalVariableDeclarationStatement","LocalVariableDeclaration",
"FinalVariableDeclaration","Statement","StatementNoShortIf","StatementWithoutTrailingSubstatement",
"EmptyStatement","LabeledStatement","LabeledStatementNoShortIf","ExpressionStatement",
"StatementExpression","IfThenStatement","IfThenElseStatement","IfThenElseStatementNoShortIf",
"SwitchStatement","SwitchBlock","OptSwitchBlockStatements","SwitchBlockStatements",
"SwitchBlockStatement","WhileStatement","WhileStatementNoShortIf","DoStatement",
"ForStatement","ForStatementNoShortIf","PushForStatementScope","OptForInit",
"ForInit","OptExpression","OptForUpdate","ForUpdate","StatementExpressionList",
"BreakStatement","ContinueStatement","ReturnStatement","ThrowStatement","SynchronizedStatement",
"TryStatement","OptCatches","Catches","CatchClause","@9","@10","Finally","Primary",
"PrimaryNoNewArray","ClassInstanceCreationExpression","@11","@12","ArgumentList",
"ArrayCreationExpression","DimExprs","DimExpr","OptDims","Dims","FieldAccess",
"MethodInvocation","ArrayAccess","PostfixExpression","PostIncrementExpression",
"PostDecrementExpression","UnaryExpression","PreIncrementExpression","PreDecrementExpression",
"UnaryExpressionNotPlusMinus","CastExpression","MultiplicativeExpression","AdditiveExpression",
"ShiftExpression","RelationalExpression","EqualityExpression","AndExpression",
"ExclusiveOrExpression","InclusiveOrExpression","ConditionalAndExpression","ConditionalOrExpression",
"ConditionalExpression","AssignmentExpression","Assignment","LeftHandSide","AssignmentOperator",
"Expression","ConstantExpression",""
};
#endif

static const short yyr1[] = {     0,
   106,   107,   107,   107,   107,   107,   107,   107,   107,   107,
   108,   108,   109,   109,   110,   110,   111,   111,   111,   111,
   111,   112,   112,   113,   113,   114,   115,   116,   117,   117,
   117,   118,   118,   119,   120,   121,   122,   123,   123,   124,
   124,   125,   125,   126,   126,   127,   128,   129,   129,   130,
   130,   131,   131,   132,   132,   132,   132,   132,   132,   132,
   132,   132,   132,   134,   133,   135,   135,   136,   137,   137,
   138,   139,   139,   140,   141,   141,   143,   142,   144,   142,
   145,   142,   146,   146,   147,   147,   147,   147,   148,   149,
   150,   150,   151,   151,   152,   152,   153,   153,   154,   155,
   155,   156,   156,   157,   157,   158,   159,   159,   160,   160,
   161,   161,   162,   162,   163,   163,   164,   165,   165,   166,
   166,   167,   169,   170,   168,   171,   171,   172,   172,   173,
   173,   175,   174,   176,   176,   177,   177,   178,   179,   179,
   180,   180,   181,   181,   182,   183,   185,   184,   186,   186,
   187,   187,   188,   188,   188,   189,   189,   190,   191,   192,
   192,   192,   192,   192,   192,   193,   193,   193,   193,   193,
   194,   194,   194,   194,   194,   194,   194,   194,   194,   194,
   194,   195,   196,   197,   198,   199,   199,   199,   199,   199,
   199,   199,   200,   201,   202,   203,   204,   205,   205,   206,
   206,   207,   207,   207,   208,   209,   210,   211,   212,   213,
   214,   214,   215,   215,   216,   216,   217,   217,   218,   219,
   219,   220,   220,   221,   221,   222,   222,   223,   224,   225,
   225,   226,   226,   227,   227,   229,   230,   228,   231,   232,
   232,   233,   233,   233,   233,   233,   233,   233,   234,   235,
   234,   234,   236,   234,   237,   237,   238,   238,   239,   239,
   240,   241,   241,   242,   242,   243,   243,   244,   244,   244,
   245,   245,   246,   246,   246,   246,   247,   248,   249,   249,
   249,   249,   249,   250,   251,   252,   252,   252,   252,   253,
   253,   253,   254,   254,   254,   254,   255,   255,   255,   256,
   256,   256,   256,   257,   257,   257,   257,   257,   257,   258,
   258,   258,   259,   259,   260,   260,   261,   261,   262,   262,
   263,   263,   264,   264,   265,   265,   266,   267,   267,   267,
   268,   268,   268,   268,   268,   268,   268,   268,   268,   268,
   268,   268,   269,   270
};

static const short yyr2[] = {     0,
     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
     1,     1,     1,     1,     1,     1,     1,     1,     3,     3,
     3,     1,     1,     1,     3,     1,     3,     0,     2,     0,
     2,     0,     3,     1,     1,     3,     5,     1,     1,     0,
     1,     1,     2,     1,     1,     1,     1,     1,     1,     1,
     1,     1,     1,     0,     7,     0,     1,     2,     0,     1,
     2,     1,     3,     3,     0,     2,     0,     3,     0,     3,
     0,     3,     0,     1,     1,     1,     1,     1,     3,     1,
     4,     5,     4,     5,     0,     2,     1,     1,     3,     1,
     2,     1,     3,     0,     1,     2,     8,     8,     0,     1,
     0,     1,     1,     3,     3,     4,     2,     1,     3,     1,
     1,     2,     0,     0,     9,     3,     4,     5,     5,     0,
     1,     0,     6,     0,     1,     2,     3,     3,     0,     1,
     1,     2,     1,     1,     1,     2,     0,     4,     0,     1,
     1,     2,     1,     1,     1,     2,     3,     1,     1,     1,
     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
     1,     1,     3,     3,     2,     1,     1,     1,     1,     1,
     1,     1,     5,     7,     7,     5,     3,     0,     1,     1,
     2,     1,     3,     2,     5,     5,     7,    10,    10,     0,
     0,     1,     1,     1,     0,     1,     0,     1,     1,     1,
     3,     2,     3,     2,     3,     2,     3,     3,     5,     3,
     4,     0,     1,     1,     2,     0,     0,     7,     2,     1,
     1,     1,     1,     3,     1,     1,     1,     1,     5,     0,
     9,     6,     0,    10,     1,     3,     4,     4,     1,     2,
     3,     0,     1,     2,     3,     3,     3,     4,     6,     6,
     4,     4,     1,     1,     1,     1,     2,     2,     1,     1,
     2,     2,     1,     2,     2,     1,     2,     2,     1,     5,
     4,     5,     1,     3,     3,     3,     1,     3,     3,     1,
     3,     3,     3,     1,     3,     3,     3,     3,     3,     1,
     3,     3,     1,     3,     1,     3,     1,     3,     1,     3,
     1,     3,     1,     5,     1,     1,     3,     1,     1,     1,
     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
     1,     1,     1,     1
};

static const short yydefact[] = {    42,
     0,     1,    38,    36,     0,    32,    33,    34,    40,     0,
    43,     0,    50,    39,    44,    45,    35,     0,    58,    59,
    60,    56,    55,    54,    57,    61,    62,    63,    41,     0,
    51,    52,    48,    49,     0,    46,     0,     0,    53,     0,
    66,   134,    47,     0,    69,    67,     0,   132,   135,    27,
    68,    26,     0,    64,    70,    28,   136,     0,     0,    72,
    71,     0,    50,   133,   137,     0,    75,    65,     0,   145,
     0,     0,    50,   141,   143,   144,    73,    50,    13,    17,
    21,    23,    22,    19,    20,    18,     0,     0,    11,    14,
    15,    16,    12,    24,    25,    26,     0,    90,   146,   138,
   142,    57,    74,     0,    87,    76,    77,    85,    86,     0,
    79,    81,    88,     0,   262,     0,     0,     0,    89,     0,
   147,   122,    32,    83,   121,   106,   120,    83,    83,   111,
     0,   111,    95,   263,    29,    31,    30,   262,    50,     0,
    84,    78,    80,    82,     0,     0,     0,   112,   113,   264,
     0,     0,    91,     0,    95,     0,     0,     0,     9,    59,
   210,     0,    10,     0,     0,     0,    61,   243,     0,     8,
     0,     0,     0,     0,     0,     2,     4,     5,     6,     7,
     3,   182,     0,   242,     0,   328,    34,     0,   155,   158,
   171,     0,    50,   151,   153,     0,   154,   160,   172,   161,
   173,     0,   162,   163,   174,   164,   175,   165,   176,   177,
   178,   180,   179,   181,   273,   240,   245,   241,   246,   247,
   248,     0,   189,   190,   187,   188,   186,     0,   111,     0,
   262,   262,     0,   262,   104,     0,     0,     0,     0,     0,
   274,    96,    98,   245,   247,   286,   275,   276,   293,   279,
   280,   283,   289,   297,   300,   304,   310,   313,   315,   317,
   319,   321,   323,   325,   343,   326,    97,   265,    92,   222,
     0,   224,     0,     0,     0,     0,   159,     0,     0,     0,
   226,     0,     0,     0,     0,     0,   232,     0,   274,   246,
   248,   284,   285,     0,    27,     0,     0,   262,     0,   130,
     0,   148,   152,   156,   185,     0,     0,     0,   277,   278,
   338,   339,   337,   335,   336,   332,   333,   334,   340,   341,
   342,   331,     0,     0,   262,   115,   109,   114,   109,   105,
   102,     0,   104,   100,   262,   274,     0,   281,   282,   287,
   288,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,   223,   225,     0,   262,     0,   157,   211,
     0,   227,   267,     0,     0,   228,   236,     0,   230,   234,
     0,     0,   262,   259,   262,   130,   244,     0,     0,   131,
   255,   183,     0,   266,     0,   327,   109,   116,     0,   108,
   110,   107,    99,   105,   101,     0,     0,     0,   244,   294,
   295,   296,   298,   299,   302,   303,   301,     0,   309,   307,
   308,   305,   306,   311,   312,   314,   316,   318,   320,   322,
     0,     0,    95,   262,   214,   220,     0,   212,   213,     0,
   130,     0,     0,     0,     0,   231,   235,     0,     0,     0,
   260,   257,   258,     0,   271,   268,     0,   130,   130,   272,
   124,   118,   117,   103,     0,     0,   291,     0,     0,    93,
    95,   215,     0,   210,     0,     0,    34,   193,     0,   160,
   167,   168,   169,   170,     0,    50,   196,   229,     0,   239,
   205,   261,   249,   256,     0,     0,     0,     0,   290,   292,
   324,     0,    94,     0,   216,   221,     0,     0,     0,     0,
     0,   270,     0,     0,   202,     0,    50,   200,     0,   250,
   252,   269,    50,   125,   119,   207,   217,   211,     0,     0,
   184,   194,   344,     0,   204,   197,   201,   237,    75,   253,
     0,   243,    50,     0,     0,   218,   219,     0,     0,     0,
   203,     0,    50,    75,   130,   130,     0,   126,     0,   215,
     0,   206,   238,   251,    50,     0,     0,   127,   208,     0,
     0,   254,     0,     0,   217,   195,   129,   128,     0,     0,
   209,     0,     0,     0
};

static const short yydefgoto[] = {   582,
   184,   185,    89,    90,    91,    92,    93,    94,    51,    57,
    95,   241,     6,     7,     8,     2,     9,    13,     3,    14,
    15,    16,    29,   188,    31,    32,   189,    62,    45,    46,
    54,    55,    61,    68,    78,   106,   124,   128,   129,   142,
   107,   108,   190,    98,   277,   153,   242,   243,   332,   333,
   334,   109,   110,   400,   147,   148,   149,   401,   463,   126,
   111,   112,   140,   497,   524,   543,   389,   113,    58,    48,
    49,    64,    72,    73,    74,    75,    76,   191,   139,   192,
   193,   194,   195,   196,   278,   197,   479,   198,   199,   200,
   481,   201,   202,   203,   204,   482,   205,   487,   516,   517,
   518,   206,   483,   207,   208,   484,   279,   437,   438,   504,
   545,   546,   439,   209,   210,   211,   212,   213,   214,   378,
   379,   380,   444,   552,   446,   215,   216,   244,   539,   554,
   390,   218,   383,   384,   133,   134,   219,   245,   221,   246,
   247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
   257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
   228,   323,   391,   534
};

static const short yypact[] = {    37,
   -30,-32768,-32768,-32768,    23,-32768,-32768,-32768,    70,   -30,
-32768,   -30,   352,-32768,-32768,-32768,-32768,    74,-32768,-32768,
-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    27,
   731,-32768,-32768,-32768,    47,-32768,   -30,   -30,-32768,    40,
   116,   143,-32768,   -30,   140,-32768,   -30,-32768,    80,-32768,
-32768,    90,   -30,-32768,-32768,-32768,-32768,    93,   -30,-32768,
   123,   112,   275,-32768,-32768,   -30,-32768,-32768,   581,-32768,
   141,   146,   334,-32768,-32768,-32768,-32768,   489,-32768,-32768,
-32768,-32768,-32768,-32768,-32768,-32768,   -30,   -30,   148,-32768,
-32768,-32768,-32768,-32768,   155,    -2,   158,   157,-32768,-32768,
-32768,   159,-32768,   203,-32768,-32768,-32768,-32768,-32768,    38,
-32768,-32768,-32768,   154,    49,   165,   166,   167,-32768,   -30,
-32768,-32768,   160,   170,-32768,-32768,-32768,   170,   170,    24,
   169,    24,   168,   177,-32768,-32768,-32768,   178,  1540,   172,
-32768,-32768,-32768,-32768,   457,   -30,   175,   174,-32768,-32768,
   176,  1861,-32768,   181,   168,    57,    69,  1152,-32768,   457,
-32768,   183,-32768,  1911,   191,   185,   186,-32768,  2061,-32768,
   159,   187,  2061,  2061,   457,-32768,-32768,-32768,-32768,-32768,
-32768,-32768,  2061,-32768,   -30,    48,   192,   267,-32768,-32768,
-32768,   193,  1627,-32768,-32768,   199,-32768,-32768,-32768,-32768,
-32768,   201,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-32768,-32768,-32768,-32768,    17,   205,    68,-32768,   636,    77,
  1091,   113,   125,   130,-32768,-32768,-32768,  1373,    24,   -30,
   178,   178,    24,   178,  1811,  1259,  2061,  2061,  2061,  2061,
  1261,-32768,-32768,-32768,-32768,   113,-32768,-32768,-32768,-32768,
-32768,-32768,-32768,   -39,   110,   108,    18,   142,   190,   196,
   184,   225,   -22,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
   208,-32768,   209,   186,   250,   -30,   215,   218,   216,  2061,
-32768,   223,   -30,  2061,  2061,   227,   303,  2061,    31,-32768,
-32768,-32768,-32768,   234,   234,   229,   226,   178,  1961,  2061,
  1152,-32768,-32768,-32768,-32768,   -30,   -30,  2061,-32768,-32768,
-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-32768,-32768,  2061,   231,   178,-32768,   279,-32768,   279,-32768,
-32768,   236,   244,-32768,   178,  2115,   240,-32768,-32768,-32768,
-32768,  2061,  2061,  2061,  2061,  2061,  2061,  2061,  2061,  2061,
   457,  2061,  2061,  2061,  2061,  2061,  2061,  2061,  2061,  2061,
  2061,  2061,  2061,-32768,-32768,   247,   178,   -30,-32768,  1023,
   248,-32768,   252,   249,   253,-32768,-32768,   323,    43,-32768,
   254,  2061,   266,-32768,   266,  2061,-32768,   268,   257,   263,
-32768,-32768,   265,   269,   276,-32768,   279,-32768,   -30,-32768,
-32768,-32768,-32768,  1861,-32768,   282,  2011,   -34,  2111,-32768,
-32768,-32768,   -39,   -39,   110,   110,   110,   148,-32768,   108,
   108,   108,   108,    18,    18,   142,   190,   196,   184,   225,
   270,  2061,   168,   178,-32768,-32768,   286,-32768,   274,  1791,
  2061,   287,   159,   288,   159,-32768,-32768,  1152,   294,  2011,
-32768,-32768,-32768,   292,-32768,-32768,  2061,  2061,  2061,-32768,
-32768,-32768,   291,-32768,  2061,  2111,-32768,  2061,   293,-32768,
   168,  2061,  2161,-32768,   298,   299,   300,-32768,   375,   378,
-32768,-32768,-32768,-32768,   304,  1366,-32768,-32768,    24,-32768,
-32768,-32768,   309,-32768,   308,   310,   313,   -30,-32768,-32768,
-32768,   319,-32768,   322,-32768,-32768,   318,  2061,  2061,  1791,
  1152,-32768,  2061,   320,-32768,   325,  1453,-32768,   324,-32768,
   329,-32768,  1714,-32768,-32768,-32768,  2161,  1023,   326,   327,
-32768,-32768,-32768,   328,-32768,-32768,-32768,-32768,-32768,-32768,
     9,   331,  1540,   335,   333,-32768,   274,   341,  1791,  1791,
-32768,   159,   634,-32768,  2061,  2061,   343,-32768,  1152,  2061,
   403,-32768,-32768,-32768,   866,   342,   347,-32768,-32768,   348,
  1791,-32768,   350,   384,  2161,-32768,-32768,-32768,   368,  1791,
-32768,   437,   470,-32768
};

static const short yypgoto[] = {-32768,
-32768,   -61,  -164,-32768,-32768,-32768,   120,   -37,  -171,    58,
-32768,    97,   370,-32768,   -10,-32768,-32768,-32768,-32768,-32768,
-32768,-32768,-32768,   -12,-32768,   441,   -11,-32768,-32768,-32768,
-32768,-32768,-32768,-32768,  -505,-32768,-32768,-32768,-32768,    84,
-32768,    -8,   -36,-32768,-32768,  -152,  -220,-32768,-32768,-32768,
   145,-32768,     0,  -303,  -115,-32768,  -227,-32768,-32768,-32768,
-32768,-32768,-32768,-32768,-32768,-32768,  -367,   462,-32768,-32768,
-32768,-32768,-32768,-32768,   407,-32768,-32768,   -90,-32768,  -486,
-32768,  -188,-32768,  -352,-32768,  -144,  -474,  -398,-32768,-32768,
-32768,-32768,  -357,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
   -35,-32768,-32768,-32768,-32768,-32768,    12,   -45,-32768,   -72,
   -84,-32768,  -496,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-32768,   114,-32768,-32768,-32768,-32768,-32768,    41,-32768,-32768,
-32768,-32768,   197,  -240,  -129,   161,   773,   107,   902,   189,
   271,   273,  -150,   345,   417,  -371,-32768,  -130,  -158,  -131,
  -117,   144,   139,   150,   138,   149,-32768,    36,   182,   509,
-32768,-32768,   706,-32768
};


#define	YYLAST		2252


static const short yytable[] = {    17,
    30,    33,   269,   296,   303,   328,    50,    88,   155,    56,
   294,   122,   436,   275,   331,    56,   151,   435,   454,   127,
   306,    56,   292,   293,    17,   402,    41,    42,    56,    79,
   547,    80,    97,   553,    81,   531,   544,   467,    37,    82,
   362,   480,    88,   145,   351,    83,   343,   154,   565,     4,
    69,    84,   377,    85,    70,    38,   557,   466,   344,   345,
    69,    86,    71,  -233,    70,   104,   105,    97,   146,     1,
   146,   335,    71,   485,   561,   562,   114,   115,   547,   118,
   287,    10,   363,   230,   352,   353,   338,   339,   340,   341,
   495,   496,   283,   461,   500,    12,   576,     5,   276,   555,
   307,   326,   327,     4,   329,   581,    10,    11,    18,   138,
    60,   480,   342,   324,    10,   506,    65,   354,   355,  -274,
  -274,   300,   125,    77,    43,   121,     4,   -26,   187,   299,
   131,    10,    40,    44,   393,   231,     4,   295,   300,   132,
    52,   270,   451,    52,   451,   271,   273,   187,     4,    52,
   480,   480,  -192,   272,  -192,    52,   392,    35,    36,  -192,
    47,  -191,    52,  -191,    53,    96,    59,   146,  -191,   436,
   436,   146,   480,    10,   298,   435,   348,   349,   350,   217,
    63,   480,   187,   464,   309,   310,   418,   566,   567,   415,
   416,   417,   410,   411,   412,   398,  -275,  -275,   217,    67,
    96,  -276,  -276,   346,   347,   406,   356,   357,    79,    66,
    80,   143,   144,    81,    37,   413,   414,   436,    82,   325,
   420,   421,   422,   423,    83,    99,    96,   462,    96,   116,
    84,    38,    85,   217,   100,   186,   117,   433,   424,   425,
    86,    96,   119,   120,   130,   220,   121,   135,   136,   137,
  -123,   150,    87,   452,   141,   453,    96,   152,   154,   131,
   233,   519,   229,   268,   220,   367,   232,   234,    50,   289,
   289,    52,   373,   280,   283,   284,   285,   288,    37,    19,
   470,   302,     4,   304,   301,   305,   308,   360,   361,   186,
   187,   358,   364,   365,    20,   478,   394,   515,   359,   220,
   366,   368,   369,   491,   471,    21,   370,   372,    22,    23,
    24,   376,   377,    25,   499,   382,    26,   387,   503,   386,
    27,    28,   397,   399,   403,    96,   525,   222,   515,    96,
   404,   409,   336,   289,   289,   289,   289,   432,    19,   440,
   442,   217,   441,   445,   443,   448,   222,   450,   456,   457,
   455,   -37,   488,    20,   490,   458,    19,   434,   460,   459,
   473,    50,   468,  -139,    21,   392,   532,    22,    23,    24,
   472,    20,    25,   465,   486,    26,   492,   498,   489,    27,
    28,   222,    21,   493,   502,    22,    23,    24,   508,   509,
    25,   511,   510,    26,  -166,   512,   520,    27,    28,   521,
   523,   522,    52,   526,   478,   491,   527,   220,   528,   223,
   217,   224,   535,   536,   569,   538,   540,   549,   550,   571,
   551,   556,  -140,   558,   559,   560,   532,   146,   223,   477,
   224,   568,   575,   573,   577,   569,   583,   187,   574,   289,
   289,   289,   289,   289,   289,   289,   289,    96,   289,   289,
   289,   289,   289,   289,   289,   289,   289,   289,   289,   580,
    50,   563,    79,   223,    80,   224,   186,    81,   578,   584,
   419,    39,    82,   123,    34,   187,   220,   405,    83,   101,
   217,   537,   548,   225,    84,   507,    85,   570,   217,   222,
   579,   385,   447,    19,    86,    52,   408,   427,   429,   477,
   187,   426,   225,   501,   396,   289,   187,     0,    20,   428,
   430,     0,   187,   217,     0,     0,     0,     0,     0,    21,
     0,     0,    22,    23,    24,     0,   217,   102,     0,     0,
    26,     0,   187,     0,    27,    28,     4,   225,   477,   477,
   104,   105,     0,     0,     0,     0,   220,     0,   187,     0,
   217,   217,   104,   105,   220,   226,     0,   217,   222,     0,
   477,   289,   289,   217,   289,     0,     0,   217,   217,   477,
     0,   223,     0,   224,   226,     0,     0,   103,     0,   220,
     0,     0,   186,   217,     0,    96,    79,     0,    80,   217,
   217,    81,   220,     0,    52,     0,    82,     0,     0,   217,
     0,     0,    83,     0,     0,     0,     0,     0,    84,   226,
    85,   217,     0,   186,     0,   217,   220,   220,    86,   186,
   217,     0,     0,   220,   186,     0,     0,     0,   222,   220,
    87,     0,     0,   220,   220,     0,   222,     0,    19,   186,
   223,     0,   224,     0,     0,   225,     0,   227,     0,   220,
     0,     0,     0,    20,     0,   220,   220,     0,     0,     0,
     4,   222,     0,     0,    21,   220,   227,    22,    23,    24,
     0,     0,   102,     0,   222,    26,     0,   220,     0,    27,
    28,   220,     0,     0,     0,     0,   220,  -329,  -329,  -329,
  -329,  -329,  -329,  -329,  -329,  -329,  -329,  -329,   222,   222,
     0,   227,     0,     0,     0,   222,     0,     0,     0,     0,
   223,   222,   224,     0,   225,   222,   222,   226,   223,     0,
   224,     0,   564,     0,     0,  -329,     0,     0,     0,     0,
     0,   222,     0,     0,     0,    19,     0,   222,   222,     0,
     0,     0,     0,   223,     0,   224,     0,   222,     0,     0,
    20,     0,     0,     0,     0,     0,   223,     0,   224,   222,
     0,    21,     0,   222,    22,    23,    24,     0,   222,    25,
     0,     0,    26,     0,     0,     0,    27,    28,     0,     0,
   223,   223,   224,   224,   225,     0,   226,   223,     0,   224,
     0,     0,   225,   223,     0,   224,     0,   223,   223,   224,
   224,     0,     0,     0,     0,     0,     0,     0,     0,   227,
     0,     0,     0,   223,     0,   224,     0,   225,     0,   223,
   223,   224,   224,     0,     0,     0,     0,     0,     0,   223,
   225,   224,     0,     0,     0,     0,     0,     0,     0,     0,
     0,   223,     0,   224,     0,   223,     0,   224,     0,     0,
   223,     0,   224,     0,   225,   225,   226,   267,     0,     0,
     0,   225,     0,     0,   226,     0,     0,   225,     0,   282,
    19,   225,   225,     0,   286,     0,     0,     0,   227,     0,
     0,     0,     0,     0,     0,    20,     0,   225,   297,   226,
     0,     0,     0,   225,   225,     0,    21,     0,     0,    22,
    23,    24,   226,   225,   102,     0,     0,    26,     0,     0,
     0,    27,    28,     0,     0,   225,     0,     0,     0,   225,
     0,     0,     0,     0,   225,     0,   226,   226,     0,     0,
     0,     0,     0,   226,     0,     0,     0,     0,     0,   226,
   267,   337,     0,   226,   226,   290,   290,     0,   227,     0,
     0,     0,     0,     0,   572,     0,   227,     0,     0,   226,
     0,     0,     0,     0,     0,   226,   226,     0,     0,     0,
     0,     0,     0,     0,     0,   226,     0,     0,     0,     0,
     0,   227,     0,     0,     0,   371,     0,   226,     0,   374,
   375,   226,     0,   381,   227,     0,   226,     0,     0,     0,
     0,     0,     0,     0,   388,     0,     0,     0,     0,   290,
   290,   290,   290,   395,     0,     0,     0,     0,   227,   227,
     0,     0,     0,     0,     0,   227,     0,     0,    79,     0,
    80,   227,     0,    81,     0,   227,   227,     0,    82,     0,
     0,   159,     0,     0,    83,     0,     0,   388,     0,     0,
    84,   227,    85,     0,   163,     0,     0,   227,   227,     0,
    86,     0,   165,     0,     0,   168,     0,   227,   431,     0,
   170,     0,     0,     0,   291,   291,     0,     0,     0,   227,
     0,     0,     0,   227,     0,     0,     0,   449,   227,     0,
     0,     0,     0,     0,   173,   174,   175,   176,   177,   178,
   179,   180,     4,   181,     0,     0,     0,     0,     0,   267,
     0,     0,   388,   183,     0,   290,   290,   290,   290,   290,
   290,   290,   290,     0,   290,   290,   290,   290,   290,   290,
   290,   290,   290,   290,   290,     0,     0,   469,   291,   291,
   291,   291,  -330,  -330,  -330,  -330,  -330,  -330,  -330,  -330,
  -330,  -330,  -330,     0,     0,   449,     0,     0,   156,     0,
     0,     0,   494,     0,   157,     0,   158,     0,     0,     0,
   159,     0,     0,     0,   161,   162,     0,   505,     0,     0,
  -330,   290,     0,   163,     0,     0,     0,     0,   164,     0,
     0,   165,   166,   274,   168,   169,     0,     0,     0,   170,
   171,     0,   172,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,   529,   530,     0,     0,     0,   533,     0,
     0,     0,     0,   173,   174,   175,   176,   177,   178,   179,
   180,     4,   181,     0,     0,     0,   182,   290,   290,   121,
   290,     0,   183,     0,   291,   291,   291,   291,   291,   291,
   291,   291,     0,   291,   291,   291,   291,   291,   291,   291,
   291,   291,   291,   291,    79,   505,    80,     0,     0,    81,
     0,     0,     0,     0,    82,     0,     0,   159,     0,     0,
    83,     0,     0,     0,     0,     0,    84,     0,    85,     0,
   163,     0,     0,     0,     0,     0,    86,     0,   165,     0,
     0,   168,     0,     0,     0,     0,   170,     0,     0,     0,
   291,     0,  -328,  -328,  -328,  -328,  -328,  -328,  -328,  -328,
  -328,  -328,  -328,     0,     0,     0,     0,     0,     0,     0,
   173,   174,   175,   176,   177,   178,   179,   180,     4,   181,
     0,     0,   342,     0,    10,     0,     0,     0,     0,   236,
  -328,   300,   237,   238,   239,   240,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,   291,   291,     0,   291,
    19,    79,   156,    80,   513,     0,    81,     0,   157,   514,
   158,    82,     0,     0,   159,   160,     0,    83,   161,   162,
     0,     0,     0,    84,     0,    85,    21,   163,     0,    22,
    23,    24,   164,    86,    25,   165,   166,   167,   168,   169,
     0,    27,    28,   170,   171,     0,   172,     0,     0,     0,
     0,     0,     0,     0,   311,   312,   313,   314,   315,   316,
   317,   318,   319,   320,   321,     0,     0,   173,   174,   175,
   176,   177,   178,   179,   180,     4,   181,     0,     0,     0,
   182,     0,     0,   121,  -198,     0,   183,    19,    79,   156,
    80,   513,   322,    81,     0,   157,   514,   158,    82,     0,
     0,   159,   160,     0,    83,   161,   162,     0,     0,     0,
    84,     0,    85,    21,   163,     0,    22,    23,    24,   164,
    86,    25,   165,   166,   167,   168,   169,     0,    27,    28,
   170,   171,     0,   172,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,   173,   174,   175,   176,   177,   178,
   179,   180,     4,   181,     0,     0,     0,   182,     0,     0,
   121,  -199,     0,   183,    19,    79,   156,    80,     0,     0,
    81,     0,   157,     0,   158,    82,     0,     0,   159,   160,
     0,    83,   161,   162,     0,     0,     0,    84,     0,    85,
    21,   163,     0,    22,    23,    24,   164,    86,    25,   165,
   166,   167,   168,   169,     0,    27,    28,   170,   171,     0,
   172,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,   173,   174,   175,   176,   177,   178,   179,   180,     4,
   181,     0,     0,     0,   182,     0,     0,   121,  -149,     0,
   183,    19,    79,   156,    80,     0,     0,    81,     0,   157,
     0,   158,    82,     0,     0,   159,   160,     0,    83,   161,
   162,     0,     0,     0,    84,     0,    85,    21,   163,     0,
    22,    23,    24,   164,    86,    25,   165,   166,   167,   168,
   169,     0,    27,    28,   170,   171,     0,   172,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,   173,   174,
   175,   176,   177,   178,   179,   180,     4,   181,     0,     0,
     0,   182,     0,     0,   121,  -150,     0,   183,    19,    79,
   156,    80,     0,     0,    81,     0,   157,     0,   158,    82,
     0,     0,   159,   160,     0,    83,   161,   162,     0,     0,
     0,    84,     0,    85,    21,   163,     0,    22,    23,    24,
   164,    86,    25,   541,   166,   167,   542,   169,     0,    27,
    28,   170,   171,     0,   172,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,   173,   174,   175,   176,   177,
   178,   179,   180,     4,   181,     0,     0,   156,   182,     0,
     0,   121,  -149,   157,   183,   158,     0,     0,     0,   159,
     0,     0,     0,   474,   475,     0,     0,     0,     0,     0,
     0,     0,   163,     0,     0,     0,     0,   164,     0,   159,
   165,   166,   274,   168,   169,     0,     0,     0,   170,   171,
     0,   476,   163,     0,     0,     0,     0,     0,     0,     0,
   165,     0,     0,   168,     0,     0,     0,     0,   170,     0,
     0,     0,   173,   174,   175,   176,   177,   178,   179,   180,
     4,   181,     0,     0,     0,   182,     0,     0,   121,   159,
     0,   183,   173,   174,   175,   176,   177,   178,   179,   180,
     4,   181,   163,     0,     0,     0,     0,   330,   235,     0,
   165,   236,     0,   168,   237,   238,   239,   240,   170,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,   159,
     0,     0,   173,   174,   175,   176,   177,   178,   179,   180,
     4,   181,   163,     0,     0,     0,     0,     0,   235,     0,
   165,   236,     0,   168,   237,   238,   239,   240,   170,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,   159,
     0,     0,   173,   174,   175,   176,   177,   178,   179,   180,
     4,   181,   163,     0,     0,   281,     0,     0,     0,     0,
   165,   236,     0,   168,   237,   238,   239,   240,   170,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,   159,
     0,     0,   173,   174,   175,   176,   177,   178,   179,   180,
     4,   181,   163,   137,     0,     0,     0,     0,     0,     0,
   165,   236,     0,   168,   237,   238,   239,   240,   170,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,   159,
     0,     0,   173,   174,   175,   176,   177,   178,   179,   180,
     4,   181,   163,   150,     0,     0,     0,     0,     0,     0,
   165,   236,     0,   168,   237,   238,   239,   240,   170,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,   159,
     0,     0,   173,   174,   175,   176,   177,   178,   179,   180,
     4,   181,   163,     0,     0,     0,     0,     0,     0,     0,
   165,   236,     0,   168,   237,   238,   239,   240,   170,     0,
     0,     0,     0,     0,     0,     0,  -328,  -328,  -328,  -328,
  -328,  -328,  -328,  -328,  -328,  -328,  -328,     0,     0,   159,
     0,     0,     0,     0,   175,   176,   177,   178,   179,   180,
     4,   181,   163,     0,     0,     0,   407,     0,    10,     0,
   165,   236,     0,   168,  -328,   300,   239,   240,   170,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,   173,   174,   175,   176,   177,   178,   179,   180,
     4,   181,     0,     0,     0,     0,     0,     0,     0,     0,
     0,   183
};

static const short yycheck[] = {    10,
    13,    13,   155,   175,   193,   233,    44,    69,   138,    47,
   175,   102,   370,   158,   235,    53,   132,   370,   386,   110,
     4,    59,   173,   174,    35,   329,    37,    38,    66,     6,
   527,     8,    69,   539,    11,   510,   523,   409,    12,    16,
    63,   440,   104,    20,    27,    22,    86,    82,   554,    80,
    63,    28,    10,    30,    63,    29,   543,    92,    98,    99,
    73,    38,    63,    21,    73,    78,    78,   104,   130,    33,
   132,   236,    73,   441,   549,   550,    87,    88,   575,    82,
   171,    84,   105,   145,    67,    68,   237,   238,   239,   240,
   458,   459,    84,   397,   466,    26,   571,     1,   160,    91,
    84,   231,   232,    80,   234,   580,    84,    85,    12,   120,
    53,   510,    82,   229,    84,   473,    59,   100,   101,    72,
    73,    91,    85,    66,    85,    88,    80,    80,   139,    82,
    82,    84,    86,    18,   306,   146,    80,   175,    91,    91,
    44,    85,   383,    47,   385,   156,   157,   158,    80,    53,
   549,   550,    85,    85,    87,    59,   301,    84,    85,    92,
    18,    85,    66,    87,    25,    69,    87,   229,    92,   527,
   528,   233,   571,    84,   185,   528,    69,    70,    71,   139,
    88,   580,   193,   404,    72,    73,   351,   555,   556,   348,
   349,   350,   343,   344,   345,   325,    72,    73,   158,    88,
   104,    72,    73,    94,    95,   335,    65,    66,     6,    87,
     8,   128,   129,    11,    12,   346,   347,   575,    16,   230,
   352,   353,   354,   355,    22,    85,   130,   399,   132,    82,
    28,    29,    30,   193,    89,   139,    82,   367,   356,   357,
    38,   145,    85,    87,    91,   139,    88,    83,    83,    83,
    91,    83,    50,   383,    85,   385,   160,    90,    82,    82,
    87,   489,    91,    83,   158,   276,    92,    92,   306,   173,
   174,   175,   283,    91,    84,    91,    91,    91,    12,     5,
   433,    89,    80,    85,    93,    85,    82,   104,    64,   193,
   301,   102,    85,    85,    20,   440,   307,   486,   103,   193,
    51,    87,    85,   448,   434,    31,    91,    85,    34,    35,
    36,    85,    10,    39,   465,    82,    42,    92,   471,    91,
    46,    47,    92,    45,    89,   229,   498,   139,   517,   233,
    87,    92,   236,   237,   238,   239,   240,    91,     5,    92,
    92,   301,    91,    21,    92,    92,   158,    82,    92,    87,
    83,     0,   443,    20,   445,    91,     5,   368,    83,    91,
    87,   399,    93,    89,    31,   510,   511,    34,    35,    36,
    85,    20,    39,    92,    88,    42,    83,    87,    91,    46,
    47,   193,    31,    92,    92,    34,    35,    36,    91,    91,
    39,    17,    93,    42,    17,    92,    88,    46,    47,    92,
    88,    92,   306,    85,   549,   550,    85,   301,    91,   139,
   370,   139,    93,    89,   559,    92,    88,    92,    92,    17,
    93,    91,    89,    89,    92,    85,   571,   489,   158,   440,
   158,    89,    85,    92,    85,   580,     0,   448,    92,   343,
   344,   345,   346,   347,   348,   349,   350,   351,   352,   353,
   354,   355,   356,   357,   358,   359,   360,   361,   362,    92,
   498,   552,     6,   193,     8,   193,   370,    11,    85,     0,
   351,    31,    16,   104,    13,   486,   370,   333,    22,    73,
   440,   517,   528,   139,    28,   474,    30,   560,   448,   301,
   575,   295,   379,     5,    38,   399,   336,   359,   361,   510,
   511,   358,   158,   468,   323,   409,   517,    -1,    20,   360,
   362,    -1,   523,   473,    -1,    -1,    -1,    -1,    -1,    31,
    -1,    -1,    34,    35,    36,    -1,   486,    39,    -1,    -1,
    42,    -1,   543,    -1,    46,    47,    80,   193,   549,   550,
   553,   553,    -1,    -1,    -1,    -1,   440,    -1,   559,    -1,
   510,   511,   565,   565,   448,   139,    -1,   517,   370,    -1,
   571,   465,   466,   523,   468,    -1,    -1,   527,   528,   580,
    -1,   301,    -1,   301,   158,    -1,    -1,    89,    -1,   473,
    -1,    -1,   486,   543,    -1,   489,     6,    -1,     8,   549,
   550,    11,   486,    -1,   498,    -1,    16,    -1,    -1,   559,
    -1,    -1,    22,    -1,    -1,    -1,    -1,    -1,    28,   193,
    30,   571,    -1,   517,    -1,   575,   510,   511,    38,   523,
   580,    -1,    -1,   517,   528,    -1,    -1,    -1,   440,   523,
    50,    -1,    -1,   527,   528,    -1,   448,    -1,     5,   543,
   370,    -1,   370,    -1,    -1,   301,    -1,   139,    -1,   543,
    -1,    -1,    -1,    20,    -1,   549,   550,    -1,    -1,    -1,
    80,   473,    -1,    -1,    31,   559,   158,    34,    35,    36,
    -1,    -1,    39,    -1,   486,    42,    -1,   571,    -1,    46,
    47,   575,    -1,    -1,    -1,    -1,   580,    52,    53,    54,
    55,    56,    57,    58,    59,    60,    61,    62,   510,   511,
    -1,   193,    -1,    -1,    -1,   517,    -1,    -1,    -1,    -1,
   440,   523,   440,    -1,   370,   527,   528,   301,   448,    -1,
   448,    -1,    89,    -1,    -1,    90,    -1,    -1,    -1,    -1,
    -1,   543,    -1,    -1,    -1,     5,    -1,   549,   550,    -1,
    -1,    -1,    -1,   473,    -1,   473,    -1,   559,    -1,    -1,
    20,    -1,    -1,    -1,    -1,    -1,   486,    -1,   486,   571,
    -1,    31,    -1,   575,    34,    35,    36,    -1,   580,    39,
    -1,    -1,    42,    -1,    -1,    -1,    46,    47,    -1,    -1,
   510,   511,   510,   511,   440,    -1,   370,   517,    -1,   517,
    -1,    -1,   448,   523,    -1,   523,    -1,   527,   528,   527,
   528,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   301,
    -1,    -1,    -1,   543,    -1,   543,    -1,   473,    -1,   549,
   550,   549,   550,    -1,    -1,    -1,    -1,    -1,    -1,   559,
   486,   559,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,   571,    -1,   571,    -1,   575,    -1,   575,    -1,    -1,
   580,    -1,   580,    -1,   510,   511,   440,   152,    -1,    -1,
    -1,   517,    -1,    -1,   448,    -1,    -1,   523,    -1,   164,
     5,   527,   528,    -1,   169,    -1,    -1,    -1,   370,    -1,
    -1,    -1,    -1,    -1,    -1,    20,    -1,   543,   183,   473,
    -1,    -1,    -1,   549,   550,    -1,    31,    -1,    -1,    34,
    35,    36,   486,   559,    39,    -1,    -1,    42,    -1,    -1,
    -1,    46,    47,    -1,    -1,   571,    -1,    -1,    -1,   575,
    -1,    -1,    -1,    -1,   580,    -1,   510,   511,    -1,    -1,
    -1,    -1,    -1,   517,    -1,    -1,    -1,    -1,    -1,   523,
   235,   236,    -1,   527,   528,   173,   174,    -1,   440,    -1,
    -1,    -1,    -1,    -1,    89,    -1,   448,    -1,    -1,   543,
    -1,    -1,    -1,    -1,    -1,   549,   550,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,   559,    -1,    -1,    -1,    -1,
    -1,   473,    -1,    -1,    -1,   280,    -1,   571,    -1,   284,
   285,   575,    -1,   288,   486,    -1,   580,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,   299,    -1,    -1,    -1,    -1,   237,
   238,   239,   240,   308,    -1,    -1,    -1,    -1,   510,   511,
    -1,    -1,    -1,    -1,    -1,   517,    -1,    -1,     6,    -1,
     8,   523,    -1,    11,    -1,   527,   528,    -1,    16,    -1,
    -1,    19,    -1,    -1,    22,    -1,    -1,   342,    -1,    -1,
    28,   543,    30,    -1,    32,    -1,    -1,   549,   550,    -1,
    38,    -1,    40,    -1,    -1,    43,    -1,   559,   363,    -1,
    48,    -1,    -1,    -1,   173,   174,    -1,    -1,    -1,   571,
    -1,    -1,    -1,   575,    -1,    -1,    -1,   382,   580,    -1,
    -1,    -1,    -1,    -1,    72,    73,    74,    75,    76,    77,
    78,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,   404,
    -1,    -1,   407,    91,    -1,   343,   344,   345,   346,   347,
   348,   349,   350,    -1,   352,   353,   354,   355,   356,   357,
   358,   359,   360,   361,   362,    -1,    -1,   432,   237,   238,
   239,   240,    52,    53,    54,    55,    56,    57,    58,    59,
    60,    61,    62,    -1,    -1,   450,    -1,    -1,     7,    -1,
    -1,    -1,   457,    -1,    13,    -1,    15,    -1,    -1,    -1,
    19,    -1,    -1,    -1,    23,    24,    -1,   472,    -1,    -1,
    90,   409,    -1,    32,    -1,    -1,    -1,    -1,    37,    -1,
    -1,    40,    41,    42,    43,    44,    -1,    -1,    -1,    48,
    49,    -1,    51,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,   508,   509,    -1,    -1,    -1,   513,    -1,
    -1,    -1,    -1,    72,    73,    74,    75,    76,    77,    78,
    79,    80,    81,    -1,    -1,    -1,    85,   465,   466,    88,
   468,    -1,    91,    -1,   343,   344,   345,   346,   347,   348,
   349,   350,    -1,   352,   353,   354,   355,   356,   357,   358,
   359,   360,   361,   362,     6,   560,     8,    -1,    -1,    11,
    -1,    -1,    -1,    -1,    16,    -1,    -1,    19,    -1,    -1,
    22,    -1,    -1,    -1,    -1,    -1,    28,    -1,    30,    -1,
    32,    -1,    -1,    -1,    -1,    -1,    38,    -1,    40,    -1,
    -1,    43,    -1,    -1,    -1,    -1,    48,    -1,    -1,    -1,
   409,    -1,    52,    53,    54,    55,    56,    57,    58,    59,
    60,    61,    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
    -1,    -1,    82,    -1,    84,    -1,    -1,    -1,    -1,    91,
    90,    91,    94,    95,    96,    97,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,   465,   466,    -1,   468,
     5,     6,     7,     8,     9,    -1,    11,    -1,    13,    14,
    15,    16,    -1,    -1,    19,    20,    -1,    22,    23,    24,
    -1,    -1,    -1,    28,    -1,    30,    31,    32,    -1,    34,
    35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
    -1,    46,    47,    48,    49,    -1,    51,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    52,    53,    54,    55,    56,    57,
    58,    59,    60,    61,    62,    -1,    -1,    72,    73,    74,
    75,    76,    77,    78,    79,    80,    81,    -1,    -1,    -1,
    85,    -1,    -1,    88,    89,    -1,    91,     5,     6,     7,
     8,     9,    90,    11,    -1,    13,    14,    15,    16,    -1,
    -1,    19,    20,    -1,    22,    23,    24,    -1,    -1,    -1,
    28,    -1,    30,    31,    32,    -1,    34,    35,    36,    37,
    38,    39,    40,    41,    42,    43,    44,    -1,    46,    47,
    48,    49,    -1,    51,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    72,    73,    74,    75,    76,    77,
    78,    79,    80,    81,    -1,    -1,    -1,    85,    -1,    -1,
    88,    89,    -1,    91,     5,     6,     7,     8,    -1,    -1,
    11,    -1,    13,    -1,    15,    16,    -1,    -1,    19,    20,
    -1,    22,    23,    24,    -1,    -1,    -1,    28,    -1,    30,
    31,    32,    -1,    34,    35,    36,    37,    38,    39,    40,
    41,    42,    43,    44,    -1,    46,    47,    48,    49,    -1,
    51,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    72,    73,    74,    75,    76,    77,    78,    79,    80,
    81,    -1,    -1,    -1,    85,    -1,    -1,    88,    89,    -1,
    91,     5,     6,     7,     8,    -1,    -1,    11,    -1,    13,
    -1,    15,    16,    -1,    -1,    19,    20,    -1,    22,    23,
    24,    -1,    -1,    -1,    28,    -1,    30,    31,    32,    -1,
    34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
    44,    -1,    46,    47,    48,    49,    -1,    51,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,    73,
    74,    75,    76,    77,    78,    79,    80,    81,    -1,    -1,
    -1,    85,    -1,    -1,    88,    89,    -1,    91,     5,     6,
     7,     8,    -1,    -1,    11,    -1,    13,    -1,    15,    16,
    -1,    -1,    19,    20,    -1,    22,    23,    24,    -1,    -1,
    -1,    28,    -1,    30,    31,    32,    -1,    34,    35,    36,
    37,    38,    39,    40,    41,    42,    43,    44,    -1,    46,
    47,    48,    49,    -1,    51,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    72,    73,    74,    75,    76,
    77,    78,    79,    80,    81,    -1,    -1,     7,    85,    -1,
    -1,    88,    89,    13,    91,    15,    -1,    -1,    -1,    19,
    -1,    -1,    -1,    23,    24,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    32,    -1,    -1,    -1,    -1,    37,    -1,    19,
    40,    41,    42,    43,    44,    -1,    -1,    -1,    48,    49,
    -1,    51,    32,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,    48,    -1,
    -1,    -1,    72,    73,    74,    75,    76,    77,    78,    79,
    80,    81,    -1,    -1,    -1,    85,    -1,    -1,    88,    19,
    -1,    91,    72,    73,    74,    75,    76,    77,    78,    79,
    80,    81,    32,    -1,    -1,    -1,    -1,    87,    88,    -1,
    40,    91,    -1,    43,    94,    95,    96,    97,    48,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    19,
    -1,    -1,    72,    73,    74,    75,    76,    77,    78,    79,
    80,    81,    32,    -1,    -1,    -1,    -1,    -1,    88,    -1,
    40,    91,    -1,    43,    94,    95,    96,    97,    48,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    19,
    -1,    -1,    72,    73,    74,    75,    76,    77,    78,    79,
    80,    81,    32,    -1,    -1,    85,    -1,    -1,    -1,    -1,
    40,    91,    -1,    43,    94,    95,    96,    97,    48,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    19,
    -1,    -1,    72,    73,    74,    75,    76,    77,    78,    79,
    80,    81,    32,    83,    -1,    -1,    -1,    -1,    -1,    -1,
    40,    91,    -1,    43,    94,    95,    96,    97,    48,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    19,
    -1,    -1,    72,    73,    74,    75,    76,    77,    78,    79,
    80,    81,    32,    83,    -1,    -1,    -1,    -1,    -1,    -1,
    40,    91,    -1,    43,    94,    95,    96,    97,    48,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    19,
    -1,    -1,    72,    73,    74,    75,    76,    77,    78,    79,
    80,    81,    32,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    40,    91,    -1,    43,    94,    95,    96,    97,    48,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    52,    53,    54,    55,
    56,    57,    58,    59,    60,    61,    62,    -1,    -1,    19,
    -1,    -1,    -1,    -1,    74,    75,    76,    77,    78,    79,
    80,    81,    32,    -1,    -1,    -1,    82,    -1,    84,    -1,
    40,    91,    -1,    43,    90,    91,    96,    97,    48,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    72,    73,    74,    75,    76,    77,    78,    79,
    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    91
};
/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
#line 3 "/usr/lib/bison.simple"

/* Skeleton output parser for bison,
   Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman

   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 1, 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., 675 Mass Ave, Cambridge, MA 02139, USA.  */


#ifndef alloca
#ifdef __GNUC__
#define alloca __builtin_alloca
#else /* not GNU C.  */
#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
#include <alloca.h>
#else /* not sparc */
#if defined (MSDOS) && !defined (__TURBOC__)
#include <malloc.h>
#else /* not MSDOS, or __TURBOC__ */
#if defined(_AIX)
#include <malloc.h>
 #pragma alloca
#else /* not MSDOS, __TURBOC__, or _AIX */
#ifdef __hpux
#ifdef __cplusplus
extern "C" {
void *alloca (unsigned int);
};
#else /* not __cplusplus */
void *alloca ();
#endif /* not __cplusplus */
#endif /* __hpux */
#endif /* not _AIX */
#endif /* not MSDOS, or __TURBOC__ */
#endif /* not sparc.  */
#endif /* not GNU C.  */
#endif /* alloca not defined.  */

/* 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.  */

/* 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	return(0)
#define YYABORT 	return(1)
#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
#define YYLEX		yylex(&yylval, &yylloc)
#else
#define YYLEX		yylex(&yylval)
#endif
#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

/* Prevent warning if -Wstrict-prototypes.  */
#ifdef __GNUC__
int yyparse (void);
#endif

#if __GNUC__ > 1		/* GNU C and GNU C++ define this.  */
#define __yy_bcopy(FROM,TO,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_bcopy (from, to, count)
     char *from;
     char *to;
     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_bcopy (char *from, char *to, int count)
{
  register char *f = from;
  register char *t = to;
  register int i = count;

  while (i-- > 0)
    *t++ = *f++;
}

#endif
#endif

#line 184 "/usr/lib/bison.simple"
int
yyparse()
{
  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;

#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");
	  return 2;
	}
      yystacksize *= 2;
      if (yystacksize > YYMAXDEPTH)
	yystacksize = YYMAXDEPTH;
      yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
      __yy_bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
      yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
      __yy_bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
#ifdef YYLSP_NEEDED
      yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
      __yy_bcopy ((char *)yyls1, (char *)yyls, size * 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 138 "parser.y"
{ yyval.expression = new COrdinalLiteral((unsigned long)yyvsp[0].longNumber); ;
    break;}
case 3:
#line 140 "parser.y"
{
      yyval.expression = new CStringLiteral(*(yyvsp[0].text));
      delete yyvsp[0].text;
    ;
    break;}
case 4:
#line 145 "parser.y"
{ yyval.expression = new COrdinalLiteral((unsigned short)yyvsp[0].longNumber); ;
    break;}
case 5:
#line 147 "parser.y"
{ yyval.expression = new COrdinalLiteral(yyvsp[0].doubleLong); ;
    break;}
case 6:
#line 149 "parser.y"
{ yyval.expression = new CFloatLiteral(yyvsp[0].floatNumber); ;
    break;}
case 7:
#line 151 "parser.y"
{ yyval.expression = new CFloatLiteral(yyvsp[0].doubleFloat); ;
    break;}
case 8:
#line 153 "parser.y"
{ yyval.expression = new COrdinalLiteral(true); ;
    break;}
case 9:
#line 155 "parser.y"
{ yyval.expression = new COrdinalLiteral(false); ;
    break;}
case 10:
#line 157 "parser.y"
{ yyval.expression = new CNull(); ;
    break;}
case 13:
#line 167 "parser.y"
{ yyval.typeSignature = new CJavaTypeSignature(CJavaTypeSignature::Boolean); ;
    break;}
case 17:
#line 178 "parser.y"
{ yyval.typeSignature = new CJavaTypeSignature(CJavaTypeSignature::Byte); ;
    break;}
case 18:
#line 180 "parser.y"
{ yyval.typeSignature = new CJavaTypeSignature(CJavaTypeSignature::Short); ;
    break;}
case 19:
#line 182 "parser.y"
{ yyval.typeSignature = new CJavaTypeSignature(CJavaTypeSignature::Integer); ;
    break;}
case 20:
#line 184 "parser.y"
{ yyval.typeSignature = new CJavaTypeSignature(CJavaTypeSignature::LongInteger); ;
    break;}
case 21:
#line 186 "parser.y"
{ yyval.typeSignature = new CJavaTypeSignature(CJavaTypeSignature::Character); ;
    break;}
case 22:
#line 191 "parser.y"
{ yyval.typeSignature = new CJavaTypeSignature(CJavaTypeSignature::Float); ;
    break;}
case 23:
#line 193 "parser.y"
{ yyval.typeSignature = new CJavaTypeSignature(CJavaTypeSignature::Double); ;
    break;}
case 24:
#line 198 "parser.y"
{
      yyval.typeSignature = new CJavaTypeSignature(*(yyvsp[0].text));
      delete yyvsp[0].text;
    ;
    break;}
case 29:
#line 219 "parser.y"
{
      yyval.typeSignature = yyvsp[-2].typeSignature;
      yyval.typeSignature->SetArrayBounds(1);
    ;
    break;}
case 30:
#line 224 "parser.y"
{
      yyval.typeSignature = new CJavaTypeSignature(*(yyvsp[-2].text), 1);
      delete yyvsp[-2].text;
    ;
    break;}
case 31:
#line 229 "parser.y"
{
      yyval.typeSignature = yyvsp[-2].typeSignature;
      yyval.typeSignature->SetArrayBounds(yyval.typeSignature->GetArrayBounds() + 1);
    ;
    break;}
case 35:
#line 246 "parser.y"
{
      yyval.text = yyvsp[-2].text;
      *(yyval.text) += kSymbolDivider;
      *(yyval.text) += *(yyvsp[0].text);
      delete yyvsp[0].text;
    ;
    break;}
case 41:
#line 268 "parser.y"
{ yydeprecated = false; ;
    break;}
case 42:
#line 272 "parser.y"
{
      gCurrentCompiler->NoPackage();
    ;
    break;}
case 43:
#line 276 "parser.y"
{
      gCurrentCompiler->SetPackage(*(yyvsp[-1].text));
      delete yyvsp[-1].text;
    ;
    break;}
case 46:
#line 289 "parser.y"
{
      gCurrentCompiler->AddClassImport(*(yyvsp[-1].text));
      delete yyvsp[-1].text;
    ;
    break;}
case 47:
#line 297 "parser.y"
{
      gCurrentCompiler->AddPackageImport(*(yyvsp[-3].text));
      delete yyvsp[-3].text;
    ;
    break;}
case 50:
#line 309 "parser.y"
{ yyval.modifiers = new CJavaAccessFlags(); ;
    break;}
case 53:
#line 316 "parser.y"
{
      yyval.modifiers = yyvsp[-1].modifiers;
      yyval.modifiers->SetFlags(yyvsp[-1].modifiers->GetJavaFlags() | yyvsp[0].modifiers->GetJavaFlags());
      delete yyvsp[0].modifiers;
    ;
    break;}
case 54:
#line 325 "parser.y"
{
      yyval.modifiers = new CJavaAccessFlags();
      yyval.modifiers->fPublic = 1;
    ;
    break;}
case 55:
#line 330 "parser.y"
{
      yyval.modifiers = new CJavaAccessFlags();
      yyval.modifiers->fProtected = 1;
    ;
    break;}
case 56:
#line 335 "parser.y"
{
      yyval.modifiers = new CJavaAccessFlags();
      yyval.modifiers->fPrivate = 1;
    ;
    break;}
case 57:
#line 340 "parser.y"
{
      yyval.modifiers = new CJavaAccessFlags();
      yyval.modifiers->fStatic = 1;
    ;
    break;}
case 58:
#line 345 "parser.y"
{
      yyval.modifiers = new CJavaAccessFlags();
      yyval.modifiers->fAbstract = 1;
    ;
    break;}
case 59:
#line 350 "parser.y"
{
      yyval.modifiers = new CJavaAccessFlags();
      yyval.modifiers->fFinal = 1;
    ;
    break;}
case 60:
#line 355 "parser.y"
{
      yyval.modifiers = new CJavaAccessFlags();
      yyval.modifiers->fNative = 1;
    ;
    break;}
case 61:
#line 360 "parser.y"
{
      yyval.modifiers = new CJavaAccessFlags();
      yyval.modifiers->fSynchronized = 1;
    ;
    break;}
case 62:
#line 365 "parser.y"
{
      yyval.modifiers = new CJavaAccessFlags();
      yyval.modifiers->fTransient = 1;
    ;
    break;}
case 63:
#line 370 "parser.y"
{
      yyval.modifiers = new CJavaAccessFlags();
      yyval.modifiers->fVolatile = 1;
    ;
    break;}
case 64:
#line 378 "parser.y"
{
      CJavaAccessFlags usedFlags(*yyvsp[-4].modifiers);
      usedFlags.fPublic = usedFlags.fFinal =
	usedFlags.fAbstract = usedFlags.fStatic = 0;
      if (usedFlags.Count() > 0) {
	string errorMessage("Invalid modifier use in class declaration: ");
	errorMessage += usedFlags.FlagNames();
	yyerror(errorMessage.c_str());
	YYERROR;
      }
      gCurrentCompiler->StartClass(*(yyvsp[-2].text), yyvsp[-4].modifiers, yyvsp[-1].text, yyvsp[0].stringList, yydeprecated);
      delete yyvsp[-2].text;
    ;
    break;}
case 65:
#line 392 "parser.y"
{ gCurrentCompiler->EndClass(); ;
    break;}
case 66:
#line 396 "parser.y"
{ yyval.text = 0; ;
    break;}
case 68:
#line 402 "parser.y"
{ yyval.text = yyvsp[0].text; ;
    break;}
case 69:
#line 406 "parser.y"
{ yyval.stringList = 0; ;
    break;}
case 71:
#line 412 "parser.y"
{ yyval.stringList = yyvsp[0].stringList; ;
    break;}
case 72:
#line 417 "parser.y"
{
      yyval.stringList = new deque<unicode_string>;
      yyval.stringList->push_back(*(yyvsp[0].text));
      delete yyvsp[0].text;
    ;
    break;}
case 73:
#line 423 "parser.y"
{
      yyval.stringList = yyvsp[-2].stringList;
      yyval.stringList->push_back(*(yyvsp[0].text));
      delete yyvsp[0].text;
    ;
    break;}
case 77:
#line 440 "parser.y"
{ yydeprecated = false; ;
    break;}
case 79:
#line 443 "parser.y"
{ yydeprecated = false; ;
    break;}
case 81:
#line 446 "parser.y"
{ yydeprecated = false; ;
    break;}
case 84:
#line 452 "parser.y"
{
    assert(gCurrentCompiler != 0);
    gCurrentCompiler->ParseWarning(yylineno,
	   "Warning:  illegal use of semicolon in class body.", yytext);
  ;
    break;}
case 89:
#line 493 "parser.y"
{
      CJavaAccessFlags usedFlags(*yyvsp[-2].modifiers);
      usedFlags.fPublic = usedFlags.fProtected = usedFlags.fPrivate =
          usedFlags.fStatic = usedFlags.fFinal = usedFlags.fTransient =
          usedFlags.fVolatile = 0;
      if (usedFlags.Count() > 0) {
	string errorMessage("Invalid modifier use in field declaration: ");
	errorMessage += usedFlags.FlagNames();
	yyerror(errorMessage.c_str());
	YYERROR;
      }
      gCurrentCompiler->AddField(new CDeclarationStatement(yyvsp[-1].variableList, yyvsp[-2].modifiers,
							   yydeprecated));
    ;
    break;}
case 90:
#line 511 "parser.y"
{
      yyval.variableList = yyvsp[0].variableList;
      // take off the bogus entry added in PartialVariable
      delete yyval.variableList->front();  
      yyval.variableList->pop_front();
    ;
    break;}
case 91:
#line 521 "parser.y"
{
      if (yyvsp[-3].typeSignature->GetBaseType() == CJavaTypeSignature::Void) {
	yyerror("Invalid use of 'void' for a variable type.");
	YYERROR;
      }
      yyval.variableList = new deque<CVariableDeclaration*>;
      // push a bogus entry at the beginning, just to hold the base type of
      // this variable declaration sequence.
      yyval.variableList->push_front(new CVariableDeclaration(*(yyvsp[-3].typeSignature), unicode_string()));
      yyvsp[-3].typeSignature->SetArrayBounds(yyvsp[-3].typeSignature->GetArrayBounds() + yyvsp[-1].longNumber);
      CArrayInitializer* arrayInitializer= DYNAMIC_CAST(CArrayInitializer, yyvsp[0].expression);
      if (arrayInitializer != 0) {
	if (yyvsp[-3].typeSignature->GetArrayBounds() == 0) {
	  string errorMessage("Cannot use array initializer with non-array ");
	  errorMessage += ::UnicodeToUTF(*yyvsp[-2].text);
	  yyerror(errorMessage.c_str());
	  YYERROR;
	} else {
	  arrayInitializer->SetArrayType(*(yyvsp[-3].typeSignature));
	}
      }
      
      CVariableDeclaration declaration(*(yyvsp[-3].typeSignature), *(yyvsp[-2].text));
      if (gCurrentCompiler->InStatementBlock()) {
	if (gCurrentCompiler->LookupLocalVariable(*yyvsp[-2].text) != 0) {
	  string errorMessage = ::UnicodeToUTF(*yyvsp[-2].text);
	  errorMessage += " already declared in this scope.";
	  yyerror(errorMessage.c_str());
	  YYERROR;
	} else {
	  gCurrentCompiler->AddLocalVariable(declaration);
	}
      }
      CExpression* initializer = yyvsp[0].expression;
      if (initializer != 0) {
	initializer =
	  new CBinaryExpression(::InterpretSymbolExpression(*(yyvsp[-2].text)),
				'=', initializer);
      }
      yyval.variableList->push_back(new CVariableDeclaration(*(yyvsp[-3].typeSignature), *(yyvsp[-2].text), initializer));
      delete yyvsp[-3].typeSignature;
      delete yyvsp[-2].text;
    ;
    break;}
case 92:
#line 565 "parser.y"
{
      yyval.variableList = yyvsp[-4].variableList;
      CJavaTypeSignature thisType = (yyval.variableList)->front()->GetType();
      thisType.SetArrayBounds(thisType.GetArrayBounds() + yyvsp[-1].longNumber);
      CArrayInitializer* arrayInitializer= DYNAMIC_CAST(CArrayInitializer, yyvsp[0].expression);
      if (arrayInitializer != 0) {
	if (thisType.GetArrayBounds() == 0) {
	  string errorMessage("Cannot use array initializer with non-array ");
	  errorMessage += ::UnicodeToUTF(*yyvsp[-2].text);
	  yyerror(errorMessage.c_str());
	  YYERROR;	  
	} else {
	  arrayInitializer->SetArrayType(thisType);
	}
      }

      CVariableDeclaration declaration(thisType, *(yyvsp[-2].text));
      if (gCurrentCompiler->InStatementBlock()) {
	if (gCurrentCompiler->LookupLocalVariable(*yyvsp[-2].text) != 0) {
	  string errorMessage = ::UnicodeToUTF(*yyvsp[-2].text);
	  errorMessage += " already declared in this scope.";
	  yyerror(errorMessage.c_str());
	  YYERROR;
	} else {
	  gCurrentCompiler->AddLocalVariable(declaration);
	}
      }
      CExpression* initializer = yyvsp[0].expression;
      if (initializer != 0) {
	initializer =
	  new CBinaryExpression(::InterpretSymbolExpression(*(yyvsp[-2].text)),
				'=', initializer);
      }
      yyval.variableList->push_back(new CVariableDeclaration(thisType, *(yyvsp[-2].text), initializer));
      delete yyvsp[-2].text;
    ;
    break;}
case 93:
#line 605 "parser.y"
{
      if (yyvsp[-3].typeSignature->GetBaseType() == CJavaTypeSignature::Void) {
	yyerror("Invalid use of 'void' for a variable type.");
	YYERROR;
      }
      yyval.variableList = new deque<CVariableDeclaration*>;
      // push a bogus entry at the beginning, just to hold the base type of
      // this variable declaration sequence.
      yyval.variableList->push_front(new CVariableDeclaration(*(yyvsp[-3].typeSignature), unicode_string(),
					      0, true));
      yyvsp[-3].typeSignature->SetArrayBounds(yyvsp[-3].typeSignature->GetArrayBounds() + yyvsp[-1].longNumber);
      CArrayInitializer* arrayInitializer= DYNAMIC_CAST(CArrayInitializer, yyvsp[0].expression);
      if (arrayInitializer != 0) {
	if (yyvsp[-3].typeSignature->GetArrayBounds() == 0) {
	  string errorMessage("Cannot use array initializer with non-array ");
	  errorMessage += ::UnicodeToUTF(*yyvsp[-2].text);
	  yyerror(errorMessage.c_str());
	  YYERROR;
	} else {
	  arrayInitializer->SetArrayType(*(yyvsp[-3].typeSignature));
	}
      }
      
      if (gCurrentCompiler->InStatementBlock()) {
	if (gCurrentCompiler->LookupLocalVariable(*yyvsp[-2].text) != 0) {
	  string errorMessage = ::UnicodeToUTF(*yyvsp[-2].text);
	  errorMessage += " already declared in this scope.";
	  yyerror(errorMessage.c_str());
	  YYERROR;
	} else {
	  CVariableDeclaration declaration(*(yyvsp[-3].typeSignature), *(yyvsp[-2].text), 0, true);
	  gCurrentCompiler->AddLocalVariable(declaration);
	}
      }
      CExpression* initializer = yyvsp[0].expression;
      if (initializer != 0) {
	CExpression* expression = ::InterpretSymbolExpression(*(yyvsp[-2].text));
	expression->SetLValue(true);
	initializer = new CBinaryExpression(expression, '=', initializer);
      } else {
	gCurrentCompiler->ParseWarning(yylineno,
	       "Warning:  final variable without initializer.", yytext);
      }
      yyval.variableList->push_back(new CVariableDeclaration(*(yyvsp[-3].typeSignature), *(yyvsp[-2].text), initializer, true));
      delete yyvsp[-3].typeSignature;
      delete yyvsp[-2].text;
    ;
    break;}
case 94:
#line 653 "parser.y"
{
      yyval.variableList = yyvsp[-4].variableList;
      CJavaTypeSignature thisType = (yyval.variableList)->front()->GetType();
      thisType.SetArrayBounds(thisType.GetArrayBounds() + yyvsp[-1].longNumber);
      CArrayInitializer* arrayInitializer= DYNAMIC_CAST(CArrayInitializer, yyvsp[0].expression);
      if (arrayInitializer != 0) {
	if (thisType.GetArrayBounds() == 0) {
	  string errorMessage("Cannot use array initializer with non-array ");
	  errorMessage += ::UnicodeToUTF(*yyvsp[-2].text);
	  yyerror(errorMessage.c_str());
	  YYERROR;	  
	} else {
	  arrayInitializer->SetArrayType(thisType);
	}
      }

      if (gCurrentCompiler->InStatementBlock()) {
	if (gCurrentCompiler->LookupLocalVariable(*yyvsp[-2].text) != 0) {
	  string errorMessage = ::UnicodeToUTF(*yyvsp[-2].text);
	  errorMessage += " already declared in this scope.";
	  yyerror(errorMessage.c_str());
	  YYERROR;
	} else {
	  CVariableDeclaration declaration(thisType, *(yyvsp[-2].text), 0, true);
	  gCurrentCompiler->AddLocalVariable(declaration);
	}
      }
      CExpression* initializer = yyvsp[0].expression;
      if (initializer != 0) {
	CExpression* expression = ::InterpretSymbolExpression(*(yyvsp[-2].text));
	expression->SetLValue(true);
	initializer = new CBinaryExpression(expression, '=', initializer);
      } else {
	gCurrentCompiler->ParseWarning(yylineno,
	       "Warning:  final variable without initializer.", yytext);
      }
      yyval.variableList->push_back(new CVariableDeclaration(thisType, *(yyvsp[-2].text),
					     initializer, true));
      delete yyvsp[-2].text;
    ;
    break;}
case 95:
#line 696 "parser.y"
{ yyval.expression = 0; ;
    break;}
case 96:
#line 698 "parser.y"
{ yyval.expression = yyvsp[0].expression; ;
    break;}
case 99:
#line 711 "parser.y"
{ yyval.expression = yyvsp[-1].expression; ;
    break;}
case 100:
#line 715 "parser.y"
{ yyval.expression = new CArrayInitializer(); ;
    break;}
case 101:
#line 717 "parser.y"
{ yyval.expression = new CArrayInitializer(yyvsp[-1].expressionList); ;
    break;}
case 102:
#line 722 "parser.y"
{
      yyval.expressionList = new ExpressionList();
      yyval.expressionList->push_back(yyvsp[0].expression);
    ;
    break;}
case 103:
#line 727 "parser.y"
{
      yyval.expressionList = yyvsp[-2].expressionList;
      yyval.expressionList->push_back(yyvsp[0].expression);
    ;
    break;}
case 106:
#line 739 "parser.y"
{ gCurrentCompiler->EndFunction(yyvsp[0].compoundStatement); ;
    break;}
case 107:
#line 746 "parser.y"
{
      const CIntermediateClass* currentClass =
	gCurrentCompiler->GetCurrentClass();
      if (currentClass->GetShortName() == *(yyvsp[-5].text)) {
	string errorMessage("Invalid return value in constructor.");
	yyerror(errorMessage.c_str());
	YYERROR;
      }
      yyvsp[-6].typeSignature->SetArrayBounds(yyvsp[-6].typeSignature->GetArrayBounds() + yyvsp[-1].longNumber);
      CJavaAccessFlags usedFlags = *(yyvsp[-7].modifiers);
      usedFlags.fPublic = usedFlags.fProtected = usedFlags.fPrivate =
          usedFlags.fStatic = usedFlags.fFinal = usedFlags.fAbstract =
          usedFlags.fNative = usedFlags.fSynchronized = 0;
      if (usedFlags.Count() > 0) {
	string errorMessage("Invalid modifier use in method declaration: ");
	errorMessage += usedFlags.FlagNames();
	yyerror(errorMessage.c_str());
	YYERROR;
      }
      gCurrentCompiler->StartFunction(*(yyvsp[-6].typeSignature), *(yyvsp[-5].text), *(yyvsp[-7].modifiers), yyvsp[-3].fieldList, yyvsp[0].stringList,
				      yydeprecated);
      delete yyvsp[-7].modifiers;
      delete yyvsp[-6].typeSignature;
      delete yyvsp[-5].text;
    ;
    break;}
case 108:
#line 774 "parser.y"
{
      const CIntermediateClass* currentClass =
	gCurrentCompiler->GetCurrentClass();
      if (currentClass->GetName() == *(yyvsp[-5].text)) {
	string errorMessage("Invalid use of return value with constructor.");
	yyerror(errorMessage.c_str());
	YYERROR;
      }
      if (yyvsp[-1].longNumber > 0) {
	yyerror("Invalid return value of void array.");
	YYERROR;
      }
      CJavaAccessFlags usedFlags = *(yyvsp[-7].modifiers);
      usedFlags.fPublic = usedFlags.fProtected = usedFlags.fPrivate =
          usedFlags.fStatic = usedFlags.fFinal = usedFlags.fAbstract =
          usedFlags.fNative = usedFlags.fSynchronized = 0;
      if (usedFlags.Count() > 0) {
	string errorMessage("Invalid modifier use in method declaration: ");
	errorMessage += usedFlags.FlagNames();
	yyerror(errorMessage.c_str());
	YYERROR;
      }
      gCurrentCompiler->StartFunction(CJavaTypeSignature::kVoid,
				      *(yyvsp[-5].text), *(yyvsp[-7].modifiers), yyvsp[-3].fieldList, yyvsp[0].stringList, yydeprecated);
      delete yyvsp[-7].modifiers;
      delete yyvsp[-5].text;
    ;
    break;}
case 109:
#line 804 "parser.y"
{ yyval.stringList = 0; ;
    break;}
case 111:
#line 809 "parser.y"
{ yyval.fieldList = 0; ;
    break;}
case 113:
#line 815 "parser.y"
{
      yyval.fieldList = new deque<CVariableDeclaration>(1, *(yyvsp[0].fieldSignature));
      delete yyvsp[0].fieldSignature;
    ;
    break;}
case 114:
#line 820 "parser.y"
{ 
      yyval.fieldList = yyvsp[-2].fieldList;
      for (deque<CVariableDeclaration>::iterator parameterIter = yyvsp[-2].fieldList->begin();
	   parameterIter != yyvsp[-2].fieldList->end(); ++parameterIter) {
	if ((*parameterIter).GetName() == (*(yyvsp[0].fieldSignature)).GetName()) {
	  string errorString("Invalid re-use of parameter name: ");
	  errorString += ::UnicodeToString((*(yyvsp[0].fieldSignature)).GetName());
	  yyerror(errorString.c_str());
	  YYERROR;	  
	}
      }
      yyval.fieldList->push_back(*(yyvsp[0].fieldSignature));
      delete yyvsp[0].fieldSignature;
    ;
    break;}
case 115:
#line 838 "parser.y"
{
      if (yyvsp[-2].typeSignature->GetBaseType() == CJavaTypeSignature::Void) {
	yyerror("Invalid use of 'void' for a parameter type.");
	YYERROR;
      }
      yyvsp[-2].typeSignature->SetArrayBounds(yyvsp[-2].typeSignature->GetArrayBounds() + yyvsp[0].longNumber);
      yyval.fieldSignature = new CVariableDeclaration(*(yyvsp[-2].typeSignature), *(yyvsp[-1].text));
      delete yyvsp[-2].typeSignature;
      delete yyvsp[-1].text;
    ;
    break;}
case 116:
#line 849 "parser.y"
{
      if (yyvsp[-2].typeSignature->GetBaseType() == CJavaTypeSignature::Void) {
	yyerror("Invalid use of 'void' for a parameter type.");
	YYERROR;
      }
      yyvsp[-2].typeSignature->SetArrayBounds(yyvsp[-2].typeSignature->GetArrayBounds() + yyvsp[0].longNumber);
      yyval.fieldSignature = new CVariableDeclaration(*(yyvsp[-2].typeSignature), *(yyvsp[-1].text), 0, true);
      delete yyvsp[-2].typeSignature;
      delete yyvsp[-1].text;
    ;
    break;}
case 117:
#line 863 "parser.y"
{ yyval.stringList = yyvsp[0].stringList; ;
    break;}
case 118:
#line 868 "parser.y"
{
      yyval.stringList = new deque<unicode_string>;
      yyval.stringList->push_back(*(yyvsp[0].text));
      delete yyvsp[0].text;
    ;
    break;}
case 119:
#line 874 "parser.y"
{
      yyval.stringList = yyvsp[-2].stringList;
      yyval.stringList->push_back(*(yyvsp[0].text));
      delete yyvsp[0].text;
    ;
    break;}
case 121:
#line 884 "parser.y"
{ yyval.compoundStatement = 0; ;
    break;}
case 122:
#line 889 "parser.y"
{ gCurrentCompiler->AddStaticCode(yyvsp[0].compoundStatement); ;
    break;}
case 123:
#line 894 "parser.y"
{
      const CIntermediateClass* currentClass =
	gCurrentCompiler->GetCurrentClass();
      if (!(currentClass->GetShortName() == *(yyvsp[0].text))) {
	string errorMessage("No type given for function: ");
	errorMessage += ::UnicodeToString(*(yyvsp[0].text));
	yyerror(errorMessage.c_str());
	YYERROR;
      }
      delete yyvsp[0].text;
    ;
    break;}
case 124:
#line 906 "parser.y"
{
      CJavaAccessFlags usedFlags(*yyvsp[-6].modifiers);
      usedFlags.fPublic = usedFlags.fProtected = usedFlags.fPrivate = 0;
      if (usedFlags.Count() > 0) {
	string errorMessage("Invalid modifier use in constructor: ");
	errorMessage += usedFlags.FlagNames();
	yyerror(errorMessage.c_str());
	YYERROR;
      }
      gCurrentCompiler->StartConstructor(*yyvsp[-6].modifiers, yyvsp[-2].fieldList, yyvsp[0].stringList, yydeprecated);
      delete yyvsp[-6].modifiers;
    ;
    break;}
case 125:
#line 919 "parser.y"
{ 
      CCompoundStatement* statement = new CCompoundStatement(yyvsp[0].statementList);
      gCurrentCompiler->EndFunction(statement);
    ;
    break;}
case 126:
#line 933 "parser.y"
{
      yyval.statementList = yyvsp[-1].statementList;
    ;
    break;}
case 127:
#line 937 "parser.y"
{
      yyval.statementList = yyvsp[-1].statementList;
      yyval.statementList->push_front(yyvsp[-2].statement);
    ;
    break;}
case 128:
#line 945 "parser.y"
{
      yyval.statement = new CExplicitConstructorCall(CExplicitConstructorCall::kThis, yyvsp[-2].expressionList);
    ;
    break;}
case 129:
#line 949 "parser.y"
{
      yyval.statement = new CExplicitConstructorCall(CExplicitConstructorCall::kSuper, yyvsp[-2].expressionList);
    ;
    break;}
case 130:
#line 955 "parser.y"
{ yyval.expressionList = 0; ;
    break;}
case 132:
#line 961 "parser.y"
{
      CJavaAccessFlags usedFlags(*(yyvsp[-3].modifiers));
      usedFlags.fPublic = usedFlags.fAbstract = 0;
      yyvsp[-3].modifiers->fAbstract = yyvsp[-3].modifiers->fInterface = 1;
      if (usedFlags.Count() > 0) {
	string errorMessage("Invalid interface modifier use: ");
	errorMessage += usedFlags.FlagNames();
	yyerror(errorMessage.c_str());
	YYERROR;
      }
      gCurrentCompiler->StartInterface(*(yyvsp[-1].text), yyvsp[-3].modifiers, yyvsp[0].stringList, yydeprecated);
    ;
    break;}
case 133:
#line 974 "parser.y"
{ gCurrentCompiler->EndClass(); ;
    break;}
case 134:
#line 978 "parser.y"
{ yyval.stringList = 0; ;
    break;}
case 136:
#line 984 "parser.y"
{
      yyval.stringList = new deque<unicode_string>;
      yyval.stringList->push_back(*(yyvsp[0].text));
      delete yyvsp[0].text;
    ;
    break;}
case 137:
#line 990 "parser.y"
{
      yyval.stringList = yyvsp[-2].stringList;
      yyval.stringList->push_back(*(yyvsp[0].text));
      delete yyvsp[0].text;
    ;
    break;}
case 146:
#line 1021 "parser.y"
{ gCurrentCompiler->EndFunction(0); ;
    break;}
case 147:
#line 1026 "parser.y"
{ gCurrentCompiler->PushLocalScope(); ;
    break;}
case 148:
#line 1028 "parser.y"
{
      gCurrentCompiler->PopLocalScope();
      yyval.compoundStatement = new CCompoundStatement(yyvsp[-1].statementList);
    ;
    break;}
case 149:
#line 1035 "parser.y"
{ yyval.statementList = new StatementList(); ;
    break;}
case 151:
#line 1041 "parser.y"
{
      yyval.statementList = new StatementList();
      if (yyvsp[0].statement != 0) {
	yyval.statementList->push_front(yyvsp[0].statement);
      }
    ;
    break;}
case 152:
#line 1048 "parser.y"
{
      yyval.statementList = yyvsp[-1].statementList;
      if (yyvsp[0].statement != 0) {
	yyval.statementList->push_back(yyvsp[0].statement);
      }
    ;
    break;}
case 155:
#line 1060 "parser.y"
{ yyval.statement = 0; ;
    break;}
case 156:
#line 1065 "parser.y"
{ yyval.statement = new CDeclarationStatement(yyvsp[-1].variableList); ;
    break;}
case 157:
#line 1067 "parser.y"
{ yyval.statement = new CDeclarationStatement(yyvsp[-1].variableList); ;
    break;}
case 159:
#line 1076 "parser.y"
{
      yyval.variableList = yyvsp[0].variableList;
      // take off the bogus entry added in PartialVariable
      delete yyval.variableList->front();  
      yyval.variableList->pop_front();
    ;
    break;}
case 171:
#line 1103 "parser.y"
{ yyval.statement = yyvsp[0].compoundStatement; ;
    break;}
case 182:
#line 1118 "parser.y"
{ yyval.statement = 0; ;
    break;}
case 183:
#line 1123 "parser.y"
{ yyval.statement = new CLabelStatement(yyvsp[-2].text, yyvsp[0].statement); ;
    break;}
case 184:
#line 1128 "parser.y"
{ yyval.statement = new CLabelStatement(yyvsp[-2].text, yyvsp[0].statement); ;
    break;}
case 185:
#line 1133 "parser.y"
{ yyval.statement = new CExpressionStatement(yyvsp[-1].expression); ;
    break;}
case 193:
#line 1148 "parser.y"
{ yyval.statement = new CIfStatement(yyvsp[-2].expression, yyvsp[0].statement); ;
    break;}
case 194:
#line 1153 "parser.y"
{ yyval.statement = new CIfStatement(yyvsp[-4].expression, yyvsp[-2].statement, yyvsp[0].statement); ;
    break;}
case 195:
#line 1158 "parser.y"
{ yyval.statement = new CIfStatement(yyvsp[-4].expression, yyvsp[-2].statement, yyvsp[0].statement); ;
    break;}
case 196:
#line 1163 "parser.y"
{ yyval.statement = new CSwitch(yyvsp[-2].expression, yyvsp[0].compoundStatement); ;
    break;}
case 197:
#line 1168 "parser.y"
{ yyval.compoundStatement = new CCompoundStatement(yyvsp[-1].statementList); ;
    break;}
case 198:
#line 1172 "parser.y"
{ yyval.statementList = new StatementList(); ;
    break;}
case 200:
#line 1178 "parser.y"
{
      yyval.statementList = new StatementList();
      if (yyvsp[0].statement != 0) {
	yyval.statementList->push_back(yyvsp[0].statement);
      }
    ;
    break;}
case 201:
#line 1185 "parser.y"
{
      yyval.statementList = yyvsp[-1].statementList;
      if (yyvsp[0].statement != 0) {
	yyval.statementList->push_back(yyvsp[0].statement);
      }
    ;
    break;}
case 203:
#line 1196 "parser.y"
{ yyval.statement = new CLabelStatement(yyvsp[-1].expression, 0); ;
    break;}
case 204:
#line 1198 "parser.y"
{ yyval.statement = new CLabelStatement(0); ;
    break;}
case 205:
#line 1233 "parser.y"
{ yyval.statement = new CWhileStatement(yyvsp[0].statement, yyvsp[-2].expression); ;
    break;}
case 206:
#line 1238 "parser.y"
{ yyval.statement = new CWhileStatement(yyvsp[0].statement, yyvsp[-2].expression); ;
    break;}
case 207:
#line 1243 "parser.y"
{ yyval.statement = new CDoStatement(yyvsp[-5].statement, yyvsp[-2].expression); ;
    break;}
case 208:
#line 1249 "parser.y"
{
      yyval.statement = new CForStatement(yyvsp[-6].statement, yyvsp[-4].expression, yyvsp[-2].expressionList, yyvsp[0].statement);
      gCurrentCompiler->PopLocalScope();
    ;
    break;}
case 209:
#line 1258 "parser.y"
{
      yyval.statement = new CForStatement(yyvsp[-6].statement, yyvsp[-4].expression, yyvsp[-2].expressionList, yyvsp[0].statement);
      gCurrentCompiler->PopLocalScope();
    ;
    break;}
case 210:
#line 1265 "parser.y"
{ gCurrentCompiler->PushLocalScope(); ;
    break;}
case 211:
#line 1269 "parser.y"
{ yyval.statement = 0; ;
    break;}
case 213:
#line 1275 "parser.y"
{
      StatementList* statements = new StatementList;
      for (ExpressionList::iterator i = yyvsp[0].expressionList->begin(); i != yyvsp[0].expressionList->end(); ++i) {
	statements->push_back(new CExpressionStatement(*i));
      }
      delete yyvsp[0].expressionList;
      yyval.statement = new CCompoundStatement(statements);
    ;
    break;}
case 214:
#line 1284 "parser.y"
{ yyval.statement = new CDeclarationStatement(yyvsp[0].variableList); ;
    break;}
case 215:
#line 1288 "parser.y"
{ yyval.expression = 0; ;
    break;}
case 217:
#line 1293 "parser.y"
{ yyval.expressionList = 0; ;
    break;}
case 220:
#line 1303 "parser.y"
{
      yyval.expressionList = new ExpressionList;
      yyval.expressionList->push_front(yyvsp[0].expression);
    ;
    break;}
case 221:
#line 1308 "parser.y"
{
      yyval.expressionList = yyvsp[-2].expressionList;
      yyval.expressionList->push_back(yyvsp[0].expression);
    ;
    break;}
case 222:
#line 1316 "parser.y"
{ yyval.statement = new CBranchStatement(CBranchStatement::kBreak); ;
    break;}
case 223:
#line 1318 "parser.y"
{ yyval.statement = new CBranchStatement(CBranchStatement::kBreak, yyvsp[-1].text); ;
    break;}
case 224:
#line 1323 "parser.y"
{ yyval.statement = new CBranchStatement(CBranchStatement::kContinue); ;
    break;}
case 225:
#line 1325 "parser.y"
{ yyval.statement = new CBranchStatement(CBranchStatement::kContinue, yyvsp[-1].text); ;
    break;}
case 226:
#line 1330 "parser.y"
{ yyval.statement = new CReturnStatement(); ;
    break;}
case 227:
#line 1332 "parser.y"
{ yyval.statement = new CReturnStatement(yyvsp[-1].expression); ;
    break;}
case 228:
#line 1337 "parser.y"
{ yyval.statement = new CThrowStatement(yyvsp[-1].expression); ;
    break;}
case 229:
#line 1342 "parser.y"
{ yyval.statement = new CSynchronized(yyvsp[-2].expression, yyvsp[0].compoundStatement, gCurrentCompiler->AddUnnamedVariable()); ;
    break;}
case 230:
#line 1347 "parser.y"
{
      unsigned short handlerVariable, subroutineVariable;
      yyval.statement = new CTryStatement(yyvsp[-1].compoundStatement, yyvsp[0].catchList, 0, handlerVariable, subroutineVariable);
    ;
    break;}
case 231:
#line 1352 "parser.y"
{
      unsigned short handlerVariable, subroutineVariable;
      handlerVariable = gCurrentCompiler->AddUnnamedVariable();
      subroutineVariable = gCurrentCompiler->AddUnnamedVariable();
      yyval.statement = new CTryStatement(yyvsp[-2].compoundStatement, yyvsp[-1].catchList, yyvsp[0].compoundStatement, handlerVariable, subroutineVariable);
    ;
    break;}
case 232:
#line 1361 "parser.y"
{ yyval.catchList = 0; ;
    break;}
case 234:
#line 1367 "parser.y"
{
      yyval.catchList = new deque<CCatchClause*>;
      yyval.catchList->push_back(yyvsp[0].catchClause);
    ;
    break;}
case 235:
#line 1372 "parser.y"
{
      yyval.catchList = yyvsp[-1].catchList;
      yyval.catchList->push_back(yyvsp[0].catchClause);
    ;
    break;}
case 236:
#line 1380 "parser.y"
{ gCurrentCompiler->PushLocalScope(); ;
    break;}
case 237:
#line 1382 "parser.y"
{ 
      if (gCurrentCompiler->LookupLocalVariable(yyvsp[-1].fieldSignature->GetName()) != 0) {
	string errorMessage = ::UnicodeToUTF(yyvsp[-1].fieldSignature->GetName());
	errorMessage += " already declared in this scope.";
	yyerror(errorMessage.c_str());
	YYERROR;
      } else {
	yyval.longNumber = gCurrentCompiler->AddLocalVariable(*(yyvsp[-1].fieldSignature));
      }
    ;
    break;}
case 238:
#line 1393 "parser.y"
{
      gCurrentCompiler->PopLocalScope();
      yyval.catchClause = new CCatchClause(yyvsp[-1].longNumber, yyvsp[-3].fieldSignature->GetType(), yyvsp[0].compoundStatement);
    ;
    break;}
case 239:
#line 1401 "parser.y"
{ yyval.compoundStatement = yyvsp[0].compoundStatement; ;
    break;}
case 243:
#line 1412 "parser.y"
{ yyval.expression = new CSpecialExpression(CSpecialExpression::kThis); ;
    break;}
case 244:
#line 1414 "parser.y"
{
      yyval.expression = yyvsp[-1].expression;
    ;
    break;}
case 249:
#line 1425 "parser.y"
{
      yyval.expression = new CNewObject(*(yyvsp[-3].text), yyvsp[-1].expressionList);
      delete yyvsp[-3].text;
    ;
    break;}
case 250:
#line 1430 "parser.y"
{
      yyval.text =
	new unicode_string(gCurrentCompiler->StartAnonymousClass(yyvsp[-4].text));
    ;
    break;}
case 251:
#line 1435 "parser.y"
{
      gCurrentCompiler->EndClass();
      yyval.expression = new CNewObject(*(yyvsp[-2].text), yyvsp[-5].expressionList);
      delete yyvsp[-2].text;
    ;
    break;}
case 252:
#line 1441 "parser.y"
{
      yyval.expression = new CNewObject(*(yyvsp[-3].text), yyvsp[-1].expressionList, yyvsp[-5].expression);
      delete yyvsp[-3].text;
    ;
    break;}
case 253:
#line 1446 "parser.y"
{
      yyval.text =
	new unicode_string(gCurrentCompiler->StartAnonymousClass(yyvsp[-4].text));
    ;
    break;}
case 254:
#line 1451 "parser.y"
{
      gCurrentCompiler->EndClass();
      yyval.expression = new CNewObject(*(yyvsp[-2].text), yyvsp[-5].expressionList, yyvsp[-9].expression);
      delete yyvsp[-3].text;
    ;
    break;}
case 255:
#line 1460 "parser.y"
{
      yyval.expressionList = new ExpressionList;
      yyval.expressionList->push_back(yyvsp[0].expression);
    ;
    break;}
case 256:
#line 1465 "parser.y"
{
      yyval.expressionList = yyvsp[-2].expressionList;
      yyval.expressionList->push_back(yyvsp[0].expression);
    ;
    break;}
case 257:
#line 1473 "parser.y"
{
      if (yyvsp[-2].typeSignature->GetBaseType() == CJavaTypeSignature::Void) {
	yyerror("Invalid array creation using 'void' type.");
	YYERROR;
      }
      yyvsp[-2].typeSignature->SetArrayBounds(yyvsp[-1].expressionList->size() + yyvsp[0].longNumber);
      yyval.expression = new CNewArray(*(yyvsp[-2].typeSignature), yyvsp[-1].expressionList);
      delete yyvsp[-2].typeSignature;
    ;
    break;}
case 258:
#line 1483 "parser.y"
{
      int arrayDimensions = yyvsp[-1].expressionList->size() + yyvsp[0].longNumber;
      CJavaTypeSignature tempSignature(*(yyvsp[-2].text), arrayDimensions);
      yyval.expression = new CNewArray(tempSignature, yyvsp[-1].expressionList);
      delete yyvsp[-2].text;
    ;
    break;}
case 259:
#line 1493 "parser.y"
{
      yyval.expressionList = new ExpressionList();
      yyval.expressionList->push_front(yyvsp[0].expression);
    ;
    break;}
case 260:
#line 1498 "parser.y"
{
      yyval.expressionList = yyvsp[-1].expressionList;
      yyval.expressionList->push_back(yyvsp[0].expression);
    ;
    break;}
case 261:
#line 1506 "parser.y"
{ yyval.expression = yyvsp[-1].expression; ;
    break;}
case 262:
#line 1510 "parser.y"
{ yyval.longNumber = 0; ;
    break;}
case 264:
#line 1516 "parser.y"
{ yyval.longNumber = 1; ;
    break;}
case 265:
#line 1518 "parser.y"
{ yyval.longNumber = yyvsp[-2].longNumber + 1; ;
    break;}
case 266:
#line 1523 "parser.y"
{
      yyval.expression = new CClassFieldExpression(yyvsp[-2].expression, *(yyvsp[0].text));
      delete yyvsp[0].text;
    ;
    break;}
case 267:
#line 1528 "parser.y"
{
      CExpression* super = new CSpecialExpression(CSpecialExpression::kSuper);
      yyval.expression = new CClassFieldExpression(super, *(yyvsp[0].text));
      delete yyvsp[0].text;
    ;
    break;}
case 268:
#line 1537 "parser.y"
{
      unicode_string::size_type slashPosition = yyvsp[-3].text->find(kSymbolDivider);
      if (slashPosition != unicode_string::npos) {
	unicode_string prefix(*(yyvsp[-3].text), 0, slashPosition);
	if (gCurrentCompiler->LookupLocalVariable(prefix) != 0 ||
	    gCurrentCompiler->LookupOuterLocalVariable(prefix) != 0) {
	  unicode_string::size_type lastSlash =
	    yyvsp[-3].text->find_last_of(kSymbolDivider);
	  prefix.assign(*(yyvsp[-3].text), 0, lastSlash);
	  CExpression* baseExpression = ::InterpretSymbolExpression(prefix);
	  unicode_string methodName(*(yyvsp[-3].text), lastSlash + 1);
	  yyval.expression = new CMethodCall(baseExpression, methodName, yyvsp[-1].expressionList);
	} else {
	  yyval.expression = new CMethodCall(0, *(yyvsp[-3].text), yyvsp[-1].expressionList);
	}
      } else {
	yyval.expression = new CMethodCall(0, *(yyvsp[-3].text), yyvsp[-1].expressionList);
      }
      delete yyvsp[-3].text;
    ;
    break;}
case 269:
#line 1558 "parser.y"
{
      yyval.expression = new CMethodCall(yyvsp[-5].expression, *(yyvsp[-3].text), yyvsp[-1].expressionList);
      delete yyvsp[-3].text;
    ;
    break;}
case 270:
#line 1563 "parser.y"
{
      CExpression* super = new CSpecialExpression(CSpecialExpression::kSuper);
      yyval.expression = new CMethodCall(super, *(yyvsp[-3].text), yyvsp[-1].expressionList);
      delete yyvsp[-3].text;
    ;
    break;}
case 271:
#line 1572 "parser.y"
{
      CExpression* baseExpression = ::InterpretSymbolExpression(*(yyvsp[-3].text));
      delete yyvsp[-3].text;
      yyval.expression = new CArrayIndex(baseExpression, yyvsp[-1].expression);
    ;
    break;}
case 272:
#line 1578 "parser.y"
{ yyval.expression = new CArrayIndex(yyvsp[-3].expression, yyvsp[-1].expression); ;
    break;}
case 274:
#line 1584 "parser.y"
{
      yyval.expression = ::InterpretSymbolExpression(*(yyvsp[0].text));
      delete yyvsp[0].text;
    ;
    break;}
case 277:
#line 1594 "parser.y"
{ yyval.expression = new CUnaryExpression(yyvsp[-1].expression, INCR, CUnaryExpression::kPostfix, true); ;
    break;}
case 278:
#line 1599 "parser.y"
{ yyval.expression = new CUnaryExpression(yyvsp[-1].expression, DECR, CUnaryExpression::kPostfix, true); ;
    break;}
case 281:
#line 1606 "parser.y"
{ yyval.expression = new CUnaryExpression(yyvsp[0].expression, '+', CUnaryExpression::kPrefix, false); ;
    break;}
case 282:
#line 1608 "parser.y"
{ yyval.expression = new CUnaryExpression(yyvsp[0].expression, '-', CUnaryExpression::kPrefix, false); ;
    break;}
case 284:
#line 1614 "parser.y"
{ yyval.expression = new CUnaryExpression(yyvsp[0].expression, INCR, CUnaryExpression::kPrefix, true); ;
    break;}
case 285:
#line 1619 "parser.y"
{ yyval.expression = new CUnaryExpression(yyvsp[0].expression, DECR, CUnaryExpression::kPrefix, true); ;
    break;}
case 287:
#line 1625 "parser.y"
{ yyval.expression = new CUnaryExpression(yyvsp[0].expression, '~', CUnaryExpression::kPrefix, false); ;
    break;}
case 288:
#line 1627 "parser.y"
{ yyval.expression = new CUnaryExpression(yyvsp[0].expression, '!', CUnaryExpression::kPrefix, false); ;
    break;}
case 290:
#line 1633 "parser.y"
{
      yyvsp[-3].typeSignature->SetArrayBounds(yyvsp[-2].longNumber);
      yyval.expression = new CCastExpression(*(yyvsp[-3].typeSignature), yyvsp[0].expression);
      delete yyvsp[-3].typeSignature;
    ;
    break;}
case 291:
#line 1639 "parser.y"
{
      CClassFieldExpression* castTo = DYNAMIC_CAST(CClassFieldExpression, yyvsp[-2].expression);
      if (castTo == 0) {
        delete yyvsp[-2].expression;
        delete yyvsp[0].expression;
	yyerror("Invalid cast expression.");
	YYERROR;
      } else {
        CJavaTypeSignature type(castTo->GetFieldString());
        yyval.expression = new CCastExpression(type, yyvsp[0].expression);
        delete yyvsp[-2].expression;
      }
    ;
    break;}
case 292:
#line 1653 "parser.y"
{
      CJavaTypeSignature type(*(yyvsp[-3].text), yyvsp[-2].longNumber);
      yyval.expression = new CCastExpression(type, yyvsp[0].expression);
      delete yyvsp[-3].text;
    ;
    break;}
case 294:
#line 1663 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, '*', yyvsp[0].expression); ;
    break;}
case 295:
#line 1665 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, '/', yyvsp[0].expression); ;
    break;}
case 296:
#line 1667 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, '%', yyvsp[0].expression); ;
    break;}
case 298:
#line 1673 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, '+', yyvsp[0].expression); ;
    break;}
case 299:
#line 1675 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, '-', yyvsp[0].expression); ;
    break;}
case 301:
#line 1681 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, SHIFT_LEFT, yyvsp[0].expression); ;
    break;}
case 302:
#line 1683 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, BITSHIFT_RIGHT, yyvsp[0].expression); ;
    break;}
case 303:
#line 1685 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, FILL_SHIFT_RIGHT, yyvsp[0].expression); ;
    break;}
case 305:
#line 1691 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, '<', yyvsp[0].expression); ;
    break;}
case 306:
#line 1693 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, '>', yyvsp[0].expression); ;
    break;}
case 307:
#line 1695 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, LTEQ, yyvsp[0].expression); ;
    break;}
case 308:
#line 1697 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, GTEQ, yyvsp[0].expression); ;
    break;}
case 309:
#line 1699 "parser.y"
{
      yyval.expression = new CInstanceof(yyvsp[-2].expression, *(yyvsp[0].typeSignature));
      delete yyvsp[0].typeSignature;
    ;
    break;}
case 311:
#line 1708 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, EQUAL_COMPARE, yyvsp[0].expression); ;
    break;}
case 312:
#line 1710 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, NOT_EQUAL, yyvsp[0].expression); ;
    break;}
case 314:
#line 1716 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, '&', yyvsp[0].expression); ;
    break;}
case 316:
#line 1722 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, '^', yyvsp[0].expression); ;
    break;}
case 318:
#line 1728 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, '|', yyvsp[0].expression); ;
    break;}
case 320:
#line 1734 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, AND, yyvsp[0].expression); ;
    break;}
case 322:
#line 1740 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, OR, yyvsp[0].expression); ;
    break;}
case 324:
#line 1746 "parser.y"
{ yyval.expression = new CTrinaryExpression(yyvsp[-4].expression, yyvsp[-2].expression, yyvsp[0].expression); ;
    break;}
case 327:
#line 1756 "parser.y"
{ yyval.expression = new CBinaryExpression(yyvsp[-2].expression, yyvsp[-1].longNumber, yyvsp[0].expression); ;
    break;}
case 328:
#line 1761 "parser.y"
{
      yyval.expression = ::InterpretSymbolExpression(*(yyvsp[0].text));
      delete yyvsp[0].text;
    ;
    break;}
case 331:
#line 1771 "parser.y"
{ yyval.longNumber = '='; ;
    break;}
case 332:
#line 1773 "parser.y"
{ yyval.longNumber = MUL_EQUALS; ;
    break;}
case 333:
#line 1775 "parser.y"
{ yyval.longNumber = DIV_EQUALS; ;
    break;}
case 334:
#line 1777 "parser.y"
{ yyval.longNumber = MOD_EQUALS; ;
    break;}
case 335:
#line 1779 "parser.y"
{ yyval.longNumber = ADD_EQUALS; ;
    break;}
case 336:
#line 1781 "parser.y"
{ yyval.longNumber = SUB_EQUALS; ;
    break;}
case 337:
#line 1783 "parser.y"
{ yyval.longNumber = SHIFT_LEFT_EQUALS; ;
    break;}
case 338:
#line 1785 "parser.y"
{ yyval.longNumber = SHIFT_RIGHT_EQUALS; ;
    break;}
case 339:
#line 1787 "parser.y"
{ yyval.longNumber = FILL_SHIFT_RIGHT_EQUALS; ;
    break;}
case 340:
#line 1789 "parser.y"
{ yyval.longNumber = AND_EQUALS; ;
    break;}
case 341:
#line 1791 "parser.y"
{ yyval.longNumber = XOR_EQUALS; ;
    break;}
case 342:
#line 1793 "parser.y"
{ yyval.longNumber = OR_EQUALS; ;
    break;}
}
   /* the action file gets copied in in place of this dollarsign */
#line 465 "/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;
}
#line 1804 "parser.y"


void
yyerror(const char* errorMessage)
{
  assert(gCurrentCompiler != 0);
  gCurrentCompiler->ParseError(yylineno, errorMessage, yytext);
}

void
InitializeParser(const string& parseString, CCompiler* compilerAlias)
{
  #ifndef NDEBUG
  if (::getenv("YYDEBUG") != 0) {
    yydebug = 1;
  }
  #endif
  gCurrentCompiler = compilerAlias;
  assert(gCurrentCompiler != 0);
  InitializeLexer(parseString);
}

void
FinishParser()
{
  FinishLexer();
  gCurrentCompiler = 0;
  #ifndef NDEBUG
  yydebug = 0;
  #endif
}

//
//  Function name : InterpretSymbolExpression
//  Description : Used to parse a qualified symbol into a base variable and
//    some sequence of field accesses.  So "x" is parsed as the expression
//    representing the variable 'x' but "x.y.z" is parsed as the variable
//    x dereferenced to get field y, dereferenced to get field z.
//
CExpression*
InterpretSymbolExpression(const unicode_string& symbol)
{
  unicode_string::size_type slashPosition = symbol.find(kSymbolDivider);
  unicode_string baseVariable = symbol;
  CExpression* baseExpression = 0; 
  if (slashPosition < symbol.size()) {
    baseVariable.assign(symbol, 0, slashPosition);
  }
  const CLocalVariableRecord* match =
    gCurrentCompiler->LookupLocalVariable(baseVariable);
  if (match != 0) {
    CVariableDeclaration declaration = match->GetDeclaration();
    baseExpression =
      new CLocalVariableExpression(declaration.GetSignature(),
				   match->GetVariableIndex(),
				   declaration.IsFinal());
  } else {
    const COuterLocalExpression* outerLocal =
      gCurrentCompiler->LookupOuterLocalVariable(baseVariable);
    if (outerLocal != 0) {
      baseExpression = new COuterLocalExpression(*outerLocal);
    }
  }
  if (baseExpression != 0) {
    if (slashPosition < symbol.size()) {
      do {
	unicode_string::size_type previousPosition = slashPosition + 1;
	slashPosition = symbol.find(kSymbolDivider, previousPosition);
	if (slashPosition >= symbol.size()) {
	  slashPosition = symbol.size();
	}
	unicode_string nextField(symbol, previousPosition,
				 slashPosition - previousPosition);
	baseExpression = new CClassFieldExpression(baseExpression, nextField);
      } while (slashPosition < symbol.size());
    }
  } else {
    baseExpression = new CClassFieldExpression(symbol);
  }
  return baseExpression;
}
