#ifndef lint
static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
#endif
#include <stdlib.h>
#define YYBYACC 1
#define YYMAJOR 1
#define YYMINOR 9
#define YYPATCH 20050813
#define YYEMPTY (-1)
#define yyclearin (yychar = YYEMPTY)
#define yyerrok (yyerrflag = 0)
#define YYRECOVERING (yyerrflag != 0)
extern int yyparse(void);
static int yygrowstack(void);
#define YYPREFIX "yy"
#line 2 "gram.y"
/* $Header$ */
/*
* Copyright © 1988-2004 Keith Packard and Bart Massey.
* All Rights Reserved. See the file COPYING in this directory
* for licensing information.
*/
#include "nickle.h"
#include <stdio.h>
/*
* This grammar generates 1 shift/reduce conflict and 4 reduce/reduce:
*
* 2 reduce/reduce conflicts on:
*
* *int . func
* **int . func
*
* Is the '*' a dereference operator or a pointer type modifier?
* The grammar is ordered to make this a type modifier since
* the other way is less common. Use parens when you want this.
*
* 2 reduce/reduce conflicts on:
*
* &int . func
* &&int . func
*
* Is the '&' a reference operator or a reference type modifier?
* The grammar is ordered to make this a type modifier since
* the other way is less common. Use parens when you want this.
*
* shift/reduce conflict in ASSIGN in initializers
*
* That's because struct initializers look like assignment
* expressions while array initializers permit any expression.
* Shift yields struct initialization, so the effect is
* to make assignment expressions invalid in array initializers.
* (Of course, you can always enclose an assignment in parens.)
* (I can't see any obvious way to use operator precedence to
* get rid of this: seems like you'd need to duplicate simpleexpr
* with different precedence. --BCM)
*
*/
int ignorenl;
int notCommand;
int seeComment;
NamespacePtr LexNamespace;
int funcDepth;
void ParseError (char *fmt, ...);
void yyerror (char *msg);
typedef enum _CanonTypeResult {
CanonTypeUndefined,
CanonTypeForward,
CanonTypeDefined,
} CanonTypeResult;
static Expr *
ParseCanonFor (Expr *expr);
static CanonTypeResult
ParseCanonType (TypePtr type, Bool forwardAllowed);
static SymbolPtr
ParseNewSymbol (Publish publish, Class class, Type *type, Atom name);
#line 72 "gram.y"
typedef union {
int ints;
Value value;
Class class;
ArgType *argType;
Type *type;
Publish publish;
ExprPtr expr;
Atom atom;
DeclListPtr declList;
MemListPtr memList;
Fulltype fulltype;
ArgDecl argDecl;
SymbolPtr symbol;
NamespacePtr namespace;
CodePtr code;
Bool bool;
AtomListPtr atomList;
FuncDecl funcDecl;
} YYSTYPE;
#line 112 "gram.c"
#define VAR 257
#define EXPR 258
#define ARRAY 259
#define STRUCT 260
#define UNION 261
#define ENUM 262
#define COMP 263
#define HASH 264
#define SEMI 265
#define MOD 266
#define OC 267
#define CC 268
#define DOLLAR 269
#define DOTDOTDOT 270
#define ENDFILE 271
#define GLOBAL 272
#define AUTO 273
#define STATIC 274
#define CONST 275
#define POLY 276
#define INTEGER 277
#define NATURAL 278
#define RATIONAL 279
#define REAL 280
#define STRING 281
#define FOREIGN 282
#define FILET 283
#define MUTEX 284
#define SEMAPHORE 285
#define CONTINUATION 286
#define THREAD 287
#define VOID 288
#define BOOL 289
#define FUNCTION 290
#define FUNC 291
#define EXCEPTION 292
#define RAISE 293
#define TYPEDEF 294
#define IMPORT 295
#define NEW 296
#define ANONINIT 297
#define NAMESPACE 298
#define PUBLIC 299
#define PROTECTED 300
#define EXTEND 301
#define WHILE 302
#define DO 303
#define FOR 304
#define SWITCH 305
#define BREAK 306
#define CONTINUE 307
#define RETURNTOK 308
#define FORK 309
#define CASE 310
#define DEFAULT 311
#define TWIXT 312
#define NAME 313
#define TYPENAME 314
#define NAMESPACENAME 315
#define COMMAND 316
#define NAMECOMMAND 317
#define TEN_NUM 318
#define OCTAL0_NUM 319
#define OCTAL_NUM 320
#define BINARY_NUM 321
#define HEX_NUM 322
#define TEN_FLOAT 323
#define OCTAL0_FLOAT 324
#define OCTAL_FLOAT 325
#define BINARY_FLOAT 326
#define HEX_FLOAT 327
#define CHAR_CONST 328
#define STRING_CONST 329
#define POLY_CONST 330
#define THREAD_CONST 331
#define COMMENT_CONST 332
#define VOIDVAL 333
#define BOOLVAL 334
#define DARROW 335
#define POUND 336
#define COMMA 337
#define ASSIGN 338
#define ASSIGNPLUS 339
#define ASSIGNMINUS 340
#define ASSIGNTIMES 341
#define ASSIGNDIVIDE 342
#define ASSIGNDIV 343
#define ASSIGNMOD 344
#define ASSIGNPOW 345
#define ASSIGNSHIFTL 346
#define ASSIGNSHIFTR 347
#define ASSIGNLXOR 348
#define ASSIGNLAND 349
#define ASSIGNLOR 350
#define ASSIGNOR 351
#define ASSIGNAND 352
#define QUEST 353
#define COLON 354
#define OR 355
#define AND 356
#define LOR 357
#define LXOR 358
#define LAND 359
#define EQ 360
#define NE 361
#define LT 362
#define GT 363
#define LE 364
#define GE 365
#define SHIFTL 366
#define SHIFTR 367
#define PLUS 368
#define MINUS 369
#define TIMES 370
#define DIVIDE 371
#define DIV 372
#define POW 373
#define STARSTAR 374
#define POW2 375
#define POW3 376
#define UNIONCAST 377
#define UMINUS 378
#define BANG 379
#define FACT 380
#define LNOT 381
#define INC 382
#define DEC 383
#define STAR 384
#define AMPER 385
#define THREADID 386
#define OS 387
#define CS 388
#define DOT 389
#define ARROW 390
#define STAROS 391
#define CALL 392
#define OP 393
#define CP 394
#define POINTER 395
#define COLONCOLON 396
#define IF 397
#define TRY 398
#define NONL 399
#define ELSE 400
#define CATCH 401
#define NL 402
#define YYERRCODE 256
short yylhs[] = { -1,
0, 0, 96, 96, 99, 99, 99, 100, 101, 98,
102, 103, 103, 104, 104, 105, 105, 97, 97, 97,
97, 97, 97, 97, 3, 3, 5, 5, 4, 7,
7, 7, 6, 6, 27, 27, 1, 1, 2, 2,
28, 28, 60, 60, 106, 107, 8, 108, 109, 14,
14, 17, 17, 15, 15, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 111, 16, 16, 16, 16, 70, 70, 19, 19,
18, 12, 12, 13, 9, 9, 112, 10, 20, 20,
110, 110, 113, 81, 82, 82, 21, 22, 22, 23,
23, 24, 25, 25, 26, 26, 37, 37, 33, 33,
35, 35, 40, 40, 34, 34, 36, 43, 38, 39,
39, 39, 41, 41, 41, 42, 42, 42, 46, 46,
46, 46, 46, 46, 45, 45, 45, 45, 45, 47,
47, 47, 47, 47, 47, 44, 44, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
48, 48, 49, 49, 50, 50, 52, 52, 53, 53,
54, 54, 56, 56, 55, 55, 55, 55, 57, 57,
58, 58, 59, 59, 61, 61, 62, 62, 63, 63,
66, 64, 64, 65, 65, 67, 67, 68, 68, 69,
69, 71, 71, 77, 77, 72, 72, 73, 73, 75,
75, 76, 76, 11, 114, 11, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 79, 79, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 80, 80, 80, 80, 80, 83, 83,
83, 84, 84, 29, 29, 30, 30, 31, 32, 85,
85, 86, 86, 87, 87, 87, 88, 89, 89, 90,
90, 91, 91, 92, 93, 93, 94, 94, 95, 95,
95, 95,
};
short yylen[] = { 2,
2, 0, 1, 3, 1, 1, 1, 0, 0, 0,
0, 1, 0, 1, 0, 1, 0, 4, 6, 4,
6, 6, 1, 1, 1, 0, 3, 1, 2, 1,
1, 1, 3, 0, 2, 1, 2, 1, 1, 3,
3, 2, 1, 1, 0, 0, 3, 2, 2, 2,
0, 7, 9, 1, 1, 3, 9, 10, 9, 9,
10, 2, 2, 3, 2, 1, 4, 10, 6, 6,
7, 0, 9, 6, 2, 11, 3, 1, 1, 3,
4, 2, 0, 7, 1, 1, 0, 2, 1, 4,
1, 1, 0, 2, 1, 0, 3, 2, 0, 4,
3, 3, 2, 0, 7, 3, 1, 0, 3, 1,
3, 1, 1, 1, 4, 2, 1, 1, 4, 3,
4, 4, 2, 2, 0, 4, 3, 2, 2, 4,
4, 4, 4, 0, 2, 2, 2, 2, 2, 1,
4, 4, 4, 3, 1, 1, 0, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 0, 3, 1, 3, 1, 3, 1, 4, 0,
4, 0, 1, 0, 1, 1, 1, 1, 1, 0,
1, 1, 1, 1, 3, 2, 3, 2, 2, 1,
3, 2, 1, 3, 2, 2, 1, 1, 0, 1,
0, 1, 2, 1, 3, 1, 0, 3, 1, 1,
0, 3, 2, 3, 0, 2, 3, 7, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 3, 3, 3, 3, 3, 3, 3, 2,
2, 3, 3, 5, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 6, 8, 8, 8, 3, 6, 2, 1, 3,
3, 4, 4, 4, 3, 3, 1, 0, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
0, 5, 9, 2, 1, 3, 1, 1, 0, 3,
1, 1, 1, 1, 2, 0, 4, 3, 1, 3,
2, 1, 1, 4, 3, 1, 3, 3, 1, 1,
1, 2,
};
short yydefred[] = { 2,
0, 10, 24, 23, 1, 3, 0, 0, 0, 0,
0, 66, 0, 45, 0, 175, 176, 177, 178, 148,
149, 150, 151, 152, 160, 153, 154, 155, 156, 157,
158, 159, 8, 0, 181, 182, 184, 8, 8, 8,
8, 0, 0, 0, 0, 8, 43, 36, 0, 0,
0, 257, 259, 258, 260, 261, 262, 264, 263, 265,
266, 267, 268, 269, 270, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 279, 0, 8, 8, 256,
55, 10, 54, 46, 9, 145, 0, 93, 45, 0,
0, 0, 0, 140, 0, 0, 0, 0, 38, 0,
0, 0, 0, 0, 6, 7, 5, 4, 0, 0,
0, 304, 306, 305, 307, 308, 219, 48, 278, 287,
0, 0, 0, 45, 45, 45, 45, 62, 63, 0,
0, 0, 0, 0, 200, 0, 0, 45, 42, 10,
206, 0, 10, 0, 25, 0, 138, 0, 139, 0,
0, 136, 0, 137, 0, 0, 0, 0, 0, 271,
0, 0, 0, 0, 45, 0, 0, 9, 75, 35,
0, 37, 0, 0, 8, 0, 0, 203, 0, 45,
0, 12, 128, 0, 0, 135, 0, 0, 0, 0,
0, 0, 0, 0, 0, 146, 8, 8, 8, 173,
0, 8, 65, 0, 0, 0, 303, 289, 290, 291,
292, 293, 294, 295, 296, 297, 298, 299, 300, 301,
302, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 240, 241, 227, 229, 231, 0, 0, 0, 0,
0, 0, 0, 46, 0, 0, 8, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 117,
64, 0, 0, 0, 0, 34, 30, 32, 31, 0,
0, 0, 0, 0, 0, 281, 0, 0, 280, 0,
0, 79, 83, 20, 56, 41, 86, 46, 85, 0,
95, 94, 0, 0, 0, 120, 0, 0, 0, 276,
166, 0, 0, 0, 0, 0, 186, 0, 0, 0,
129, 138, 139, 136, 137, 0, 0, 127, 0, 0,
0, 0, 0, 10, 18, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 285, 286, 0,
0, 0, 210, 0, 0, 0, 47, 50, 45, 0,
141, 0, 142, 0, 143, 122, 0, 0, 0, 0,
0, 0, 14, 0, 208, 0, 27, 33, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 67, 89,
88, 0, 119, 0, 0, 192, 0, 121, 0, 0,
339, 341, 340, 124, 118, 0, 8, 93, 0, 0,
0, 0, 0, 189, 185, 198, 0, 188, 144, 45,
114, 0, 0, 0, 0, 0, 0, 126, 44, 72,
0, 0, 283, 282, 0, 213, 284, 49, 0, 0,
0, 109, 0, 0, 0, 0, 0, 0, 0, 21,
22, 45, 163, 45, 45, 167, 0, 46, 0, 80,
0, 82, 0, 196, 0, 195, 342, 0, 0, 0,
0, 0, 321, 0, 329, 0, 336, 323, 115, 0,
0, 133, 130, 165, 131, 132, 187, 0, 9, 0,
113, 0, 0, 9, 0, 19, 0, 212, 0, 169,
171, 69, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 272, 0, 45, 0, 194, 0, 0, 331,
333, 0, 0, 0, 0, 0, 0, 0, 0, 191,
46, 0, 0, 46, 70, 111, 9, 40, 74, 0,
0, 46, 0, 77, 46, 46, 0, 0, 0, 46,
324, 0, 46, 0, 46, 309, 0, 0, 90, 0,
338, 318, 319, 0, 330, 0, 320, 0, 0, 328,
327, 0, 335, 334, 218, 0, 216, 93, 71, 0,
0, 9, 46, 9, 9, 0, 0, 46, 0, 0,
325, 275, 273, 310, 274, 0, 93, 0, 0, 312,
0, 0, 9, 46, 0, 57, 9, 59, 60, 0,
0, 97, 98, 46, 53, 0, 0, 316, 9, 73,
9, 45, 0, 46, 0, 58, 0, 101, 9, 46,
0, 315, 46, 68, 61, 0, 0, 102, 103, 100,
76, 84, 314, 0, 0, 106, 313, 107, 0, 0,
46, 105,
};
short yydgoto[] = { 1,
80, 437, 143, 144, 145, 146, 280, 81, 298, 299,
541, 398, 472, 254, 255, 83, 84, 85, 293, 401,
556, 598, 599, 614, 634, 635, 86, 87, 643, 573,
574, 608, 263, 178, 433, 179, 659, 88, 89, 434,
308, 90, 416, 91, 136, 186, 93, 313, 283, 315,
94, 284, 259, 261, 95, 201, 96, 97, 98, 99,
187, 319, 320, 303, 406, 418, 407, 428, 456, 457,
256, 140, 141, 101, 362, 363, 102, 252, 119, 117,
173, 302, 565, 411, 482, 483, 560, 412, 484, 485,
530, 413, 486, 487, 488, 5, 6, 8, 108, 304,
169, 7, 183, 384, 535, 118, 366, 103, 367, 104,
505, 300, 174, 543,
};
short yysindex[] = { 0,
-245, 0, 0, 0, 0, 0, 1261, -255, -210, -182,
-154, 0, -99, 0, -99, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -108, 0, 0, 0, 0, 0, 0,
0, -121, -74, 5325, 6495, 0, 0, 0, -360, 6495,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 6495, 6495, 6495, 6495, 6495,
6495, 6495, 6495, 6495, -92, 0, 5195, 0, 0, 0,
0, 0, 0, 0, 0, 0, 122, 0, 0, -204,
-11, -199, -112, 0, 6650, 43, 42, 11, 0, -236,
6919, 3, 1395, 50, 0, 0, 0, 0, 6650, 6650,
21, 0, 0, 0, 0, 0, 0, 0, 0, 0,
46, 1, 65, 0, 0, 0, 0, 0, 0, -182,
-154, 69, 42, 102, 0, 7, 2167, 0, 0, 0,
0, 1925, 0, 70, 0, 143, 0, 165, 0, 165,
165, 0, 165, 0, 165, 165, 165, 165, 165, 0,
5845, 18, -81, 32, 0, 1529, 28, 0, 0, 0,
45, 0, 173, 113, 0, 133, 55, 0, 114, 0,
140, 0, 0, 5975, 4008, 0, -112, -360, 6650, 6650,
6650, 6650, 6650, 13, 28, 0, 0, 0, 0, 0,
6650, 0, 0, 5325, 58, 6495, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 6495, 6495, 6495, 6495, 6495, 6495, 6495, 6495, 6495,
6495, 6495, 6495, 6495, 6495, 6495, 6495, 6495, 6495, 6495,
6495, 0, 0, 0, 0, 0, 6495, 148, 151, 6495,
6495, 6495, 6495, 0, 1395, 200, 0, 21, 201, 21,
205, 137, 209, 89, 6495, 94, 1395, 98, 100, 0,
0, 101, 216, 6495, 216, 0, 0, 0, 0, 87,
6495, -25, -86, 109, 2055, 0, 190, 0, 0, 119,
1395, 0, 0, 0, 0, 0, 0, 0, 0, 247,
0, 0, 124, 6650, 127, 0, 6105, 185, 130, 0,
0, -2, 138, 195, -68, 139, 0, 221, 141, -164,
0, 0, 0, 0, 0, 152, 45, 0, 229, 6610,
-108, 28, 86, 0, 0, 355, 6745, 2278, 2389, 2500,
2611, 474, 634, 634, 800, 800, 800, 800, 310, 310,
943, 943, 355, 355, 355, 355, 157, 0, 0, 161,
6689, 159, 0, 6919, 6919, 291, 0, 0, 0, 295,
0, 297, 0, 21, 0, 0, 169, 5325, 263, 5325,
5325, 5325, 0, 164, 0, 168, 0, 0, 179, 204,
181, 183, 6495, 184, 314, 5325, 316, 187, 0, 0,
0, 248, 0, 281, 0, 0, -61, 0, 5455, 6919,
0, 0, 0, 0, 0, 69, 0, 0, -112, -112,
325, -112, -112, 0, 0, 0, 6650, 0, 0, 0,
0, 0, 331, 261, 37, 265, 335, 0, 0, 0,
202, 6495, 0, 0, 6495, 0, 0, 0, 214, 6650,
6650, 0, 343, 222, 224, 350, 225, 228, 358, 0,
0, 0, 0, 0, 0, 0, 6495, 0, 232, 0,
-108, 0, 6495, 0, 6650, 0, 0, 289, 6105, -92,
6804, 292, 0, 294, 0, 296, 0, 0, 0, 238,
0, 0, 0, 0, 0, 0, 0, 241, 0, 37,
0, 370, -108, 0, 369, 0, 2167, 0, 5325, 0,
0, 0, 1395, 5325, 5325, 1395, 247, 5325, 371, 372,
375, 165, 0, 1395, 0, 1664, 0, 6105, 6919, 0,
0, 324, 6105, 6105, 373, 6235, 376, 332, 380, 0,
0, 311, 247, 0, 0, 0, 0, 0, 0, 1395,
256, 0, 258, 0, 0, 0, 99, 260, 5585, 0,
0, 6365, 0, 5715, 0, 0, 255, 130, 0, 6919,
0, 0, 0, 319, 0, 6919, 0, 389, 6804, 0,
0, 289, 0, 0, 0, 6495, 0, 0, 0, 390,
247, 0, 0, 0, 0, 5325, 306, 0, 99, 1395,
0, 0, 0, 0, 0, 1395, 0, 273, 324, 0,
6919, 397, 0, 0, 111, 0, 0, 0, 0, 309,
1395, 0, 0, 0, 0, 247, -206, 0, 0, 0,
0, 0, 312, 0, 111, 0, 1395, 0, 0, 0,
6105, 0, 0, 0, 0, 351, 1395, 0, 0, 0,
0, 0, 0, 401, 352, 0, 0, 0, 317, 1395,
0, 0,
};
short yyrindex[] = { 0,
1127, 0, 0, 0, 0, 0, 54, 0, 0, 367,
378, 0, 0, 0, 1599, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -66, 383, 0, 0, 0, 1729, -238,
-198, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 383, 383, 383, 383, 383,
383, 383, 383, 383, 0, 0, 383, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -103, 40, 0, -262, 379, 953, 0, 0, 285,
-244, 57, 9, 0, 0, 0, 0, 0, -186, -101,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 993, 0, 0, 399, 5051, 0, 0, 0,
0, -253, 0, -231, 0, 0, 0, 2119, 0, 2231,
2343, 0, 2455, 0, 2567, 2679, 2791, 2903, 3015, 0,
383, 0, 20, 0, 0, 54, 829, 0, 0, 0,
1729, 0, -145, -65, 0, 0, -185, 0, -141, 0,
0, 0, 0, -249, 0, 0, 40, 0, 0, 0,
0, 0, 0, 0, -22, 0, 0, 0, 0, 0,
-262, 0, 0, 383, 0, 383, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 383, 383, 383, 383, 383, 383, 383, 383, 383,
383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
383, 0, 0, 0, 0, 0, 383, 0, 0, 383,
-268, 383, 383, 0, 194, 0, 0, 0, 0, 0,
0, 64, 0, 0, -259, 0, 54, 0, 0, 0,
0, 0, 293, 383, 293, 0, 0, 0, 0, -232,
-243, 399, 0, 0, 303, 0, 0, 334, 0, 0,
9, 0, 0, 0, 0, 0, 0, 0, 0, 364,
0, 0, 0, -293, 0, 0, 383, 61, 0, 0,
0, 399, 0, 308, 0, 0, 0, -239, 0, 313,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -22, 0, 0, 0, 3239, 0, 4960, 4938, 4845,
4821, 4724, 4599, 4696, 4195, 4296, 4397, 4498, 3989, 4092,
3779, 3884, 3347, 3455, 3563, 3671, 0, 0, 0, 0,
313, 0, 0, -246, -18, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 383, 0, -251,
383, -66, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 383, 6863, 0, 383, 0, 499, 0, 0,
0, 0, 0, 0, -218, 0, 313, 0, 383, 29,
0, 0, 0, 0, 0, 0, 0, 0, 40, 40,
0, 40, 40, 0, 0, 0, 0, 0, 0, 0,
0, 103, 0, 439, 0, 440, 0, 0, 0, 0,
0, 383, 0, 0, 383, 0, 0, 0, 0, -186,
-101, 0, 0, 0, 0, 315, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 383, 0, 0, 0,
0, 0, 383, 0, 393, 0, 0, 1793, 383, 395,
-156, 88, 0, 443, 0, 443, 0, 0, 0, 0,
-130, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 5071, 0, 383, 0,
0, 0, 54, 383, -251, 54, 0, -256, 1859, 0,
1989, 3127, 0, 54, 0, 0, 0, 383, -219, 0,
0, 0, 383, 15, 445, 14, 0, 446, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
0, 0, 0, 0, 0, 0, 447, 0, 383, 0,
0, 383, 0, 383, 0, 0, 659, 0, 0, -122,
0, 0, 0, 328, 0, -156, 0, 0, 0, 0,
0, 0, 0, 0, 0, 383, 0, 0, 0, 0,
0, 0, 0, 0, 0, 383, 0, 0, 447, 54,
0, 0, 0, 0, 0, 54, 0, 0, 0, 0,
25, 0, 0, 0, 449, 0, 0, 0, 0, 0,
194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 449, 0, 194, 0, 0, 0,
383, 0, 0, 0, 0, 0, 194, 0, 0, 0,
0, 0, 0, 0, 365, 0, 0, 0, 0, 194,
0, 0,
};
short yygindex[] = { 0,
-32, 215, 0, 0, 450, 0, 0, -76, 0, 0,
0, 0, 0, -252, -3, 559, 0, 0, 0, 0,
0, 134, 0, 0, 97, 0, 0, 420, 0, 126,
0, 0, -202, 323, -229, 0, 0, 0, 0, 0,
0, -39, 0, -26, -7, -157, 0, 0, 557, 0,
0, -143, 299, 301, -52, 0, 0, 22, 0, -79,
245, 320, 0, 336, 279, 188, 0, -343, -38, 242,
10, 493, 488, 5, 0, 318, 0, 0, 0, 754,
-409, 0, 0, -88, 0, -521, 0, 276, 0, 326,
244, 0, 0, 321, -261, 0, 0, -75, 0, 90,
81, 0, -152, 521, -114, 36, 27, -470, -501, 0,
0, 0, 0, 0,
};
#define YYTABLESIZE 7312
short yytable[] = { 92,
162, 122, 368, 82, 132, 134, 167, 172, 491, 105,
2, 209, 577, 201, 294, 106, 100, 446, 217, 147,
204, 217, 147, 217, 205, 3, 207, 147, 203, 321,
190, 147, 29, 28, 147, 139, 92, 132, 397, 147,
316, 147, 328, 172, 200, 414, 557, 147, 332, 137,
147, 197, 147, 135, 142, 370, 109, 372, 147, 149,
14, 152, 154, 476, 273, 133, 26, 275, 195, 163,
148, 150, 151, 153, 155, 156, 157, 158, 159, 117,
200, 170, 258, 260, 110, 176, 164, 196, 217, 217,
217, 204, 204, 164, 146, 92, 622, 190, 133, 204,
193, 196, 196, 357, 29, 426, 360, 217, 177, 204,
168, 322, 111, 322, 34, 34, 34, 332, 197, 653,
615, 87, 121, 125, 175, 211, 147, 124, 125, 126,
127, 641, 648, 468, 207, 138, 215, 201, 162, 147,
209, 217, 201, 128, 164, 337, 107, 217, 209, 204,
117, 117, 117, 282, 190, 217, 4, 204, 92, 266,
267, 268, 269, 207, 132, 285, 172, 165, 166, 29,
28, 452, 427, 272, 332, 197, 312, 318, 612, 438,
322, 322, 323, 324, 325, 326, 13, 146, 285, 181,
129, 578, 87, 196, 125, 125, 92, 626, 201, 96,
290, 96, 182, 26, 47, 502, 49, 9, 426, 13,
336, 147, 125, 334, 337, 309, 117, 531, 112, 113,
114, 115, 116, 400, 147, 133, 337, 338, 339, 340,
341, 342, 343, 344, 345, 346, 347, 348, 349, 350,
351, 352, 353, 354, 355, 356, 205, 92, 295, 466,
390, 285, 125, 440, 285, 361, 364, 365, 441, 92,
125, 492, 493, 379, 495, 496, 571, 13, 421, 142,
546, 531, 96, 152, 184, 475, 51, 404, 142, 180,
185, 16, 16, 92, 16, 153, 329, 330, 331, 214,
13, 333, 214, 123, 214, 160, 405, 590, 436, 147,
180, 391, 180, 180, 147, 147, 180, 287, 202, 134,
146, 410, 288, 16, 17, 18, 19, 205, 205, 422,
182, 202, 435, 395, 399, 116, 170, 327, 110, 134,
134, 110, 13, 262, 197, 205, 198, 199, 132, 253,
132, 132, 132, 459, 147, 180, 369, 180, 180, 431,
501, 180, 134, 134, 257, 17, 132, 17, 264, 214,
214, 214, 389, 181, 123, 123, 271, 113, 638, 537,
92, 539, 92, 92, 92, 205, 134, 47, 214, 171,
402, 270, 123, 205, 650, 419, 181, 454, 92, 135,
458, 135, 202, 265, 656, 181, 116, 285, 47, 133,
439, 133, 133, 133, 449, 469, 276, 661, 596, 597,
202, 286, 214, 481, 116, 36, 36, 133, 214, 318,
632, 633, 123, 258, 260, 289, 214, 134, 134, 182,
123, 563, 566, 134, 47, 170, 171, 297, 525, 113,
296, 134, 196, 196, 301, 305, 507, 306, 404, 361,
202, 307, 310, 123, 116, 277, 278, 279, 202, 335,
358, 51, 116, 359, 203, 498, 587, 405, 371, 132,
436, 522, 373, 374, 132, 132, 375, 526, 132, 558,
383, 376, 388, 529, 147, 180, 378, 180, 180, 36,
380, 180, 381, 382, 523, 36, 392, 519, 81, 520,
521, 92, 394, 51, 51, 92, 92, 92, 92, 552,
92, 396, 555, 14, 194, 532, 92, 403, 551, 408,
567, 415, 417, 553, 135, 420, 423, 135, 194, 194,
133, 390, 570, 424, 425, 133, 133, 529, 576, 133,
579, 430, 92, 244, 443, 429, 245, 246, 444, 640,
642, 247, 447, 248, 249, 250, 132, 251, 448, 450,
568, 451, 453, 579, 455, 460, 576, 585, 576, 461,
588, 542, 462, 463, 464, 206, 465, 467, 592, 545,
409, 594, 595, 470, 549, 473, 602, 471, 92, 603,
611, 605, 92, 474, 494, 499, 624, 500, 92, 504,
45, 503, 625, 506, 194, 620, 509, 512, 194, 194,
194, 194, 194, 92, 515, 513, 514, 133, 516, 617,
194, 517, 518, 144, 144, 524, 528, 589, 534, 92,
536, 540, 538, 185, 547, 550, 572, 559, 562, 92,
631, 564, 426, 581, 582, 576, 144, 584, 586, 591,
639, 593, 92, 600, 606, 609, 610, 613, 52, 621,
627, 629, 637, 655, 658, 647, 652, 646, 657, 654,
660, 91, 616, 147, 618, 619, 183, 236, 237, 238,
239, 240, 92, 241, 242, 243, 10, 662, 244, 146,
168, 245, 246, 630, 15, 161, 247, 636, 248, 249,
250, 9, 251, 112, 39, 147, 199, 45, 78, 644,
17, 645, 199, 16, 99, 317, 104, 548, 108, 651,
144, 144, 144, 194, 292, 387, 144, 144, 241, 242,
243, 649, 623, 244, 628, 144, 245, 246, 489, 206,
314, 247, 544, 248, 249, 250, 497, 251, 510, 194,
123, 511, 490, 527, 81, 607, 554, 377, 81, 81,
81, 385, 508, 81, 81, 81, 81, 81, 120, 81,
81, 81, 81, 81, 81, 81, 575, 81, 81, 81,
81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
81, 81, 81, 81, 561, 386, 81, 81, 81, 81,
81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
81, 81, 81, 81, 81, 81, 81, 81, 13, 0,
0, 81, 81, 228, 229, 230, 231, 232, 233, 234,
235, 236, 237, 238, 239, 240, 194, 241, 242, 243,
0, 0, 244, 0, 81, 245, 246, 81, 583, 0,
247, 580, 248, 249, 250, 0, 251, 81, 81, 194,
194, 0, 81, 0, 0, 0, 0, 81, 0, 81,
81, 81, 0, 0, 0, 81, 0, 81, 0, 0,
123, 81, 0, 0, 194, 81, 81, 0, 81, 206,
81, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 52, 0, 0, 0, 52, 52,
52, 0, 123, 52, 52, 52, 52, 52, 0, 52,
52, 52, 52, 52, 52, 52, 0, 52, 52, 52,
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
52, 52, 52, 52, 0, 0, 52, 52, 52, 52,
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
52, 52, 52, 52, 52, 52, 52, 52, 0, 0,
0, 52, 52, 0, 0, 230, 231, 232, 233, 234,
235, 236, 237, 238, 239, 240, 0, 241, 242, 243,
0, 0, 244, 0, 52, 245, 246, 52, 0, 0,
247, 0, 248, 249, 250, 0, 251, 52, 52, 0,
0, 0, 52, 0, 0, 0, 0, 52, 0, 52,
52, 52, 0, 0, 0, 52, 0, 52, 0, 0,
0, 52, 0, 0, 0, 52, 52, 0, 0, 52,
52, 0, 0, 0, 0, 206, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 13, 0, 0, 0, 13, 13,
13, 0, 0, 13, 13, 13, 0, 13, 0, 13,
13, 13, 13, 13, 13, 13, 0, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 0, 0, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 0, 0,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 0, 0,
0, 13, 13, 0, 0, 234, 235, 236, 237, 238,
239, 240, 0, 241, 242, 243, 0, 0, 244, 0,
0, 245, 246, 0, 13, 0, 247, 13, 248, 249,
250, 0, 251, 0, 0, 0, 0, 13, 13, 0,
0, 0, 13, 0, 0, 0, 0, 13, 206, 13,
13, 13, 174, 174, 174, 13, 0, 13, 0, 0,
0, 13, 0, 0, 0, 13, 13, 0, 174, 174,
0, 174, 174, 174, 174, 174, 174, 174, 174, 174,
174, 174, 174, 0, 179, 0, 179, 179, 0, 0,
179, 0, 174, 174, 174, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 174, 174, 174, 174, 174,
0, 174, 174, 174, 174, 174, 174, 174, 174, 174,
174, 174, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 174, 174, 174, 174, 0,
0, 174, 238, 239, 240, 0, 241, 242, 243, 0,
0, 244, 174, 0, 245, 246, 174, 0, 0, 247,
0, 248, 249, 250, 0, 251, 0, 0, 0, 0,
0, 0, 0, 0, 0, 174, 0, 0, 174, 0,
0, 174, 0, 0, 174, 0, 0, 0, 0, 0,
0, 0, 174, 0, 0, 0, 174, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 174, 11, 11, 11, 0,
0, 11, 11, 11, 174, 11, 0, 0, 11, 11,
11, 11, 11, 11, 0, 11, 11, 11, 11, 11,
11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
11, 11, 0, 0, 11, 11, 11, 11, 11, 11,
11, 11, 11, 11, 11, 11, 0, 0, 11, 11,
11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
11, 11, 11, 11, 11, 11, 0, 0, 0, 11,
11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 11, 0, 0, 11, 0, 0, 0, 0,
0, 0, 0, 0, 0, 11, 11, 0, 0, 0,
11, 0, 0, 0, 0, 11, 0, 11, 11, 11,
0, 0, 0, 11, 0, 11, 0, 0, 0, 11,
9, 10, 11, 11, 11, 12, 13, 14, 0, 15,
0, 0, 16, 17, 18, 19, 20, 21, 0, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
33, 0, 0, 34, 0, 0, 0, 0, 0, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
0, 0, 46, 47, 48, 49, 50, 51, 52, 53,
54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
0, 0, 0, 64, 65, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 66, 0, 0, 67,
0, 0, 0, 0, 0, 0, 0, 0, 0, 68,
69, 0, 0, 0, 70, 0, 0, 0, 0, 71,
0, 72, 73, 74, 0, 0, 0, 75, 0, 76,
0, 0, 0, 77, 9, 10, 11, 78, 79, 12,
13, 14, 0, 15, 0, 0, 16, 17, 18, 19,
20, 21, 0, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 33, 0, 0, 34, 0, 0,
0, 0, 0, 35, 36, 37, 38, 39, 40, 41,
42, 43, 44, 45, 0, 0, 46, 47, 48, 49,
0, 0, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 0, 0, 0, 64, 65, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
66, 0, 0, 67, 0, 0, 0, 0, 0, 0,
0, 0, 0, 68, 69, 0, 0, 0, 70, 0,
0, 0, 0, 71, 0, 72, 73, 74, 0, 0,
0, 75, 0, 76, 0, 0, 0, 77, 9, 10,
11, 78, 79, 12, 13, 291, 0, 15, 0, 0,
16, 17, 18, 19, 20, 21, 0, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 0,
0, 34, 0, 0, 0, 0, 0, 35, 36, 37,
38, 39, 40, 41, 42, 43, 44, 45, 0, 0,
46, 47, 48, 49, 0, 0, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63, 0, 0,
0, 64, 65, 288, 288, 0, 288, 0, 288, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 66, 0, 0, 67, 0, 0,
0, 0, 0, 0, 0, 0, 0, 68, 69, 0,
0, 0, 70, 0, 0, 0, 0, 71, 0, 72,
73, 74, 0, 0, 0, 75, 0, 76, 0, 0,
0, 77, 0, 0, 0, 78, 79, 0, 569, 206,
0, 0, 0, 288, 288, 288, 288, 288, 288, 288,
288, 288, 288, 288, 288, 288, 288, 288, 288, 288,
288, 288, 288, 288, 288, 288, 288, 288, 288, 288,
288, 288, 288, 288, 288, 288, 288, 288, 288, 288,
288, 0, 288, 288, 288, 0, 0, 288, 0, 0,
288, 288, 0, 0, 0, 288, 288, 288, 288, 288,
0, 288, 288, 44, 44, 0, 44, 0, 44, 0,
288, 207, 208, 209, 210, 211, 212, 213, 214, 215,
216, 217, 218, 219, 220, 221, 222, 0, 223, 224,
225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
235, 236, 237, 238, 239, 240, 0, 241, 242, 243,
0, 0, 244, 0, 0, 245, 246, 0, 0, 0,
247, 0, 248, 249, 250, 0, 251, 0, 43, 0,
43, 0, 43, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 0, 44, 44, 44, 0, 0, 44, 0, 0,
44, 44, 0, 0, 0, 44, 44, 44, 44, 44,
0, 44, 44, 326, 326, 0, 326, 43, 326, 43,
44, 43, 43, 43, 43, 43, 43, 43, 43, 43,
43, 43, 43, 43, 43, 43, 0, 43, 43, 43,
43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
43, 43, 43, 43, 43, 0, 43, 43, 43, 0,
0, 43, 0, 0, 43, 43, 0, 0, 0, 43,
0, 43, 43, 43, 0, 43, 0, 0, 0, 0,
206, 0, 0, 326, 326, 326, 326, 326, 326, 326,
326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
326, 0, 326, 326, 326, 0, 0, 326, 0, 0,
326, 326, 0, 0, 0, 326, 326, 326, 326, 326,
0, 326, 326, 311, 311, 0, 311, 0, 311, 0,
326, 274, 207, 208, 209, 210, 211, 212, 213, 214,
215, 216, 217, 218, 219, 220, 221, 222, 0, 223,
224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
234, 235, 236, 237, 238, 239, 240, 0, 241, 242,
243, 0, 0, 244, 0, 0, 245, 246, 0, 0,
0, 247, 0, 248, 249, 250, 0, 251, 0, 0,
206, 0, 0, 311, 311, 311, 311, 311, 311, 311,
311, 311, 311, 311, 311, 311, 311, 311, 311, 311,
311, 311, 311, 311, 311, 311, 311, 311, 311, 311,
311, 311, 311, 311, 311, 311, 311, 311, 311, 311,
311, 0, 311, 311, 311, 0, 0, 311, 0, 0,
311, 311, 0, 0, 0, 311, 311, 311, 311, 311,
0, 311, 311, 223, 223, 0, 223, 0, 223, 0,
311, 393, 207, 208, 209, 210, 211, 212, 213, 214,
215, 216, 217, 218, 219, 220, 221, 222, 0, 223,
224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
234, 235, 236, 237, 238, 239, 240, 0, 241, 242,
243, 0, 206, 244, 0, 0, 245, 246, 0, 0,
0, 247, 0, 248, 249, 250, 0, 251, 0, 0,
0, 0, 0, 223, 223, 223, 223, 223, 223, 223,
223, 223, 223, 223, 223, 223, 223, 223, 223, 223,
223, 223, 223, 223, 223, 223, 223, 223, 223, 223,
223, 223, 223, 223, 223, 223, 223, 223, 223, 223,
223, 0, 223, 223, 223, 222, 222, 0, 222, 0,
222, 0, 0, 0, 0, 0, 223, 0, 0, 0,
0, 0, 223, 0, 0, 0, 0, 0, 0, 222,
223, 223, 224, 225, 226, 227, 228, 229, 230, 231,
232, 233, 234, 235, 236, 237, 238, 239, 240, 0,
241, 242, 243, 206, 0, 244, 0, 0, 245, 246,
0, 0, 0, 247, 0, 248, 249, 250, 0, 251,
0, 0, 0, 0, 0, 222, 222, 222, 222, 222,
222, 222, 222, 222, 222, 222, 222, 222, 222, 222,
222, 222, 222, 222, 222, 222, 222, 222, 222, 222,
222, 222, 222, 222, 222, 222, 222, 222, 222, 222,
222, 222, 222, 0, 222, 222, 222, 224, 224, 0,
224, 0, 224, 0, 0, 0, 0, 0, 222, 0,
0, 0, 0, 0, 222, 0, 0, 0, 0, 0,
0, 0, 222, 224, 225, 226, 227, 228, 229, 230,
231, 232, 233, 234, 235, 236, 237, 238, 239, 240,
0, 241, 242, 243, 206, 0, 244, 0, 0, 245,
246, 0, 0, 0, 247, 0, 248, 249, 250, 0,
251, 0, 0, 0, 0, 0, 0, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 0, 224, 224, 224, 220,
220, 0, 220, 0, 220, 0, 0, 0, 0, 0,
224, 0, 0, 0, 0, 0, 224, 0, 0, 0,
0, 0, 0, 0, 224, 225, 226, 227, 228, 229,
230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
240, 0, 241, 242, 243, 206, 0, 244, 0, 0,
245, 246, 0, 0, 0, 247, 0, 248, 249, 250,
0, 251, 0, 0, 0, 0, 0, 0, 0, 220,
220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
220, 220, 220, 220, 220, 220, 220, 0, 220, 220,
220, 221, 221, 0, 221, 0, 221, 0, 0, 0,
0, 0, 220, 0, 0, 0, 0, 0, 220, 0,
0, 0, 0, 0, 0, 0, 220, 226, 227, 228,
229, 230, 231, 232, 233, 234, 235, 236, 237, 238,
239, 240, 0, 241, 242, 243, 206, 0, 244, 0,
0, 245, 246, 0, 0, 0, 247, 0, 248, 249,
250, 0, 251, 0, 0, 0, 0, 0, 0, 0,
0, 221, 221, 221, 221, 221, 221, 221, 221, 221,
221, 221, 221, 221, 221, 221, 221, 221, 221, 221,
221, 221, 221, 221, 221, 221, 221, 221, 221, 221,
221, 221, 221, 221, 221, 221, 221, 221, 221, 0,
221, 221, 221, 226, 226, 0, 226, 0, 226, 0,
0, 0, 0, 0, 221, 0, 0, 0, 0, 0,
221, 0, 0, 0, 0, 0, 0, 0, 221, 227,
228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
238, 239, 240, 0, 241, 242, 243, 0, 0, 244,
0, 0, 245, 246, 0, 0, 0, 247, 0, 248,
249, 250, 0, 251, 0, 0, 0, 0, 0, 0,
0, 0, 0, 226, 226, 226, 226, 226, 226, 226,
226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
226, 0, 226, 226, 226, 225, 225, 0, 225, 0,
225, 0, 0, 0, 0, 0, 226, 0, 0, 0,
0, 0, 226, 0, 0, 0, 0, 0, 0, 0,
226, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 225, 225, 225, 225, 225,
225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
225, 225, 225, 0, 225, 225, 225, 228, 228, 0,
228, 0, 228, 0, 0, 0, 0, 0, 225, 0,
0, 0, 0, 0, 225, 0, 0, 0, 0, 0,
0, 0, 225, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 228, 228, 228,
228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
228, 228, 228, 228, 228, 0, 228, 228, 228, 230,
230, 0, 230, 0, 230, 0, 0, 0, 0, 0,
228, 0, 0, 0, 0, 0, 228, 0, 0, 0,
0, 0, 0, 0, 228, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 230,
230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
230, 230, 230, 230, 230, 230, 230, 0, 230, 230,
230, 277, 277, 0, 277, 0, 277, 0, 0, 0,
0, 0, 230, 0, 0, 0, 0, 0, 230, 0,
0, 0, 0, 0, 0, 0, 230, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 277, 277, 277, 277, 277, 277, 277, 277, 277,
277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
277, 277, 277, 277, 277, 277, 277, 277, 277, 0,
277, 277, 277, 238, 238, 0, 238, 0, 238, 0,
0, 0, 0, 0, 277, 0, 0, 0, 0, 0,
277, 0, 0, 0, 0, 0, 0, 0, 277, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 238, 238, 238, 238, 238, 238, 238,
238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
238, 235, 235, 0, 235, 0, 235, 0, 0, 0,
0, 0, 0, 0, 0, 0, 238, 0, 0, 0,
0, 0, 238, 0, 0, 0, 0, 0, 0, 0,
238, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 235, 235, 235, 235, 235, 235, 235, 235, 235,
235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
235, 235, 235, 235, 235, 235, 235, 235, 235, 236,
236, 0, 236, 0, 236, 0, 0, 0, 0, 0,
0, 0, 0, 0, 235, 0, 0, 0, 0, 0,
235, 0, 0, 0, 0, 0, 0, 0, 235, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 236,
236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
236, 236, 236, 236, 236, 236, 236, 237, 237, 0,
237, 0, 237, 0, 0, 0, 0, 0, 0, 0,
0, 0, 236, 0, 0, 0, 0, 0, 236, 0,
0, 0, 0, 0, 0, 0, 236, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 237, 237, 237,
237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
237, 237, 237, 237, 237, 239, 239, 0, 239, 0,
239, 0, 0, 0, 0, 0, 0, 0, 0, 0,
237, 0, 0, 0, 0, 0, 237, 0, 0, 0,
0, 0, 0, 0, 237, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 239, 239, 239, 239, 239,
239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
239, 239, 239, 233, 0, 0, 233, 0, 233, 0,
0, 0, 0, 0, 0, 0, 0, 0, 239, 0,
0, 0, 0, 0, 239, 0, 0, 0, 0, 0,
0, 0, 239, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 233, 233, 233, 233, 233, 233, 233,
233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
233, 233, 233, 233, 233, 233, 233, 233, 234, 0,
0, 234, 0, 234, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 233, 0, 0, 0,
0, 0, 233, 0, 0, 0, 0, 0, 0, 0,
233, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 242, 0, 0, 242, 0, 242, 0,
0, 0, 0, 0, 0, 0, 0, 9, 130, 131,
0, 234, 0, 0, 0, 0, 0, 234, 0, 0,
0, 0, 0, 20, 21, 234, 22, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 48, 188, 242, 242, 242, 242, 242, 242, 242,
242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
242, 242, 242, 242, 242, 242, 243, 0, 0, 243,
0, 243, 0, 189, 0, 0, 190, 0, 0, 0,
0, 0, 0, 0, 0, 0, 242, 191, 0, 0,
0, 192, 242, 0, 0, 0, 0, 0, 0, 0,
242, 0, 0, 0, 0, 0, 0, 0, 0, 0,
193, 317, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 243, 243, 243, 243,
243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
243, 243, 243, 243, 243, 243, 243, 243, 243, 252,
0, 0, 252, 0, 252, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 243,
0, 0, 0, 0, 0, 243, 0, 0, 0, 0,
0, 0, 0, 243, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 252,
252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
253, 0, 0, 253, 0, 253, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 252, 0, 0, 0, 0, 0, 252, 0,
0, 0, 0, 0, 0, 0, 252, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
253, 253, 253, 253, 253, 253, 253, 253, 253, 253,
253, 253, 253, 253, 253, 253, 253, 253, 253, 253,
253, 253, 253, 253, 253, 253, 253, 253, 253, 253,
253, 254, 0, 0, 254, 0, 254, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 253, 0, 0, 0, 0, 0, 253,
0, 0, 0, 0, 0, 0, 0, 253, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 254, 254, 254, 254, 254, 254, 254, 254, 254,
254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
254, 254, 255, 0, 0, 255, 0, 255, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 254, 0, 0, 0, 0, 0,
254, 0, 0, 0, 0, 0, 0, 0, 254, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 250, 0, 0, 250, 0, 250, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 255, 0, 0, 0, 0,
0, 255, 0, 0, 0, 0, 0, 0, 0, 255,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 250, 250, 250, 250, 250, 250, 250,
250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
251, 0, 0, 251, 0, 251, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 250, 0, 246, 0,
0, 246, 250, 246, 0, 0, 0, 0, 0, 0,
250, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 0, 246, 246,
246, 246, 246, 246, 246, 246, 246, 246, 246, 246,
246, 246, 246, 246, 246, 246, 246, 246, 246, 246,
246, 246, 246, 251, 0, 245, 0, 0, 245, 251,
245, 0, 0, 0, 0, 0, 0, 251, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 247,
0, 246, 247, 0, 247, 0, 0, 246, 0, 0,
0, 0, 0, 0, 0, 246, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 247,
247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
247, 247, 248, 0, 0, 248, 0, 248, 245, 0,
0, 0, 0, 0, 245, 0, 0, 0, 0, 0,
0, 0, 245, 0, 249, 0, 0, 249, 0, 249,
0, 0, 247, 0, 0, 0, 0, 0, 247, 0,
0, 0, 0, 0, 0, 0, 247, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 249, 249, 249, 249, 249, 249,
249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
249, 249, 249, 249, 249, 232, 0, 0, 232, 0,
232, 0, 0, 0, 0, 248, 0, 0, 0, 0,
0, 248, 0, 0, 0, 244, 0, 0, 244, 248,
244, 0, 0, 0, 0, 0, 0, 249, 0, 0,
0, 0, 0, 249, 0, 0, 0, 0, 0, 0,
0, 249, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 232, 232, 232, 232, 232,
232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
232, 232, 232, 0, 232, 244, 244, 244, 244, 244,
244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
244, 244, 244, 0, 244, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 232, 0,
0, 0, 0, 0, 232, 0, 0, 0, 0, 0,
0, 0, 232, 0, 9, 130, 131, 0, 244, 0,
13, 14, 0, 15, 244, 0, 16, 17, 18, 19,
20, 21, 244, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
0, 0, 0, 35, 36, 0, 0, 0, 0, 0,
0, 0, 0, 45, 0, 0, 0, 47, 48, 49,
0, 0, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 0, 0, 0, 64, 65, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
66, 0, 0, 67, 0, 0, 0, 0, 0, 0,
0, 0, 0, 68, 69, 0, 0, 0, 70, 0,
0, 0, 0, 71, 0, 72, 73, 74, 0, 0,
0, 161, 0, 76, 9, 130, 131, 77, 0, 0,
13, 0, 0, 15, 0, 0, 16, 17, 18, 19,
20, 21, 0, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
0, 0, 0, 35, 36, 0, 0, 0, 0, 0,
0, 0, 0, 45, 0, 0, 0, 47, 48, 49,
0, 0, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 0, 0, 0, 64, 65, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
66, 0, 0, 67, 0, 0, 0, 0, 0, 0,
0, 0, 0, 68, 69, 0, 0, 0, 70, 0,
0, 0, 0, 71, 0, 72, 73, 74, 0, 0,
0, 75, 0, 76, 9, 130, 131, 77, 0, 0,
13, 409, 477, 15, 0, 0, 0, 0, 0, 0,
20, 21, 0, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 45, 0, 0, 0, 478, 48, 49,
0, 0, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 0, 0, 0, 64, 65, 479,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
66, 0, 0, 67, 0, 0, 0, 0, 0, 0,
0, 0, 0, 68, 69, 0, 0, 0, 70, 0,
0, 0, 0, 71, 0, 72, 73, 74, 0, 0,
0, 480, 0, 76, 9, 130, 131, 77, 0, 0,
13, 0, 601, 15, 0, 0, 0, 0, 0, 0,
20, 21, 0, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 45, 0, 0, 0, 47, 48, 49,
0, 0, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 0, 0, 0, 64, 65, 479,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
66, 0, 0, 67, 0, 0, 0, 0, 0, 0,
0, 0, 0, 68, 69, 0, 0, 0, 70, 0,
0, 0, 0, 71, 0, 72, 73, 74, 0, 0,
0, 75, 0, 76, 9, 130, 131, 77, 0, 0,
13, 409, 604, 15, 0, 0, 0, 0, 0, 0,
20, 21, 0, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 45, 0, 0, 0, 47, 48, 49,
0, 0, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 0, 0, 0, 64, 65, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
66, 0, 0, 67, 0, 0, 0, 0, 0, 0,
0, 0, 0, 68, 69, 0, 0, 0, 70, 0,
0, 0, 0, 71, 0, 72, 73, 74, 0, 0,
0, 480, 0, 76, 9, 130, 131, 77, 0, 0,
13, 0, 0, 15, 0, 0, 0, 0, 0, 0,
20, 21, 0, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 45, 0, 0, 0, 47, 48, 49,
0, 0, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 0, 0, 0, 64, 65, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
66, 0, 0, 67, 0, 0, 0, 0, 0, 0,
0, 0, 0, 68, 281, 0, 0, 0, 70, 0,
0, 0, 0, 71, 0, 72, 73, 74, 0, 0,
0, 75, 160, 76, 9, 130, 131, 77, 0, 0,
13, 0, 0, 15, 311, 0, 0, 0, 0, 0,
20, 21, 0, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 45, 0, 0, 0, 47, 48, 49,
0, 0, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 0, 0, 0, 64, 65, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
66, 0, 0, 67, 0, 0, 0, 0, 0, 0,
0, 0, 0, 68, 281, 0, 0, 0, 70, 0,
0, 0, 0, 71, 0, 72, 73, 74, 0, 0,
0, 75, 0, 76, 9, 130, 131, 77, 0, 0,
13, 409, 0, 15, 0, 0, 0, 0, 0, 0,
20, 21, 0, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 45, 0, 0, 0, 47, 48, 49,
0, 0, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 0, 0, 0, 64, 65, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
66, 0, 0, 67, 0, 0, 0, 0, 0, 0,
0, 0, 0, 68, 69, 0, 0, 0, 70, 0,
0, 0, 0, 71, 0, 72, 73, 74, 0, 0,
0, 75, 0, 76, 9, 130, 131, 77, 0, 0,
13, 0, 0, 15, 0, 0, 0, 0, 0, 0,
20, 21, 0, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 45, 0, 0, 0, 47, 48, 49,
0, 0, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 0, 0, 0, 64, 65, 479,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
66, 0, 0, 67, 0, 0, 0, 0, 0, 0,
0, 0, 0, 68, 69, 0, 0, 0, 70, 0,
0, 0, 0, 71, 0, 72, 73, 74, 0, 0,
0, 75, 0, 76, 9, 130, 131, 77, 0, 0,
13, 409, 0, 15, 0, 0, 0, 0, 0, 0,
20, 21, 0, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 45, 0, 0, 0, 47, 48, 49,
0, 0, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 0, 0, 0, 64, 65, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
66, 0, 0, 67, 0, 0, 0, 0, 0, 0,
0, 0, 0, 68, 69, 0, 0, 0, 70, 0,
0, 0, 0, 71, 0, 72, 73, 74, 0, 0,
0, 480, 0, 76, 9, 130, 131, 77, 0, 0,
13, 0, 0, 15, 0, 0, 0, 0, 0, 0,
20, 21, 0, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 45, 0, 0, 0, 47, 48, 49,
0, 0, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 0, 0, 0, 64, 65, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
66, 0, 0, 67, 0, 0, 0, 0, 0, 0,
0, 0, 0, 68, 69, 0, 0, 0, 70, 9,
130, 131, 0, 71, 0, 72, 73, 74, 0, 0,
0, 75, 0, 76, 0, 20, 21, 77, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31, 32, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
130, 131, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 431, 432, 188, 20, 21, 0, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31, 32, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 206, 0, 0, 0, 426, 0,
0, 0, 0, 48, 188, 189, 0, 0, 190, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 191,
0, 0, 0, 192, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 193, 0, 0, 189, 0, 0, 190, 0,
206, 0, 0, 0, 0, 0, 0, 0, 0, 191,
0, 0, 0, 192, 0, 445, 207, 208, 209, 210,
211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
221, 222, 193, 223, 224, 225, 226, 227, 228, 229,
230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
240, 0, 241, 242, 243, 0, 0, 244, 0, 206,
245, 246, 0, 0, 0, 247, 0, 248, 249, 250,
0, 251, 207, 208, 209, 210, 211, 212, 213, 214,
215, 216, 217, 218, 219, 220, 221, 222, 442, 223,
224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
234, 235, 236, 237, 238, 239, 240, 0, 241, 242,
243, 0, 0, 244, 0, 0, 245, 246, 276, 0,
0, 247, 0, 248, 249, 250, 0, 251, 533, 0,
0, 207, 208, 209, 210, 211, 212, 213, 214, 215,
216, 217, 218, 219, 220, 221, 222, 0, 223, 224,
225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
235, 236, 237, 238, 239, 240, 0, 241, 242, 243,
0, 0, 244, 0, 206, 245, 246, 0, 0, 0,
247, 0, 248, 249, 250, 0, 251, 0, 0, 276,
276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
276, 276, 276, 276, 276, 276, 0, 276, 276, 276,
276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
276, 276, 276, 276, 276, 0, 276, 276, 276, 0,
0, 276, 0, 0, 276, 276, 0, 0, 0, 276,
0, 276, 276, 276, 0, 276, 207, 208, 209, 210,
211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
221, 222, 0, 223, 224, 225, 226, 227, 228, 229,
230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
240, 0, 241, 242, 243, 0, 0, 244, 0, 0,
245, 246, 0, 0, 0, 247, 0, 248, 249, 250,
0, 251,
};
short yycheck[] = { 7,
77, 34, 255, 7, 44, 44, 82, 87, 418, 265,
256, 265, 534, 265, 167, 271, 7, 361, 265, 313,
265, 268, 291, 270, 100, 271, 265, 290, 265, 187,
270, 291, 265, 265, 291, 396, 44, 77, 291, 291,
184, 291, 195, 123, 97, 307, 517, 291, 268, 45,
313, 270, 291, 44, 50, 258, 267, 260, 66, 67,
267, 69, 70, 407, 140, 44, 265, 143, 95, 77,
66, 67, 68, 69, 70, 71, 72, 73, 74, 265,
133, 268, 109, 110, 267, 290, 77, 95, 335, 336,
337, 336, 337, 337, 313, 103, 598, 337, 77, 336,
394, 109, 110, 247, 337, 270, 250, 354, 313, 354,
84, 268, 267, 270, 313, 314, 315, 337, 337, 641,
591, 267, 33, 265, 89, 394, 313, 38, 39, 40,
41, 338, 634, 395, 394, 46, 267, 394, 388, 402,
394, 388, 394, 265, 388, 268, 402, 394, 402, 394,
336, 337, 338, 161, 394, 402, 402, 402, 166, 124,
125, 126, 127, 402, 204, 161, 268, 78, 79, 402,
402, 374, 337, 138, 201, 394, 184, 185, 588, 332,
337, 189, 190, 191, 192, 193, 290, 291, 184, 389,
265, 535, 338, 201, 336, 337, 204, 607, 265, 265,
165, 267, 402, 402, 313, 435, 315, 338, 270, 313,
206, 313, 354, 204, 337, 180, 402, 479, 318, 319,
320, 321, 322, 300, 291, 204, 222, 223, 224, 225,
226, 227, 228, 229, 230, 231, 232, 233, 234, 235,
236, 237, 238, 239, 240, 241, 265, 255, 168, 393,
337, 247, 394, 333, 250, 251, 252, 253, 334, 267,
402, 419, 420, 267, 422, 423, 528, 290, 337, 265,
500, 533, 338, 281, 387, 337, 268, 304, 274, 291,
393, 268, 268, 291, 270, 281, 197, 198, 199, 265,
313, 202, 268, 265, 270, 388, 304, 550, 331, 291,
292, 388, 294, 295, 291, 291, 298, 389, 298, 270,
291, 307, 394, 272, 273, 274, 275, 336, 337, 388,
402, 265, 330, 288, 298, 265, 314, 315, 265, 290,
291, 268, 313, 313, 292, 354, 294, 295, 378, 337,
380, 381, 382, 382, 291, 292, 257, 294, 295, 313,
314, 298, 313, 314, 305, 268, 396, 270, 313, 335,
336, 337, 388, 389, 336, 337, 265, 265, 621, 484,
378, 486, 380, 381, 382, 394, 337, 313, 354, 315,
300, 313, 354, 402, 637, 388, 389, 378, 396, 380,
381, 382, 336, 393, 647, 389, 336, 393, 313, 378,
315, 380, 381, 382, 369, 396, 337, 660, 310, 311,
354, 394, 388, 409, 354, 313, 314, 396, 394, 427,
310, 311, 394, 450, 451, 394, 402, 388, 389, 402,
402, 520, 521, 394, 313, 314, 315, 265, 471, 337,
396, 402, 450, 451, 332, 313, 442, 393, 475, 445,
394, 338, 313, 34, 394, 313, 314, 315, 402, 402,
313, 268, 402, 313, 265, 430, 543, 475, 268, 509,
503, 467, 268, 337, 514, 515, 268, 473, 518, 518,
265, 393, 396, 479, 291, 292, 393, 294, 295, 387,
393, 298, 393, 393, 468, 393, 388, 462, 0, 464,
465, 509, 313, 310, 311, 513, 514, 515, 516, 513,
518, 393, 516, 267, 95, 480, 524, 394, 509, 393,
524, 337, 393, 514, 515, 388, 388, 518, 109, 110,
509, 337, 528, 313, 394, 514, 515, 533, 534, 518,
536, 313, 550, 379, 388, 394, 382, 383, 388, 626,
627, 387, 394, 389, 390, 391, 596, 393, 268, 265,
525, 265, 394, 559, 302, 402, 562, 541, 564, 402,
544, 491, 394, 370, 394, 266, 394, 394, 552, 499,
267, 555, 556, 268, 504, 338, 560, 401, 596, 563,
586, 565, 600, 313, 270, 265, 600, 337, 606, 265,
267, 337, 606, 402, 185, 596, 393, 265, 189, 190,
191, 192, 193, 621, 265, 394, 393, 596, 394, 593,
201, 394, 265, 290, 291, 394, 338, 547, 337, 637,
337, 394, 337, 393, 265, 267, 313, 267, 267, 647,
614, 267, 270, 268, 313, 641, 313, 268, 338, 394,
624, 394, 660, 394, 400, 337, 268, 268, 0, 354,
388, 265, 354, 313, 313, 354, 640, 632, 268, 643,
354, 305, 592, 291, 594, 595, 298, 368, 369, 370,
371, 372, 305, 374, 375, 376, 402, 661, 379, 291,
388, 382, 383, 613, 402, 388, 387, 617, 389, 390,
391, 338, 393, 265, 265, 313, 394, 313, 394, 629,
268, 631, 268, 268, 268, 388, 268, 503, 354, 639,
387, 388, 389, 304, 166, 276, 393, 394, 374, 375,
376, 635, 599, 379, 609, 402, 382, 383, 416, 266,
184, 387, 498, 389, 390, 391, 427, 393, 450, 330,
331, 451, 417, 475, 256, 568, 515, 265, 260, 261,
262, 274, 445, 265, 266, 267, 268, 269, 15, 271,
272, 273, 274, 275, 276, 277, 533, 279, 280, 281,
282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
292, 293, 294, 295, 519, 275, 298, 299, 300, 301,
302, 303, 304, 305, 306, 307, 308, 309, 310, 311,
312, 313, 314, 315, 316, 317, 318, 319, 320, 321,
322, 323, 324, 325, 326, 327, 328, 329, 0, -1,
-1, 333, 334, 360, 361, 362, 363, 364, 365, 366,
367, 368, 369, 370, 371, 372, 427, 374, 375, 376,
-1, -1, 379, -1, 356, 382, 383, 359, 538, -1,
387, 536, 389, 390, 391, -1, 393, 369, 370, 450,
451, -1, 374, -1, -1, -1, -1, 379, -1, 381,
382, 383, -1, -1, -1, 387, -1, 389, -1, -1,
471, 393, -1, -1, 475, 397, 398, -1, 400, 266,
402, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 256, -1, -1, -1, 260, 261,
262, -1, 503, 265, 266, 267, 268, 269, -1, 271,
272, 273, 274, 275, 276, 277, -1, 279, 280, 281,
282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
292, 293, 294, 295, -1, -1, 298, 299, 300, 301,
302, 303, 304, 305, 306, 307, 308, 309, 310, 311,
312, 313, 314, 315, 316, 317, 318, 319, 320, 321,
322, 323, 324, 325, 326, 327, 328, 329, -1, -1,
-1, 333, 334, -1, -1, 362, 363, 364, 365, 366,
367, 368, 369, 370, 371, 372, -1, 374, 375, 376,
-1, -1, 379, -1, 356, 382, 383, 359, -1, -1,
387, -1, 389, 390, 391, -1, 393, 369, 370, -1,
-1, -1, 374, -1, -1, -1, -1, 379, -1, 381,
382, 383, -1, -1, -1, 387, -1, 389, -1, -1,
-1, 393, -1, -1, -1, 397, 398, -1, -1, 401,
402, -1, -1, -1, -1, 266, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 256, -1, -1, -1, 260, 261,
262, -1, -1, 265, 266, 267, -1, 269, -1, 271,
272, 273, 274, 275, 276, 277, -1, 279, 280, 281,
282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
292, 293, 294, 295, -1, -1, 298, 299, 300, 301,
302, 303, 304, 305, 306, 307, 308, 309, -1, -1,
312, 313, 314, 315, 316, 317, 318, 319, 320, 321,
322, 323, 324, 325, 326, 327, 328, 329, -1, -1,
-1, 333, 334, -1, -1, 366, 367, 368, 369, 370,
371, 372, -1, 374, 375, 376, -1, -1, 379, -1,
-1, 382, 383, -1, 356, -1, 387, 359, 389, 390,
391, -1, 393, -1, -1, -1, -1, 369, 370, -1,
-1, -1, 374, -1, -1, -1, -1, 379, 266, 381,
382, 383, 260, 261, 262, 387, -1, 389, -1, -1,
-1, 393, -1, -1, -1, 397, 398, -1, 276, 277,
-1, 279, 280, 281, 282, 283, 284, 285, 286, 287,
288, 289, 290, -1, 292, -1, 294, 295, -1, -1,
298, -1, 260, 261, 262, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 313, 314, 315, 276, 277,
-1, 279, 280, 281, 282, 283, 284, 285, 286, 287,
288, 289, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 313, 314, 315, 356, -1,
-1, 359, 370, 371, 372, -1, 374, 375, 376, -1,
-1, 379, 370, -1, 382, 383, 374, -1, -1, 387,
-1, 389, 390, 391, -1, 393, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 393, -1, -1, 356, -1,
-1, 359, -1, -1, 402, -1, -1, -1, -1, -1,
-1, -1, 370, -1, -1, -1, 374, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 393, 260, 261, 262, -1,
-1, 265, 266, 267, 402, 269, -1, -1, 272, 273,
274, 275, 276, 277, -1, 279, 280, 281, 282, 283,
284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
294, 295, -1, -1, 298, 299, 300, 301, 302, 303,
304, 305, 306, 307, 308, 309, -1, -1, 312, 313,
314, 315, 316, 317, 318, 319, 320, 321, 322, 323,
324, 325, 326, 327, 328, 329, -1, -1, -1, 333,
334, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 356, -1, -1, 359, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 369, 370, -1, -1, -1,
374, -1, -1, -1, -1, 379, -1, 381, 382, 383,
-1, -1, -1, 387, -1, 389, -1, -1, -1, 393,
260, 261, 262, 397, 398, 265, 266, 267, -1, 269,
-1, -1, 272, 273, 274, 275, 276, 277, -1, 279,
280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
290, -1, -1, 293, -1, -1, -1, -1, -1, 299,
300, 301, 302, 303, 304, 305, 306, 307, 308, 309,
-1, -1, 312, 313, 314, 315, 316, 317, 318, 319,
320, 321, 322, 323, 324, 325, 326, 327, 328, 329,
-1, -1, -1, 333, 334, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 356, -1, -1, 359,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 369,
370, -1, -1, -1, 374, -1, -1, -1, -1, 379,
-1, 381, 382, 383, -1, -1, -1, 387, -1, 389,
-1, -1, -1, 393, 260, 261, 262, 397, 398, 265,
266, 267, -1, 269, -1, -1, 272, 273, 274, 275,
276, 277, -1, 279, 280, 281, 282, 283, 284, 285,
286, 287, 288, 289, 290, -1, -1, 293, -1, -1,
-1, -1, -1, 299, 300, 301, 302, 303, 304, 305,
306, 307, 308, 309, -1, -1, 312, 313, 314, 315,
-1, -1, 318, 319, 320, 321, 322, 323, 324, 325,
326, 327, 328, 329, -1, -1, -1, 333, 334, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
356, -1, -1, 359, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 369, 370, -1, -1, -1, 374, -1,
-1, -1, -1, 379, -1, 381, 382, 383, -1, -1,
-1, 387, -1, 389, -1, -1, -1, 393, 260, 261,
262, 397, 398, 265, 266, 267, -1, 269, -1, -1,
272, 273, 274, 275, 276, 277, -1, 279, 280, 281,
282, 283, 284, 285, 286, 287, 288, 289, 290, -1,
-1, 293, -1, -1, -1, -1, -1, 299, 300, 301,
302, 303, 304, 305, 306, 307, 308, 309, -1, -1,
312, 313, 314, 315, -1, -1, 318, 319, 320, 321,
322, 323, 324, 325, 326, 327, 328, 329, -1, -1,
-1, 333, 334, 265, 266, -1, 268, -1, 270, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 356, -1, -1, 359, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 369, 370, -1,
-1, -1, 374, -1, -1, -1, -1, 379, -1, 381,
382, 383, -1, -1, -1, 387, -1, 389, -1, -1,
-1, 393, -1, -1, -1, 397, 398, -1, 265, 266,
-1, -1, -1, 335, 336, 337, 338, 339, 340, 341,
342, 343, 344, 345, 346, 347, 348, 349, 350, 351,
352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
372, -1, 374, 375, 376, -1, -1, 379, -1, -1,
382, 383, -1, -1, -1, 387, 388, 389, 390, 391,
-1, 393, 394, 265, 266, -1, 268, -1, 270, -1,
402, 338, 339, 340, 341, 342, 343, 344, 345, 346,
347, 348, 349, 350, 351, 352, 353, -1, 355, 356,
357, 358, 359, 360, 361, 362, 363, 364, 365, 366,
367, 368, 369, 370, 371, 372, -1, 374, 375, 376,
-1, -1, 379, -1, -1, 382, 383, -1, -1, -1,
387, -1, 389, 390, 391, -1, 393, -1, 266, -1,
268, -1, 270, 335, 336, 337, 338, 339, 340, 341,
342, 343, 344, 345, 346, 347, 348, 349, 350, 351,
352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
372, -1, 374, 375, 376, -1, -1, 379, -1, -1,
382, 383, -1, -1, -1, 387, 388, 389, 390, 391,
-1, 393, 394, 265, 266, -1, 268, 335, 270, 337,
402, 339, 340, 341, 342, 343, 344, 345, 346, 347,
348, 349, 350, 351, 352, 353, -1, 355, 356, 357,
358, 359, 360, 361, 362, 363, 364, 365, 366, 367,
368, 369, 370, 371, 372, -1, 374, 375, 376, -1,
-1, 379, -1, -1, 382, 383, -1, -1, -1, 387,
-1, 389, 390, 391, -1, 393, -1, -1, -1, -1,
266, -1, -1, 335, 336, 337, 338, 339, 340, 341,
342, 343, 344, 345, 346, 347, 348, 349, 350, 351,
352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
372, -1, 374, 375, 376, -1, -1, 379, -1, -1,
382, 383, -1, -1, -1, 387, 388, 389, 390, 391,
-1, 393, 394, 265, 266, -1, 268, -1, 270, -1,
402, 337, 338, 339, 340, 341, 342, 343, 344, 345,
346, 347, 348, 349, 350, 351, 352, 353, -1, 355,
356, 357, 358, 359, 360, 361, 362, 363, 364, 365,
366, 367, 368, 369, 370, 371, 372, -1, 374, 375,
376, -1, -1, 379, -1, -1, 382, 383, -1, -1,
-1, 387, -1, 389, 390, 391, -1, 393, -1, -1,
266, -1, -1, 335, 336, 337, 338, 339, 340, 341,
342, 343, 344, 345, 346, 347, 348, 349, 350, 351,
352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
372, -1, 374, 375, 376, -1, -1, 379, -1, -1,
382, 383, -1, -1, -1, 387, 388, 389, 390, 391,
-1, 393, 394, 265, 266, -1, 268, -1, 270, -1,
402, 337, 338, 339, 340, 341, 342, 343, 344, 345,
346, 347, 348, 349, 350, 351, 352, 353, -1, 355,
356, 357, 358, 359, 360, 361, 362, 363, 364, 365,
366, 367, 368, 369, 370, 371, 372, -1, 374, 375,
376, -1, 266, 379, -1, -1, 382, 383, -1, -1,
-1, 387, -1, 389, 390, 391, -1, 393, -1, -1,
-1, -1, -1, 335, 336, 337, 338, 339, 340, 341,
342, 343, 344, 345, 346, 347, 348, 349, 350, 351,
352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
372, -1, 374, 375, 376, 265, 266, -1, 268, -1,
270, -1, -1, -1, -1, -1, 388, -1, -1, -1,
-1, -1, 394, -1, -1, -1, -1, -1, -1, 353,
402, 355, 356, 357, 358, 359, 360, 361, 362, 363,
364, 365, 366, 367, 368, 369, 370, 371, 372, -1,
374, 375, 376, 266, -1, 379, -1, -1, 382, 383,
-1, -1, -1, 387, -1, 389, 390, 391, -1, 393,
-1, -1, -1, -1, -1, 335, 336, 337, 338, 339,
340, 341, 342, 343, 344, 345, 346, 347, 348, 349,
350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
360, 361, 362, 363, 364, 365, 366, 367, 368, 369,
370, 371, 372, -1, 374, 375, 376, 265, 266, -1,
268, -1, 270, -1, -1, -1, -1, -1, 388, -1,
-1, -1, -1, -1, 394, -1, -1, -1, -1, -1,
-1, -1, 402, 356, 357, 358, 359, 360, 361, 362,
363, 364, 365, 366, 367, 368, 369, 370, 371, 372,
-1, 374, 375, 376, 266, -1, 379, -1, -1, 382,
383, -1, -1, -1, 387, -1, 389, 390, 391, -1,
393, -1, -1, -1, -1, -1, -1, 335, 336, 337,
338, 339, 340, 341, 342, 343, 344, 345, 346, 347,
348, 349, 350, 351, 352, 353, 354, 355, 356, 357,
358, 359, 360, 361, 362, 363, 364, 365, 366, 367,
368, 369, 370, 371, 372, -1, 374, 375, 376, 265,
266, -1, 268, -1, 270, -1, -1, -1, -1, -1,
388, -1, -1, -1, -1, -1, 394, -1, -1, -1,
-1, -1, -1, -1, 402, 357, 358, 359, 360, 361,
362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
372, -1, 374, 375, 376, 266, -1, 379, -1, -1,
382, 383, -1, -1, -1, 387, -1, 389, 390, 391,
-1, 393, -1, -1, -1, -1, -1, -1, -1, 335,
336, 337, 338, 339, 340, 341, 342, 343, 344, 345,
346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
356, 357, 358, 359, 360, 361, 362, 363, 364, 365,
366, 367, 368, 369, 370, 371, 372, -1, 374, 375,
376, 265, 266, -1, 268, -1, 270, -1, -1, -1,
-1, -1, 388, -1, -1, -1, -1, -1, 394, -1,
-1, -1, -1, -1, -1, -1, 402, 358, 359, 360,
361, 362, 363, 364, 365, 366, 367, 368, 369, 370,
371, 372, -1, 374, 375, 376, 266, -1, 379, -1,
-1, 382, 383, -1, -1, -1, 387, -1, 389, 390,
391, -1, 393, -1, -1, -1, -1, -1, -1, -1,
-1, 335, 336, 337, 338, 339, 340, 341, 342, 343,
344, 345, 346, 347, 348, 349, 350, 351, 352, 353,
354, 355, 356, 357, 358, 359, 360, 361, 362, 363,
364, 365, 366, 367, 368, 369, 370, 371, 372, -1,
374, 375, 376, 265, 266, -1, 268, -1, 270, -1,
-1, -1, -1, -1, 388, -1, -1, -1, -1, -1,
394, -1, -1, -1, -1, -1, -1, -1, 402, 359,
360, 361, 362, 363, 364, 365, 366, 367, 368, 369,
370, 371, 372, -1, 374, 375, 376, -1, -1, 379,
-1, -1, 382, 383, -1, -1, -1, 387, -1, 389,
390, 391, -1, 393, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 335, 336, 337, 338, 339, 340, 341,
342, 343, 344, 345, 346, 347, 348, 349, 350, 351,
352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
372, -1, 374, 375, 376, 265, 266, -1, 268, -1,
270, -1, -1, -1, -1, -1, 388, -1, -1, -1,
-1, -1, 394, -1, -1, -1, -1, -1, -1, -1,
402, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 335, 336, 337, 338, 339,
340, 341, 342, 343, 344, 345, 346, 347, 348, 349,
350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
360, 361, 362, 363, 364, 365, 366, 367, 368, 369,
370, 371, 372, -1, 374, 375, 376, 265, 266, -1,
268, -1, 270, -1, -1, -1, -1, -1, 388, -1,
-1, -1, -1, -1, 394, -1, -1, -1, -1, -1,
-1, -1, 402, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 335, 336, 337,
338, 339, 340, 341, 342, 343, 344, 345, 346, 347,
348, 349, 350, 351, 352, 353, 354, 355, 356, 357,
358, 359, 360, 361, 362, 363, 364, 365, 366, 367,
368, 369, 370, 371, 372, -1, 374, 375, 376, 265,
266, -1, 268, -1, 270, -1, -1, -1, -1, -1,
388, -1, -1, -1, -1, -1, 394, -1, -1, -1,
-1, -1, -1, -1, 402, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 335,
336, 337, 338, 339, 340, 341, 342, 343, 344, 345,
346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
356, 357, 358, 359, 360, 361, 362, 363, 364, 365,
366, 367, 368, 369, 370, 371, 372, -1, 374, 375,
376, 265, 266, -1, 268, -1, 270, -1, -1, -1,
-1, -1, 388, -1, -1, -1, -1, -1, 394, -1,
-1, -1, -1, -1, -1, -1, 402, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 335, 336, 337, 338, 339, 340, 341, 342, 343,
344, 345, 346, 347, 348, 349, 350, 351, 352, 353,
354, 355, 356, 357, 358, 359, 360, 361, 362, 363,
364, 365, 366, 367, 368, 369, 370, 371, 372, -1,
374, 375, 376, 265, 266, -1, 268, -1, 270, -1,
-1, -1, -1, -1, 388, -1, -1, -1, -1, -1,
394, -1, -1, -1, -1, -1, -1, -1, 402, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 335, 336, 337, 338, 339, 340, 341,
342, 343, 344, 345, 346, 347, 348, 349, 350, 351,
352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
372, 265, 266, -1, 268, -1, 270, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 388, -1, -1, -1,
-1, -1, 394, -1, -1, -1, -1, -1, -1, -1,
402, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 335, 336, 337, 338, 339, 340, 341, 342, 343,
344, 345, 346, 347, 348, 349, 350, 351, 352, 353,
354, 355, 356, 357, 358, 359, 360, 361, 362, 363,
364, 365, 366, 367, 368, 369, 370, 371, 372, 265,
266, -1, 268, -1, 270, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 388, -1, -1, -1, -1, -1,
394, -1, -1, -1, -1, -1, -1, -1, 402, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 335,
336, 337, 338, 339, 340, 341, 342, 343, 344, 345,
346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
356, 357, 358, 359, 360, 361, 362, 363, 364, 365,
366, 367, 368, 369, 370, 371, 372, 265, 266, -1,
268, -1, 270, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 388, -1, -1, -1, -1, -1, 394, -1,
-1, -1, -1, -1, -1, -1, 402, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 335, 336, 337,
338, 339, 340, 341, 342, 343, 344, 345, 346, 347,
348, 349, 350, 351, 352, 353, 354, 355, 356, 357,
358, 359, 360, 361, 362, 363, 364, 365, 366, 367,
368, 369, 370, 371, 372, 265, 266, -1, 268, -1,
270, -1, -1, -1, -1, -1, -1, -1, -1, -1,
388, -1, -1, -1, -1, -1, 394, -1, -1, -1,
-1, -1, -1, -1, 402, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 335, 336, 337, 338, 339,
340, 341, 342, 343, 344, 345, 346, 347, 348, 349,
350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
360, 361, 362, 363, 364, 365, 366, 367, 368, 369,
370, 371, 372, 265, -1, -1, 268, -1, 270, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 388, -1,
-1, -1, -1, -1, 394, -1, -1, -1, -1, -1,
-1, -1, 402, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 335, 336, 337, 338, 339, 340, 341,
342, 343, 344, 345, 346, 347, 348, 349, 350, 351,
352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
362, 363, 364, 365, 366, 367, 368, 369, 265, -1,
-1, 268, -1, 270, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 388, -1, -1, -1,
-1, -1, 394, -1, -1, -1, -1, -1, -1, -1,
402, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 335, 336,
337, 338, 339, 340, 341, 342, 343, 344, 345, 346,
347, 348, 349, 350, 351, 352, 353, 354, 355, 356,
357, 358, 359, 360, 361, 362, 363, 364, 365, 366,
367, 368, 369, 265, -1, -1, 268, -1, 270, -1,
-1, -1, -1, -1, -1, -1, -1, 260, 261, 262,
-1, 388, -1, -1, -1, -1, -1, 394, -1, -1,
-1, -1, -1, 276, 277, 402, 279, 280, 281, 282,
283, 284, 285, 286, 287, 288, 289, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 314, 315, 335, 336, 337, 338, 339, 340, 341,
342, 343, 344, 345, 346, 347, 348, 349, 350, 351,
352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
362, 363, 364, 365, 366, 367, 265, -1, -1, 268,
-1, 270, -1, 356, -1, -1, 359, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 388, 370, -1, -1,
-1, 374, 394, -1, -1, -1, -1, -1, -1, -1,
402, -1, -1, -1, -1, -1, -1, -1, -1, -1,
393, 394, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 335, 336, 337, 338,
339, 340, 341, 342, 343, 344, 345, 346, 347, 348,
349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
359, 360, 361, 362, 363, 364, 365, 366, 367, 265,
-1, -1, 268, -1, 270, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 388,
-1, -1, -1, -1, -1, 394, -1, -1, -1, -1,
-1, -1, -1, 402, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 335,
336, 337, 338, 339, 340, 341, 342, 343, 344, 345,
346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
356, 357, 358, 359, 360, 361, 362, 363, 364, 365,
265, -1, -1, 268, -1, 270, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 388, -1, -1, -1, -1, -1, 394, -1,
-1, -1, -1, -1, -1, -1, 402, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
365, 265, -1, -1, 268, -1, 270, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 388, -1, -1, -1, -1, -1, 394,
-1, -1, -1, -1, -1, -1, -1, 402, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 335, 336, 337, 338, 339, 340, 341, 342, 343,
344, 345, 346, 347, 348, 349, 350, 351, 352, 353,
354, 355, 356, 357, 358, 359, 360, 361, 362, 363,
364, 365, 265, -1, -1, 268, -1, 270, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 388, -1, -1, -1, -1, -1,
394, -1, -1, -1, -1, -1, -1, -1, 402, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 335, 336, 337, 338, 339, 340, 341, 342,
343, 344, 345, 346, 347, 348, 349, 350, 351, 352,
353, 354, 355, 356, 357, 358, 359, 360, 361, 362,
363, 364, 365, 265, -1, -1, 268, -1, 270, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 388, -1, -1, -1, -1,
-1, 394, -1, -1, -1, -1, -1, -1, -1, 402,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 335, 336, 337, 338, 339, 340, 341,
342, 343, 344, 345, 346, 347, 348, 349, 350, 351,
352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
265, -1, -1, 268, -1, 270, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 388, -1, 265, -1,
-1, 268, 394, 270, -1, -1, -1, -1, -1, -1,
402, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
355, 356, 357, 358, 359, 360, 361, -1, 335, 336,
337, 338, 339, 340, 341, 342, 343, 344, 345, 346,
347, 348, 349, 350, 351, 352, 353, 354, 355, 356,
357, 358, 359, 388, -1, 265, -1, -1, 268, 394,
270, -1, -1, -1, -1, -1, -1, 402, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 265,
-1, 388, 268, -1, 270, -1, -1, 394, -1, -1,
-1, -1, -1, -1, -1, 402, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 335, 336, 337, 338, 339,
340, 341, 342, 343, 344, 345, 346, 347, 348, 349,
350, 351, 352, 353, 354, 355, 356, 357, 358, 335,
336, 337, 338, 339, 340, 341, 342, 343, 344, 345,
346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
356, 357, 265, -1, -1, 268, -1, 270, 388, -1,
-1, -1, -1, -1, 394, -1, -1, -1, -1, -1,
-1, -1, 402, -1, 265, -1, -1, 268, -1, 270,
-1, -1, 388, -1, -1, -1, -1, -1, 394, -1,
-1, -1, -1, -1, -1, -1, 402, -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, 335, 336, 337, 338, 339, 340, 341, 342,
343, 344, 345, 346, 347, 348, 349, 350, 351, 352,
353, 354, 355, 356, 335, 336, 337, 338, 339, 340,
341, 342, 343, 344, 345, 346, 347, 348, 349, 350,
351, 352, 353, 354, 355, 265, -1, -1, 268, -1,
270, -1, -1, -1, -1, 388, -1, -1, -1, -1,
-1, 394, -1, -1, -1, 265, -1, -1, 268, 402,
270, -1, -1, -1, -1, -1, -1, 388, -1, -1,
-1, -1, -1, 394, -1, -1, -1, -1, -1, -1,
-1, 402, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 335, 336, 337, 338, 339,
340, 341, 342, 343, 344, 345, 346, 347, 348, 349,
350, 351, 352, -1, 354, 335, 336, 337, 338, 339,
340, 341, 342, 343, 344, 345, 346, 347, 348, 349,
350, 351, 352, -1, 354, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 388, -1,
-1, -1, -1, -1, 394, -1, -1, -1, -1, -1,
-1, -1, 402, -1, 260, 261, 262, -1, 388, -1,
266, 267, -1, 269, 394, -1, 272, 273, 274, 275,
276, 277, 402, 279, 280, 281, 282, 283, 284, 285,
286, 287, 288, 289, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 299, 300, -1, -1, -1, -1, -1,
-1, -1, -1, 309, -1, -1, -1, 313, 314, 315,
-1, -1, 318, 319, 320, 321, 322, 323, 324, 325,
326, 327, 328, 329, -1, -1, -1, 333, 334, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
356, -1, -1, 359, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 369, 370, -1, -1, -1, 374, -1,
-1, -1, -1, 379, -1, 381, 382, 383, -1, -1,
-1, 387, -1, 389, 260, 261, 262, 393, -1, -1,
266, -1, -1, 269, -1, -1, 272, 273, 274, 275,
276, 277, -1, 279, 280, 281, 282, 283, 284, 285,
286, 287, 288, 289, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 299, 300, -1, -1, -1, -1, -1,
-1, -1, -1, 309, -1, -1, -1, 313, 314, 315,
-1, -1, 318, 319, 320, 321, 322, 323, 324, 325,
326, 327, 328, 329, -1, -1, -1, 333, 334, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
356, -1, -1, 359, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 369, 370, -1, -1, -1, 374, -1,
-1, -1, -1, 379, -1, 381, 382, 383, -1, -1,
-1, 387, -1, 389, 260, 261, 262, 393, -1, -1,
266, 267, 268, 269, -1, -1, -1, -1, -1, -1,
276, 277, -1, 279, 280, 281, 282, 283, 284, 285,
286, 287, 288, 289, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 309, -1, -1, -1, 313, 314, 315,
-1, -1, 318, 319, 320, 321, 322, 323, 324, 325,
326, 327, 328, 329, -1, -1, -1, 333, 334, 335,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
356, -1, -1, 359, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 369, 370, -1, -1, -1, 374, -1,
-1, -1, -1, 379, -1, 381, 382, 383, -1, -1,
-1, 387, -1, 389, 260, 261, 262, 393, -1, -1,
266, -1, 268, 269, -1, -1, -1, -1, -1, -1,
276, 277, -1, 279, 280, 281, 282, 283, 284, 285,
286, 287, 288, 289, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 309, -1, -1, -1, 313, 314, 315,
-1, -1, 318, 319, 320, 321, 322, 323, 324, 325,
326, 327, 328, 329, -1, -1, -1, 333, 334, 335,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
356, -1, -1, 359, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 369, 370, -1, -1, -1, 374, -1,
-1, -1, -1, 379, -1, 381, 382, 383, -1, -1,
-1, 387, -1, 389, 260, 261, 262, 393, -1, -1,
266, 267, 268, 269, -1, -1, -1, -1, -1, -1,
276, 277, -1, 279, 280, 281, 282, 283, 284, 285,
286, 287, 288, 289, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 309, -1, -1, -1, 313, 314, 315,
-1, -1, 318, 319, 320, 321, 322, 323, 324, 325,
326, 327, 328, 329, -1, -1, -1, 333, 334, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
356, -1, -1, 359, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 369, 370, -1, -1, -1, 374, -1,
-1, -1, -1, 379, -1, 381, 382, 383, -1, -1,
-1, 387, -1, 389, 260, 261, 262, 393, -1, -1,
266, -1, -1, 269, -1, -1, -1, -1, -1, -1,
276, 277, -1, 279, 280, 281, 282, 283, 284, 285,
286, 287, 288, 289, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 309, -1, -1, -1, 313, 314, 315,
-1, -1, 318, 319, 320, 321, 322, 323, 324, 325,
326, 327, 328, 329, -1, -1, -1, 333, 334, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
356, -1, -1, 359, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 369, 370, -1, -1, -1, 374, -1,
-1, -1, -1, 379, -1, 381, 382, 383, -1, -1,
-1, 387, 388, 389, 260, 261, 262, 393, -1, -1,
266, -1, -1, 269, 270, -1, -1, -1, -1, -1,
276, 277, -1, 279, 280, 281, 282, 283, 284, 285,
286, 287, 288, 289, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 309, -1, -1, -1, 313, 314, 315,
-1, -1, 318, 319, 320, 321, 322, 323, 324, 325,
326, 327, 328, 329, -1, -1, -1, 333, 334, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
356, -1, -1, 359, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 369, 370, -1, -1, -1, 374, -1,
-1, -1, -1, 379, -1, 381, 382, 383, -1, -1,
-1, 387, -1, 389, 260, 261, 262, 393, -1, -1,
266, 267, -1, 269, -1, -1, -1, -1, -1, -1,
276, 277, -1, 279, 280, 281, 282, 283, 284, 285,
286, 287, 288, 289, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 309, -1, -1, -1, 313, 314, 315,
-1, -1, 318, 319, 320, 321, 322, 323, 324, 325,
326, 327, 328, 329, -1, -1, -1, 333, 334, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
356, -1, -1, 359, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 369, 370, -1, -1, -1, 374, -1,
-1, -1, -1, 379, -1, 381, 382, 383, -1, -1,
-1, 387, -1, 389, 260, 261, 262, 393, -1, -1,
266, -1, -1, 269, -1, -1, -1, -1, -1, -1,
276, 277, -1, 279, 280, 281, 282, 283, 284, 285,
286, 287, 288, 289, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 309, -1, -1, -1, 313, 314, 315,
-1, -1, 318, 319, 320, 321, 322, 323, 324, 325,
326, 327, 328, 329, -1, -1, -1, 333, 334, 335,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
356, -1, -1, 359, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 369, 370, -1, -1, -1, 374, -1,
-1, -1, -1, 379, -1, 381, 382, 383, -1, -1,
-1, 387, -1, 389, 260, 261, 262, 393, -1, -1,
266, 267, -1, 269, -1, -1, -1, -1, -1, -1,
276, 277, -1, 279, 280, 281, 282, 283, 284, 285,
286, 287, 288, 289, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 309, -1, -1, -1, 313, 314, 315,
-1, -1, 318, 319, 320, 321, 322, 323, 324, 325,
326, 327, 328, 329, -1, -1, -1, 333, 334, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
356, -1, -1, 359, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 369, 370, -1, -1, -1, 374, -1,
-1, -1, -1, 379, -1, 381, 382, 383, -1, -1,
-1, 387, -1, 389, 260, 261, 262, 393, -1, -1,
266, -1, -1, 269, -1, -1, -1, -1, -1, -1,
276, 277, -1, 279, 280, 281, 282, 283, 284, 285,
286, 287, 288, 289, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 309, -1, -1, -1, 313, 314, 315,
-1, -1, 318, 319, 320, 321, 322, 323, 324, 325,
326, 327, 328, 329, -1, -1, -1, 333, 334, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
356, -1, -1, 359, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 369, 370, -1, -1, -1, 374, 260,
261, 262, -1, 379, -1, 381, 382, 383, -1, -1,
-1, 387, -1, 389, -1, 276, 277, 393, 279, 280,
281, 282, 283, 284, 285, 286, 287, 288, 289, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 260,
261, 262, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 313, 314, 315, 276, 277, -1, 279, 280,
281, 282, 283, 284, 285, 286, 287, 288, 289, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 266, -1, -1, -1, 270, -1,
-1, -1, -1, 314, 315, 356, -1, -1, 359, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 370,
-1, -1, -1, 374, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 393, -1, -1, 356, -1, -1, 359, -1,
266, -1, -1, -1, -1, -1, -1, -1, -1, 370,
-1, -1, -1, 374, -1, 337, 338, 339, 340, 341,
342, 343, 344, 345, 346, 347, 348, 349, 350, 351,
352, 353, 393, 355, 356, 357, 358, 359, 360, 361,
362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
372, -1, 374, 375, 376, -1, -1, 379, -1, 266,
382, 383, -1, -1, -1, 387, -1, 389, 390, 391,
-1, 393, 338, 339, 340, 341, 342, 343, 344, 345,
346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
356, 357, 358, 359, 360, 361, 362, 363, 364, 365,
366, 367, 368, 369, 370, 371, 372, -1, 374, 375,
376, -1, -1, 379, -1, -1, 382, 383, 266, -1,
-1, 387, -1, 389, 390, 391, -1, 393, 335, -1,
-1, 338, 339, 340, 341, 342, 343, 344, 345, 346,
347, 348, 349, 350, 351, 352, 353, -1, 355, 356,
357, 358, 359, 360, 361, 362, 363, 364, 365, 366,
367, 368, 369, 370, 371, 372, -1, 374, 375, 376,
-1, -1, 379, -1, 266, 382, 383, -1, -1, -1,
387, -1, 389, 390, 391, -1, 393, -1, -1, 337,
338, 339, 340, 341, 342, 343, 344, 345, 346, 347,
348, 349, 350, 351, 352, 353, -1, 355, 356, 357,
358, 359, 360, 361, 362, 363, 364, 365, 366, 367,
368, 369, 370, 371, 372, -1, 374, 375, 376, -1,
-1, 379, -1, -1, 382, 383, -1, -1, -1, 387,
-1, 389, 390, 391, -1, 393, 338, 339, 340, 341,
342, 343, 344, 345, 346, 347, 348, 349, 350, 351,
352, 353, -1, 355, 356, 357, 358, 359, 360, 361,
362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
372, -1, 374, 375, 376, -1, -1, 379, -1, -1,
382, 383, -1, -1, -1, 387, -1, 389, 390, 391,
-1, 393,
};
#define YYFINAL 1
#ifndef YYDEBUG
#define YYDEBUG 0
#endif
#define YYMAXTOKEN 402
#if YYDEBUG
char *yyname[] = {
"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"VAR","EXPR","ARRAY","STRUCT",
"UNION","ENUM","COMP","HASH","SEMI","MOD","OC","CC","DOLLAR","DOTDOTDOT",
"ENDFILE","GLOBAL","AUTO","STATIC","CONST","POLY","INTEGER","NATURAL",
"RATIONAL","REAL","STRING","FOREIGN","FILET","MUTEX","SEMAPHORE","CONTINUATION",
"THREAD","VOID","BOOL","FUNCTION","FUNC","EXCEPTION","RAISE","TYPEDEF","IMPORT",
"NEW","ANONINIT","NAMESPACE","PUBLIC","PROTECTED","EXTEND","WHILE","DO","FOR",
"SWITCH","BREAK","CONTINUE","RETURNTOK","FORK","CASE","DEFAULT","TWIXT","NAME",
"TYPENAME","NAMESPACENAME","COMMAND","NAMECOMMAND","TEN_NUM","OCTAL0_NUM",
"OCTAL_NUM","BINARY_NUM","HEX_NUM","TEN_FLOAT","OCTAL0_FLOAT","OCTAL_FLOAT",
"BINARY_FLOAT","HEX_FLOAT","CHAR_CONST","STRING_CONST","POLY_CONST",
"THREAD_CONST","COMMENT_CONST","VOIDVAL","BOOLVAL","DARROW","POUND","COMMA",
"ASSIGN","ASSIGNPLUS","ASSIGNMINUS","ASSIGNTIMES","ASSIGNDIVIDE","ASSIGNDIV",
"ASSIGNMOD","ASSIGNPOW","ASSIGNSHIFTL","ASSIGNSHIFTR","ASSIGNLXOR","ASSIGNLAND",
"ASSIGNLOR","ASSIGNOR","ASSIGNAND","QUEST","COLON","OR","AND","LOR","LXOR",
"LAND","EQ","NE","LT","GT","LE","GE","SHIFTL","SHIFTR","PLUS","MINUS","TIMES",
"DIVIDE","DIV","POW","STARSTAR","POW2","POW3","UNIONCAST","UMINUS","BANG",
"FACT","LNOT","INC","DEC","STAR","AMPER","THREADID","OS","CS","DOT","ARROW",
"STAROS","CALL","OP","CP","POINTER","COLONCOLON","IF","TRY","NONL","ELSE",
"CATCH","NL",
};
char *yyrule[] = {
"$accept : lines",
"lines : lines pcommand",
"lines :",
"pcommand : command",
"pcommand : error reset eend",
"eend : NL",
"eend : SEMI",
"eend : ENDFILE",
"ignorenl :",
"attendnl :",
"reset :",
"not_command :",
"opt_nl : NL",
"opt_nl :",
"opt_semi : SEMI",
"opt_semi :",
"opt_comma : COMMA",
"opt_comma :",
"command : not_command expr reset NL",
"command : not_command expr POUND expr reset NL",
"command : not_command statement reset opt_nl",
"command : not_command COMMAND opt_exprs reset opt_semi NL",
"command : not_command NAMECOMMAND opt_rawnames reset opt_semi NL",
"command : NL",
"command : ENDFILE",
"opt_rawnames : rawnames",
"opt_rawnames :",
"rawnames : rawname COMMA rawnames",
"rawnames : rawname",
"rawname : rawnamespace rawatom",
"rawatom : NAME",
"rawatom : NAMESPACENAME",
"rawatom : TYPENAME",
"rawnamespace : rawnamespace rawatom COLONCOLON",
"rawnamespace :",
"fulltype : namespace TYPENAME",
"fulltype : TYPENAME",
"fullname : namespace namespacename",
"fullname : namespacename",
"fullnames : fullname",
"fullnames : fullname COMMA fullnames",
"namespace : namespace NAMESPACENAME COLONCOLON",
"namespace : NAMESPACENAME COLONCOLON",
"namespacename : NAME",
"namespacename : NAMESPACENAME",
"namespace_start :",
"namespace_end :",
"block : block_start statements block_end",
"block_start : OC namespace_start",
"block_end : namespace_end CC",
"statements : statement statements",
"statements :",
"if_statement : IF ignorenl namespace_start OP expr CP statement",
"if_statement : IF ignorenl namespace_start OP expr CP statement ELSE statement",
"statement : simple_statement",
"statement : block",
"simple_statement : if_statement namespace_end attendnl",
"simple_statement : WHILE ignorenl namespace_start OP expr CP statement namespace_end attendnl",
"simple_statement : DO ignorenl namespace_start statement WHILE OP expr CP namespace_end attendnl",
"simple_statement : FOR ignorenl namespace_start OP for_exprs CP statement namespace_end attendnl",
"simple_statement : SWITCH ignorenl namespace_start OP expr CP case_block namespace_end attendnl",
"simple_statement : union_or_enum SWITCH ignorenl namespace_start OP expr CP union_case_block namespace_end attendnl",
"simple_statement : BREAK SEMI",
"simple_statement : CONTINUE SEMI",
"simple_statement : RETURNTOK opt_expr SEMI",
"simple_statement : expr SEMI",
"simple_statement : SEMI",
"simple_statement : func_decl doc_string opt_func_body namespace_end",
"simple_statement : opt_publish EXCEPTION ignorenl NAME namespace_start opt_argdecls namespace_end doc_string SEMI attendnl",
"simple_statement : RAISE fullname OP opt_exprs CP SEMI",
"simple_statement : opt_publish TYPEDEF ignorenl typenames SEMI attendnl",
"simple_statement : opt_publish TYPEDEF ignorenl type typenames SEMI attendnl",
"$$1 :",
"simple_statement : publish_extend NAMESPACE ignorenl namespacename $$1 OC statements CC attendnl",
"simple_statement : opt_publish IMPORT ignorenl fullnames SEMI attendnl",
"simple_statement : try_statement attendnl",
"simple_statement : TWIXT ignorenl namespace_start OP opt_expr SEMI opt_expr CP statement namespace_end attendnl",
"for_exprs : opt_expr SEMI for_exprs",
"for_exprs : opt_expr",
"try_body_statement : simple_statement",
"try_body_statement : OC statements CC",
"try_statement : TRY ignorenl try_body_statement catches",
"catches : catches catch",
"catches :",
"catch : CATCH fullname namespace_start args doc_string block namespace_end",
"opt_func_body : func_body",
"opt_func_body : SEMI",
"$$2 :",
"func_body : $$2 block_or_expr",
"block_or_expr : block",
"block_or_expr : attendnl ASSIGN simpleexpr SEMI",
"union_or_enum : UNION",
"union_or_enum : ENUM",
"see_comment :",
"doc_string : see_comment opt_comment",
"opt_comment : COMMENT_CONST",
"opt_comment :",
"case_block : block_start cases block_end",
"cases : case cases",
"cases :",
"case : CASE expr COLON statements",
"case : DEFAULT COLON statements",
"union_case_block : block_start union_cases block_end",
"union_cases : union_case union_cases",
"union_cases :",
"union_case : CASE namespace_start NAME opt_name COLON statements namespace_end",
"union_case : DEFAULT COLON statements",
"opt_name : NAME",
"opt_name :",
"atoms : NAME COMMA atoms",
"atoms : NAME",
"typenames : typename COMMA typenames",
"typenames : typename",
"typename : TYPENAME",
"typename : NAME",
"initnames : name opt_init next_decl initnames",
"initnames : name opt_init",
"name : NAME",
"next_decl : COMMA",
"func_decl : func_name namespace_start opt_argdefines CP",
"func_name : decl NAME OP",
"func_name : decl FUNCTION NAME OP",
"func_name : FUNCTION ignorenl NAME OP",
"opt_init : ASSIGN simpleexpr",
"opt_init : ASSIGN init",
"opt_init :",
"decl : publish opt_class opt_type opt_nl",
"decl : class opt_type opt_nl",
"decl : type opt_nl",
"subscripts : opt_argdecls subscripts",
"subscripts : OS opt_stars CS subscripts",
"subscripts : OS dotdotdots CS subscripts",
"subscripts : OS dims CS subscripts",
"subscripts : OS type CS subscripts",
"subscripts :",
"type : subtype subscripts",
"type : TIMES type",
"type : STARSTAR type",
"type : AND type",
"type : LAND type",
"subtype : basetype",
"subtype : STRUCT OC struct_members CC",
"subtype : UNION OC union_members CC",
"subtype : ENUM OC atoms CC",
"subtype : OP type CP",
"subtype : fulltype",
"opt_type : type",
"opt_type :",
"basetype : POLY",
"basetype : INTEGER",
"basetype : RATIONAL",
"basetype : REAL",
"basetype : STRING",
"basetype : FILET",
"basetype : MUTEX",
"basetype : SEMAPHORE",
"basetype : CONTINUATION",
"basetype : THREAD",
"basetype : VOID",
"basetype : BOOL",
"basetype : FOREIGN",
"opt_stars : stars",
"opt_stars :",
"stars : stars COMMA TIMES",
"stars : TIMES",
"dotdotdots : dotdotdots COMMA DOTDOTDOT",
"dotdotdots : DOTDOTDOT",
"dims : simpleexpr COMMA dims",
"dims : simpleexpr",
"struct_members : opt_type atoms SEMI struct_members",
"struct_members :",
"union_members : opt_type atoms SEMI union_members",
"union_members :",
"opt_class : class",
"opt_class :",
"class : GLOBAL",
"class : AUTO",
"class : STATIC",
"class : CONST",
"opt_publish : publish",
"opt_publish :",
"publish : PUBLIC",
"publish : PROTECTED",
"publish_extend : opt_publish",
"publish_extend : EXTEND",
"opt_argdecls : OP argdecls CP",
"opt_argdecls : OP CP",
"argdecls : argdecl COMMA argdecls",
"argdecls : argdecl opt_dotdotdot",
"argdecl : type NAME",
"argdecl : type",
"args : OP opt_argdefines CP",
"opt_argdefines : ignorenl argdefines",
"opt_argdefines : ignorenl",
"argdefines : argdefine COMMA argdefines",
"argdefines : argdefine opt_dotdotdot",
"argdefine : opt_type NAME",
"argdefine : type",
"opt_dotdotdot : DOTDOTDOT",
"opt_dotdotdot :",
"opt_expr : expr",
"opt_expr :",
"expr : comma_expr",
"expr : decl initnames",
"comma_expr : simpleexpr",
"comma_expr : comma_expr COMMA simpleexpr",
"opt_exprs : exprs",
"opt_exprs :",
"exprs : simpleexpr COMMA exprs",
"exprs : simpleexpr",
"opt_actuals : actuals",
"opt_actuals :",
"actuals : simpleexpr COMMA actuals",
"actuals : simpleexpr opt_dotdotdot",
"func_right : attendnl ASSIGN simpleexpr",
"$$3 :",
"func_right : $$3 block",
"simpleexpr : simpleexpr assignop simpleexpr",
"simpleexpr : opt_type FUNC namespace_start args doc_string func_right namespace_end",
"simpleexpr : MOD integer",
"simpleexpr : TIMES simpleexpr",
"simpleexpr : STARSTAR simpleexpr",
"simpleexpr : LAND simpleexpr",
"simpleexpr : AND simpleexpr",
"simpleexpr : MINUS simpleexpr",
"simpleexpr : LNOT simpleexpr",
"simpleexpr : BANG simpleexpr",
"simpleexpr : simpleexpr BANG",
"simpleexpr : INC simpleexpr",
"simpleexpr : simpleexpr INC",
"simpleexpr : DEC simpleexpr",
"simpleexpr : simpleexpr DEC",
"simpleexpr : FORK simpleexpr",
"simpleexpr : simpleexpr PLUS simpleexpr",
"simpleexpr : simpleexpr MINUS simpleexpr",
"simpleexpr : simpleexpr TIMES simpleexpr",
"simpleexpr : simpleexpr DIVIDE simpleexpr",
"simpleexpr : simpleexpr DIV simpleexpr",
"simpleexpr : simpleexpr MOD simpleexpr",
"simpleexpr : simpleexpr STARSTAR simpleexpr",
"simpleexpr : simpleexpr POW2",
"simpleexpr : simpleexpr POW3",
"simpleexpr : simpleexpr SHIFTL simpleexpr",
"simpleexpr : simpleexpr SHIFTR simpleexpr",
"simpleexpr : simpleexpr QUEST simpleexpr COLON simpleexpr",
"simpleexpr : simpleexpr LXOR simpleexpr",
"simpleexpr : simpleexpr LAND simpleexpr",
"simpleexpr : simpleexpr LOR simpleexpr",
"simpleexpr : simpleexpr AND simpleexpr",
"simpleexpr : simpleexpr OR simpleexpr",
"simpleexpr : simpleexpr EQ simpleexpr",
"simpleexpr : simpleexpr NE simpleexpr",
"simpleexpr : simpleexpr LT simpleexpr",
"simpleexpr : simpleexpr GT simpleexpr",
"simpleexpr : simpleexpr LE simpleexpr",
"simpleexpr : simpleexpr GE simpleexpr",
"simpleexpr : fullname",
"simpleexpr : TEN_NUM",
"simpleexpr : OCTAL_NUM",
"simpleexpr : OCTAL0_NUM",
"simpleexpr : BINARY_NUM",
"simpleexpr : HEX_NUM",
"simpleexpr : TEN_FLOAT",
"simpleexpr : OCTAL_FLOAT",
"simpleexpr : OCTAL0_FLOAT",
"simpleexpr : BINARY_FLOAT",
"simpleexpr : HEX_FLOAT",
"simpleexpr : CHAR_CONST",
"simpleexpr : STRING_CONST",
"simpleexpr : VOIDVAL",
"simpleexpr : BOOLVAL",
"simpleexpr : OS CS",
"simpleexpr : OP type CP namespace_start init namespace_end",
"simpleexpr : OP OS stars CS CP namespace_start arrayinit namespace_end",
"simpleexpr : OP OS dims CS CP namespace_start opt_arrayinit namespace_end",
"simpleexpr : OP OS type CS CP namespace_start opt_hashinit namespace_end",
"simpleexpr : type DOT NAME",
"simpleexpr : OP type DOT NAME CP simpleexpr",
"simpleexpr : DOLLAR opt_integer",
"simpleexpr : DOT",
"simpleexpr : OP expr CP",
"simpleexpr : OP block CP",
"simpleexpr : simpleexpr STAROS dims CS",
"simpleexpr : simpleexpr OS dims CS",
"simpleexpr : simpleexpr OP opt_actuals CP",
"simpleexpr : simpleexpr DOT NAME",
"simpleexpr : simpleexpr ARROW NAME",
"opt_integer : integer",
"opt_integer :",
"assignop : ASSIGNPLUS",
"assignop : ASSIGNMINUS",
"assignop : ASSIGNTIMES",
"assignop : ASSIGNDIVIDE",
"assignop : ASSIGNDIV",
"assignop : ASSIGNMOD",
"assignop : ASSIGNPOW",
"assignop : ASSIGNSHIFTL",
"assignop : ASSIGNSHIFTR",
"assignop : ASSIGNLXOR",
"assignop : ASSIGNLAND",
"assignop : ASSIGNLOR",
"assignop : ASSIGNOR",
"assignop : ASSIGNAND",
"assignop : ASSIGN",
"integer : TEN_NUM",
"integer : OCTAL_NUM",
"integer : OCTAL0_NUM",
"integer : BINARY_NUM",
"integer : HEX_NUM",
"opt_arrayinit : arrayinit",
"opt_arrayinit : OC CC",
"opt_arrayinit :",
"arrayinit : OC arrayelts opt_comma opt_dotdotdot CC",
"arrayinit : OC OS namespace_start compnames comparray CS comprehension namespace_end CC",
"comprehension : ASSIGN arrayelt",
"comprehension : block",
"compnames : compname COMMA compnames",
"compnames : compname",
"compname : NAME",
"comparray :",
"arrayelts : arrayelts COMMA arrayelt",
"arrayelts : arrayelt",
"arrayelt : simpleexpr",
"arrayelt : init",
"opt_hashinit : hashinit",
"opt_hashinit : OC CC",
"opt_hashinit :",
"hashinit : OC hashelts opt_comma CC",
"hashelts : hashelts COMMA hashelt",
"hashelts : hashelt",
"hashelt : simpleexpr DARROW hashvalue",
"hashelt : DARROW hashvalue",
"hashvalue : simpleexpr",
"hashvalue : init",
"structinit : OC structelts opt_comma CC",
"structelts : structelts COMMA structelt",
"structelts : structelt",
"structelt : NAME ASSIGN simpleexpr",
"structelt : NAME ASSIGN init",
"init : arrayinit",
"init : structinit",
"init : hashinit",
"init : OC CC",
};
#endif
#if YYDEBUG
#include <stdio.h>
#endif
/* define the initial stack-sizes */
#ifdef YYSTACKSIZE
#undef YYMAXDEPTH
#define YYMAXDEPTH YYSTACKSIZE
#else
#ifdef YYMAXDEPTH
#define YYSTACKSIZE YYMAXDEPTH
#else
#define YYSTACKSIZE 500
#define YYMAXDEPTH 500
#endif
#endif
#define YYINITSTACKSIZE 500
int yydebug;
int yynerrs;
int yyerrflag;
int yychar;
short *yyssp;
YYSTYPE *yyvsp;
YYSTYPE yyval;
YYSTYPE yylval;
/* variables for the parser stack */
static short *yyss;
static short *yysslim;
static YYSTYPE *yyvs;
static int yystacksize;
#line 1606 "gram.y"
static void
DeclListMark (void *object)
{
DeclListPtr dl = object;
MemReference (dl->next);
MemReference (dl->init);
}
DataType DeclListType = { DeclListMark, 0, "DeclListType" };
DeclListPtr
NewDeclList (Atom name, ExprPtr init, DeclListPtr next)
{
ENTER ();
DeclListPtr dl;
dl = ALLOCATE (&DeclListType, sizeof (DeclList));
dl->next = next;
dl->name = name;
dl->symbol = 0;
dl->init = init;
RETURN (dl);
}
static void
MemListMark (void *object)
{
MemListPtr ml = object;
MemReference (ml->next);
MemReference (ml->type);
MemReference (ml->atoms);
}
DataType MemListType = { MemListMark, 0, "MemListType" };
MemListPtr
NewMemList (AtomListPtr atoms, Type *type, MemListPtr next)
{
ENTER ();
MemListPtr ml;
ml = ALLOCATE (&MemListType, sizeof (MemList));
ml->next = next;
ml->type = type;
ml->atoms = atoms;
RETURN (ml);
}
extern NamespacePtr CurrentNamespace;
FramePtr CurrentFrame;
Value
lookupVar (char *ns, char *n)
{
ENTER ();
Value v;
SymbolPtr symbol;
NamespacePtr namespace;
Bool search;
search = True;
namespace = CurrentNamespace;
if (ns)
{
symbol = NamespaceFindName (CurrentNamespace, AtomId (ns), True);
if (symbol && symbol->symbol.class == class_namespace)
namespace = symbol->namespace.namespace;
else
namespace = 0;
}
if (namespace)
symbol = NamespaceFindName (namespace, AtomId (n), search);
else
symbol = 0;
if (symbol && symbol->symbol.class == class_global)
v = BoxValue (symbol->global.value, 0);
else
v = Void;
RETURN (v);
}
void
setVar (NamespacePtr namespace, char *n, Value v, Type *type)
{
ENTER ();
Atom atom;
SymbolPtr symbol;
atom = AtomId (n);
symbol = NamespaceFindName (namespace, atom, True);
if (!symbol)
symbol = NamespaceAddName (namespace,
NewSymbolGlobal (atom, type),
publish_private);
if (symbol->symbol.class == class_global)
BoxValueSet (symbol->global.value, 0, v);
EXIT ();
}
void
GetNamespace (NamespacePtr *scope, FramePtr *fp, CodePtr *cp)
{
*scope = CurrentNamespace;
*fp = CurrentFrame;
if (CurrentFrame)
*cp = CurrentFrame->function->func.code;
else
*cp = 0;
}
ExprPtr
BuildName (char *ns, char *n)
{
ENTER ();
SymbolPtr symbol, ns_symbol = 0;
Atom atom, ns_atom = 0;
Bool search = True;
NamespacePtr namespace = CurrentNamespace;
ExprPtr e;
Bool ns_privateFound = False;
Bool privateFound = False;
if (ns)
{
ns_atom = AtomId (ns);
ns_symbol = NamespaceFindName (namespace, ns_atom, search);
if (ns_symbol && ns_symbol->symbol.class == class_namespace)
namespace = ns_symbol->namespace.namespace;
else
{
if (!ns_symbol)
ns_privateFound = NamespaceIsNamePrivate (namespace, ns_atom, search);
namespace = 0;
}
search = False;
}
atom = AtomId (n);
if (namespace)
{
symbol = NamespaceFindName (namespace, atom, search);
if (!symbol)
privateFound = NamespaceIsNamePrivate (namespace, atom, search);
}
else
symbol = 0;
e = NewExprAtom (atom, symbol, privateFound);
if (ns_atom)
e = NewExprTree (COLONCOLON, NewExprAtom (ns_atom, ns_symbol, ns_privateFound), e);
RETURN (e);
}
static Value
AtomString (Atom id)
{
ENTER ();
RETURN (NewStrString (AtomName (id)));
}
ExprPtr
BuildRawname (ExprPtr colonnames, Atom name)
{
ENTER ();
int len;
Value array;
ExprPtr e;
len = 1;
for (e = colonnames; e; e = e->tree.left)
len++;
array = NewArray (False, False, typePrim[rep_string], 1, &len);
len--;
ArrayValueSet (&array->array, len, AtomString (name));
e = colonnames;
while (--len >= 0)
{
ArrayValueSet (&array->array, len, AtomString (e->tree.right->atom.atom));
e = e->tree.left;
}
e = NewExprConst (POLY_CONST, array);
RETURN (e);
}
ExprPtr
BuildFullname (ExprPtr left, Atom atom)
{
ENTER ();
NamespacePtr namespace;
SymbolPtr symbol;
Bool search;
ExprPtr nameExpr;
Bool privateFound = False;
if (left)
{
if (left->base.tag == COLONCOLON)
symbol = left->tree.right->atom.symbol;
else
symbol = left->atom.symbol;
if (symbol && symbol->symbol.class == class_namespace)
namespace = symbol->namespace.namespace;
else
namespace = 0;
search = False;
}
else
{
namespace = CurrentNamespace;
search = True;
}
if (namespace)
{
symbol = NamespaceFindName (namespace, atom, search);
if (!symbol)
privateFound = NamespaceIsNamePrivate (namespace, atom, search);
}
else
symbol = 0;
nameExpr = NewExprAtom (atom, symbol, privateFound);
if (left)
nameExpr = NewExprTree (COLONCOLON, left, nameExpr);
RETURN (nameExpr);
}
ExprPtr
BuildCall (char *scope, char *name, int nargs, ...)
{
ENTER ();
va_list alist;
ExprPtr args, *prev;
ExprPtr f;
ExprPtr e;
va_start (alist, nargs);
prev = &args;
args = 0;
while (nargs--)
{
*prev = NewExprTree (COMMA, va_arg (alist, ExprPtr), 0);
prev = &(*prev)->tree.right;
}
va_end (alist);
f = BuildName (scope, name);
e = NewExprTree (OP, f, args);
#ifdef DEBUG
printExpr (stdout, e, -1, 0);
printf ("\n");
#endif
RETURN (e);
}
/*
* Walk for() loop arguments and normalize the list
*/
static Expr *
ParseCanonFor (Expr *expr)
{
if (!expr || !expr->tree.right) {
ParseError ("Too few exprs in for()\n");
return 0;
}
if (!expr->tree.right->tree.right) {
/* 2-argument for() */
expr = NewExprTree(FOR, 0, expr);
}
if (expr->tree.right->tree.right->tree.right) {
ParseError ("Too many exprs in for()\n");
return 0;
}
return expr;
}
/*
* Walk a type structure and resolve any type names
*/
static CanonTypeResult
ParseCanonType (TypePtr type, Bool forwardAllowed)
{
ArgType *arg;
int n;
CanonTypeResult ret = CanonTypeDefined, t;
Bool anyResolved;
if (!type)
{
ParseError ("Type missing inside compiler");
return False;
}
switch (type->base.tag) {
case type_prim:
break;
case type_name:
if (!TypeNameType(type))
{
if (!type->name.name)
{
ExprPtr e;
e = type->name.expr;
if (e->base.tag == COLONCOLON)
e = e->tree.right;
type->name.name = e->atom.symbol;
if (!type->name.name)
{
ParseError ("No typedef \"%A\" in namespace",
e->atom.atom);
ret = CanonTypeUndefined;
break;
}
}
if (type->name.name->symbol.class != class_typedef)
{
ParseError ("Symbol \"%A\" not a typedef",
type->name.name->symbol.name);
ret = CanonTypeUndefined;
}
else if (!TypeNameType(type))
{
if (!forwardAllowed)
ParseError ("Typedef \"%A\" not defined yet",
type->name.name->symbol.name);
ret = CanonTypeForward;
}
else
{
ret = ParseCanonType (TypeNameType(type), forwardAllowed);
}
}
break;
case type_ref:
ret = ParseCanonType (type->ref.ref, True);
if (ret == CanonTypeForward)
ret = CanonTypeDefined;
break;
case type_func:
if (type->func.ret)
ret = ParseCanonType (type->func.ret, forwardAllowed);
for (arg = type->func.args; arg; arg = arg->next)
{
t = ParseCanonType (arg->type, forwardAllowed);
if (t < ret)
ret = t;
}
break;
case type_array:
ret = ParseCanonType (type->array.type, forwardAllowed);
break;
case type_hash:
ret = ParseCanonType (type->hash.type, forwardAllowed);
t = ParseCanonType (type->hash.keyType, forwardAllowed);
if (t < ret)
ret = t;
break;
case type_struct:
for (n = 0; n < type->structs.structs->nelements; n++)
{
StructType *st = type->structs.structs;
t = ParseCanonType (BoxTypesElements(st->types)[n], forwardAllowed);
if (t < ret)
ret = t;
}
break;
case type_union:
anyResolved = False;
for (n = 0; n < type->structs.structs->nelements; n++)
{
StructType *st = type->structs.structs;
t = ParseCanonType (BoxTypesElements(st->types)[n], True);
if (t < ret)
ret = t;
if (t == CanonTypeDefined)
anyResolved = True;
}
if (ret == CanonTypeForward)
{
if (anyResolved)
ret = CanonTypeDefined;
else if (!forwardAllowed)
ParseError ("No member of '%T' defined yet", type);
}
break;
case type_types:
break;
}
return ret;
}
static SymbolPtr
ParseNewSymbol (Publish publish, Class class, Type *type, Atom name)
{
ENTER ();
SymbolPtr s = 0;
if (class == class_undef)
class = funcDepth ? class_auto : class_global;
if (class == class_namespace ||
(class == class_typedef && type == 0) ||
ParseCanonType (type, False) == CanonTypeDefined)
{
switch (class) {
case class_const:
s = NewSymbolConst (name, type);
break;
case class_global:
s = NewSymbolGlobal (name, type);
break;
case class_static:
s = NewSymbolStatic (name, type);
break;
case class_arg:
s = NewSymbolArg (name, type);
break;
case class_auto:
s = NewSymbolAuto (name, type);
break;
case class_exception:
s = NewSymbolException (name, type, Void);
break;
case class_typedef:
/*
* Special case for typedefs --
* allow forward declaration of untyped
* typedef names, then hook the
* new type to the old name
*/
if (type)
{
s = NamespaceFindName (CurrentNamespace, name, False);
if (s && s->symbol.class == class_typedef && !s->symbol.type)
{
s->symbol.type = type;
RETURN (s);
}
}
s = NewSymbolType (name, type);
break;
case class_namespace:
s = NewSymbolNamespace (name, NewNamespace (CurrentNamespace));
break;
case class_undef:
break;
}
if (s)
NamespaceAddName (CurrentNamespace, s, publish);
}
RETURN (s);
}
int
yywrap (void)
{
if (LexInteractive())
printf ("\n");
if (CurrentFrame)
{
do_Debug_done ();
return 0;
}
return 1;
}
extern char *yytext;
void
ParseError (char *fmt, ...)
{
va_list args;
if (LexFileName ())
FilePrintf (FileStderr, "%A:%d: ",
LexFileName (), LexFileLine ());
va_start (args, fmt);
FileVPrintf (FileStderr, fmt, args);
FilePrintf (FileStderr, "\n");
va_end (args);
}
void
yyerror (char *msg)
{
ignorenl = 0;
ParseError ("%s before %S", msg, yytext);
}
#line 2940 "gram.c"
/* allocate initial stack or double stack size, up to YYMAXDEPTH */
static int yygrowstack(void)
{
int newsize, i;
short *newss;
YYSTYPE *newvs;
if ((newsize = yystacksize) == 0)
newsize = YYINITSTACKSIZE;
else if (newsize >= YYMAXDEPTH)
return -1;
else if ((newsize *= 2) > YYMAXDEPTH)
newsize = YYMAXDEPTH;
i = yyssp - yyss;
newss = (yyss != 0)
? (short *)realloc(yyss, newsize * sizeof(*newss))
: (short *)malloc(newsize * sizeof(*newss));
if (newss == 0)
return -1;
yyss = newss;
yyssp = newss + i;
newvs = (yyvs != 0)
? (YYSTYPE *)realloc(yyvs, newsize * sizeof(*newvs))
: (YYSTYPE *)malloc(newsize * sizeof(*newvs));
if (newvs == 0)
return -1;
yyvs = newvs;
yyvsp = newvs + i;
yystacksize = newsize;
yysslim = yyss + newsize - 1;
return 0;
}
#define YYABORT goto yyabort
#define YYREJECT goto yyabort
#define YYACCEPT goto yyaccept
#define YYERROR goto yyerrlab
int
yyparse(void)
{
register int yym, yyn, yystate;
#if YYDEBUG
register const char *yys;
if ((yys = getenv("YYDEBUG")) != 0)
{
yyn = *yys;
if (yyn >= '0' && yyn <= '9')
yydebug = yyn - '0';
}
#endif
yynerrs = 0;
yyerrflag = 0;
yychar = YYEMPTY;
if (yyss == NULL && yygrowstack()) goto yyoverflow;
yyssp = yyss;
yyvsp = yyvs;
*yyssp = yystate = 0;
yyloop:
if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
if (yychar < 0)
{
if ((yychar = yylex()) < 0) yychar = 0;
#if YYDEBUG
if (yydebug)
{
yys = 0;
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
printf("%sdebug: state %d, reading %d (%s)\n",
YYPREFIX, yystate, yychar, yys);
}
#endif
}
if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
{
#if YYDEBUG
if (yydebug)
printf("%sdebug: state %d, shifting to state %d\n",
YYPREFIX, yystate, yytable[yyn]);
#endif
if (yyssp >= yysslim && yygrowstack())
{
goto yyoverflow;
}
*++yyssp = yystate = yytable[yyn];
*++yyvsp = yylval;
yychar = YYEMPTY;
if (yyerrflag > 0) --yyerrflag;
goto yyloop;
}
if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
{
yyn = yytable[yyn];
goto yyreduce;
}
if (yyerrflag) goto yyinrecovery;
yyerror("syntax error");
#ifdef lint
goto yyerrlab;
#endif
yyerrlab:
++yynerrs;
yyinrecovery:
if (yyerrflag < 3)
{
yyerrflag = 3;
for (;;)
{
if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
{
#if YYDEBUG
if (yydebug)
printf("%sdebug: state %d, error recovery shifting\
to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
#endif
if (yyssp >= yysslim && yygrowstack())
{
goto yyoverflow;
}
*++yyssp = yystate = yytable[yyn];
*++yyvsp = yylval;
goto yyloop;
}
else
{
#if YYDEBUG
if (yydebug)
printf("%sdebug: error recovery discarding state %d\n",
YYPREFIX, *yyssp);
#endif
if (yyssp <= yyss) goto yyabort;
--yyssp;
--yyvsp;
}
}
}
else
{
if (yychar == 0) goto yyabort;
#if YYDEBUG
if (yydebug)
{
yys = 0;
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
YYPREFIX, yystate, yychar, yys);
}
#endif
yychar = YYEMPTY;
goto yyloop;
}
yyreduce:
#if YYDEBUG
if (yydebug)
printf("%sdebug: state %d, reducing by rule %d (%s)\n",
YYPREFIX, yystate, yyn, yyrule[yyn]);
#endif
yym = yylen[yyn];
yyval = yyvsp[1-yym];
switch (yyn)
{
case 5:
#line 197 "gram.y"
{ yyerrok; }
break;
case 6:
#line 199 "gram.y"
{ yyerrok; }
break;
case 7:
#line 201 "gram.y"
{ yyerrok; }
break;
case 8:
#line 209 "gram.y"
{ ignorenl++; }
break;
case 9:
#line 212 "gram.y"
{ if (ignorenl > 0) ignorenl--; }
break;
case 10:
#line 215 "gram.y"
{
ignorenl = 0;
LexNamespace = 0;
CurrentNamespace = TopNamespace;
funcDepth = 0;
notCommand = 0;
}
break;
case 11:
#line 232 "gram.y"
{ notCommand = 1; }
break;
case 18:
#line 247 "gram.y"
{
ENTER ();
ExprPtr e;
Value t;
NamespacePtr s;
FramePtr f;
CodePtr c;
e = BuildCall ("Command", "display",
1,NewExprTree (EXPR, yyvsp[-2].expr, 0));
GetNamespace (&s, &f, &c);
t = NewThread (f, CompileExpr (e, c));
ThreadsRun (t, 0);
EXIT ();
}
break;
case 19:
#line 263 "gram.y"
{
ENTER ();
ExprPtr e;
Value t;
NamespacePtr s;
FramePtr f;
CodePtr c;
e = BuildCall("Command", "display_base",
2, NewExprTree (EXPR, yyvsp[-4].expr, 0), yyvsp[-2].expr);
GetNamespace (&s, &f, &c);
t = NewThread (f, CompileExpr (e, c));
ThreadsRun (t, 0);
EXIT ();
}
break;
case 20:
#line 279 "gram.y"
{
ENTER ();
NamespacePtr s;
FramePtr f;
CodePtr c;
Value t;
GetNamespace (&s, &f, &c);
t = NewThread (f, CompileStat (yyvsp[-2].expr, c));
ThreadsRun (t, 0);
EXIT ();
}
break;
case 21:
#line 292 "gram.y"
{
ENTER();
ExprPtr e;
Value t;
NamespacePtr s;
FramePtr f;
CodePtr c;
CommandPtr cmd;
cmd = CommandFind (CurrentCommands, yyvsp[-4].atom);
if (!cmd)
ParseError ("Undefined command \"%s\"", AtomName (yyvsp[-4].atom));
else
{
e = NewExprTree (OP,
NewExprConst (POLY_CONST, cmd->func),
yyvsp[-3].expr);
GetNamespace (&s, &f, &c);
t = NewThread (f, CompileExpr (e, c));
ThreadsRun (t, 0);
}
EXIT ();
}
break;
case 22:
#line 316 "gram.y"
{
ENTER ();
ExprPtr e;
Value t;
NamespacePtr s;
FramePtr f;
CodePtr c;
CommandPtr cmd;
cmd = CommandFind (CurrentCommands, yyvsp[-4].atom);
if (!cmd)
ParseError ("Undefined command \"%s\"", AtomName (yyvsp[-4].atom));
else
{
e = NewExprTree (OP,
NewExprConst (POLY_CONST, cmd->func),
yyvsp[-3].expr);
GetNamespace (&s, &f, &c);
t = NewThread (f, CompileExpr (e, c));
ThreadsRun (t, 0);
}
EXIT ();
}
break;
case 26:
#line 345 "gram.y"
{ yyval.expr = 0; }
break;
case 27:
#line 348 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 28:
#line 350 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[0].expr, 0); }
break;
case 29:
#line 353 "gram.y"
{ yyval.expr = BuildRawname (yyvsp[-1].expr, yyvsp[0].atom); }
break;
case 33:
#line 360 "gram.y"
{ yyval.expr = NewExprTree (COLONCOLON, yyvsp[-2].expr, NewExprAtom (yyvsp[-1].atom, 0, False)); }
break;
case 34:
#line 362 "gram.y"
{ yyval.expr = 0; }
break;
case 35:
#line 365 "gram.y"
{
yyval.expr = BuildFullname (yyvsp[-1].expr, yyvsp[0].atom);
LexNamespace = 0;
}
break;
case 36:
#line 370 "gram.y"
{
yyval.expr = BuildFullname (0, yyvsp[0].atom);
LexNamespace = 0;
}
break;
case 37:
#line 376 "gram.y"
{
yyval.expr = BuildFullname (yyvsp[-1].expr, yyvsp[0].atom);
LexNamespace = 0;
}
break;
case 38:
#line 381 "gram.y"
{
yyval.expr = BuildFullname (0, yyvsp[0].atom);
LexNamespace = 0;
}
break;
case 39:
#line 387 "gram.y"
{
yyval.expr = yyvsp[0].expr;
}
break;
case 40:
#line 391 "gram.y"
{
yyval.expr = NewExprTree (COMMA, yyvsp[-2].expr, yyvsp[0].expr);
}
break;
case 41:
#line 396 "gram.y"
{
ExprPtr e;
SymbolPtr symbol;
e = BuildFullname (yyvsp[-2].expr, yyvsp[-1].atom);
if (e->base.tag == COLONCOLON)
symbol = e->tree.right->atom.symbol;
else
symbol = e->atom.symbol;
if (!symbol)
{
ParseError ("non-existant namespace \"%A\"", yyvsp[-1].atom);
YYERROR;
}
else if (symbol->symbol.class != class_namespace)
{
ParseError ("%A is not a namespace", yyvsp[-1].atom);
YYERROR;
}
LexNamespace = symbol->namespace.namespace;
yyval.expr = e;
}
break;
case 42:
#line 419 "gram.y"
{
ExprPtr e;
SymbolPtr symbol;
e = BuildFullname (0, yyvsp[-1].atom);
if (e->base.tag == COLONCOLON)
symbol = e->tree.right->atom.symbol;
else
symbol = e->atom.symbol;
if (!symbol)
{
ParseError ("non-existant namespace \"%A\"", yyvsp[-1].atom);
YYERROR;
}
else if (symbol->symbol.class != class_namespace)
{
ParseError ("%A is not a namespace", yyvsp[-1].atom);
YYERROR;
}
LexNamespace = symbol->namespace.namespace;
yyval.expr = e;
}
break;
case 45:
#line 449 "gram.y"
{ CurrentNamespace = NewNamespace (CurrentNamespace); }
break;
case 46:
#line 452 "gram.y"
{ CurrentNamespace = CurrentNamespace->previous; }
break;
case 47:
#line 455 "gram.y"
{ yyval.expr = yyvsp[-1].expr; }
break;
case 50:
#line 462 "gram.y"
{ yyval.expr = NewExprTree(OC, yyvsp[-1].expr, yyvsp[0].expr); }
break;
case 51:
#line 464 "gram.y"
{ yyval.expr = NewExprTree(OC, 0, 0); }
break;
case 52:
#line 467 "gram.y"
{ yyval.expr = NewExprTree(IF, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 53:
#line 469 "gram.y"
{ yyval.expr = NewExprTree(ELSE, yyvsp[-4].expr, NewExprTree(ELSE, yyvsp[-2].expr, yyvsp[0].expr)); }
break;
case 56:
#line 476 "gram.y"
{ yyval.expr = yyvsp[-2].expr; }
break;
case 57:
#line 478 "gram.y"
{ yyval.expr = NewExprTree(WHILE, yyvsp[-4].expr, yyvsp[-2].expr); }
break;
case 58:
#line 480 "gram.y"
{ yyval.expr = NewExprTree(DO, yyvsp[-6].expr, yyvsp[-3].expr); }
break;
case 59:
#line 482 "gram.y"
{ Expr *expr = ParseCanonFor(yyvsp[-4].expr);
if (!expr)
YYERROR;
yyval.expr = NewExprTree(FOR, expr, yyvsp[-2].expr); }
break;
case 60:
#line 487 "gram.y"
{ yyval.expr = NewExprTree (SWITCH, yyvsp[-4].expr, yyvsp[-2].expr); }
break;
case 61:
#line 489 "gram.y"
{ yyval.expr = NewExprTree (UNION, yyvsp[-4].expr, yyvsp[-2].expr); }
break;
case 62:
#line 491 "gram.y"
{ yyval.expr = NewExprTree(BREAK, (Expr *) 0, (Expr *) 0); }
break;
case 63:
#line 493 "gram.y"
{ yyval.expr = NewExprTree(CONTINUE, (Expr *) 0, (Expr *) 0); }
break;
case 64:
#line 495 "gram.y"
{ yyval.expr = NewExprTree (RETURNTOK, (Expr *) 0, yyvsp[-1].expr); }
break;
case 65:
#line 497 "gram.y"
{ yyval.expr = NewExprTree(EXPR, yyvsp[-1].expr, (Expr *) 0); }
break;
case 66:
#line 499 "gram.y"
{ yyval.expr = NewExprTree(SEMI, (Expr *) 0, (Expr *) 0); }
break;
case 67:
#line 501 "gram.y"
{
DeclList *decl = yyvsp[-3].funcDecl.decl;
SymbolPtr symbol = decl->symbol;
Class class = yyvsp[-3].funcDecl.type.class;
Publish publish = yyvsp[-3].funcDecl.type.publish;
TypePtr type = yyvsp[-3].funcDecl.type.type;
TypePtr ret = type->func.ret;
ArgType *argType = type->func.args;
if (symbol)
{
if (yyvsp[-1].expr)
{
symbol->symbol.forward = False;
ParseCanonType (ret, False);
decl->init = NewExprCode (NewFuncCode (ret,
argType,
yyvsp[-1].expr,
yyvsp[-2].value),
NewExprAtom (symbol->symbol.name, symbol, False));
}
else
symbol->symbol.forward = True;
}
yyval.expr = NewExprDecl (FUNC, decl, class, type, publish);
}
break;
case 68:
#line 528 "gram.y"
{
DeclListPtr decl;
decl = NewDeclList (yyvsp[-6].atom, 0, 0);
decl->symbol = ParseNewSymbol (yyvsp[-9].publish,
class_exception,
typePoly, yyvsp[-6].atom);
decl->symbol->exception.doc = yyvsp[-2].value;
yyval.expr = NewExprDecl (EXCEPTION,
decl,
class_exception,
NewTypeFunc (typePoly, yyvsp[-4].argType),
yyvsp[-9].publish);
}
break;
case 69:
#line 543 "gram.y"
{ yyval.expr = NewExprTree (RAISE, yyvsp[-4].expr, yyvsp[-2].expr); }
break;
case 70:
#line 545 "gram.y"
{
DeclListPtr decl;
for (decl = yyvsp[-2].declList; decl; decl = decl->next)
decl->symbol = ParseNewSymbol (yyvsp[-5].publish, class_typedef,
0, decl->name);
yyval.expr = NewExprTree (TYPEDEF, NewExprDecl (TYPEDEF, yyvsp[-2].declList, class_typedef, 0, yyvsp[-5].publish), 0);
}
break;
case 71:
#line 554 "gram.y"
{
DeclListPtr decl;
for (decl = yyvsp[-2].declList; decl; decl = decl->next)
decl->symbol = ParseNewSymbol (yyvsp[-6].publish, class_typedef,
yyvsp[-3].type, decl->name);
yyval.expr = NewExprTree (TYPEDEF, NewExprDecl (TYPEDEF, yyvsp[-2].declList, class_typedef, yyvsp[-3].type, yyvsp[-6].publish), 0);
}
break;
case 72:
#line 563 "gram.y"
{
SymbolPtr symbol;
Publish publish = yyvsp[-3].publish;
/*
* this is a hack - save the current namespace
* on the parser stack to be restored after
* the block is compiled.
*/
yyvsp[-2].namespace = CurrentNamespace;
if (publish == publish_extend)
{
symbol = NamespaceFindName (CurrentNamespace, yyvsp[0].atom, True);
if (!symbol)
{
ParseError ("non-existant namespace %A", yyvsp[0].atom);
YYERROR;
}
else if (symbol->symbol.class != class_namespace)
{
ParseError ("%A is not a namespace", yyvsp[0].atom);
YYERROR;
}
else
CurrentNamespace = symbol->namespace.namespace;
}
else
{
symbol = ParseNewSymbol (yyvsp[-3].publish, class_namespace,
0, yyvsp[0].atom);
CurrentNamespace = NewNamespace (CurrentNamespace);
symbol->namespace.namespace = CurrentNamespace;
}
/*
* Make all of the symbols visible while compiling within
* the namespace
*/
if (CurrentNamespace != yyvsp[-2].namespace)
CurrentNamespace->publish = publish_public;
}
break;
case 73:
#line 604 "gram.y"
{
/*
* close the namespace to non-public lookups
*/
if (CurrentNamespace != yyvsp[-7].namespace)
CurrentNamespace->publish = publish_private;
/*
* Restore to the namespace saved on
* the parser stack
*/
CurrentNamespace = yyvsp[-7].namespace;
yyval.expr = NewExprTree (NAMESPACE, NewExprAtom (yyvsp[-5].atom, 0, False), yyvsp[-2].expr);
}
break;
case 74:
#line 618 "gram.y"
{
SymbolPtr symbol;
ExprPtr p, e, n;
p = yyvsp[-2].expr;
for (p = yyvsp[-2].expr; p; p = n)
{
if (p->base.tag == COMMA)
{
e = p->tree.left;
n = p->tree.right;
}
else
{
e = p;
n = 0;
}
if (e->base.tag == COLONCOLON)
e = e->tree.right;
symbol = e->atom.symbol;
if (!symbol)
{
ParseError ("non-existant namespace %A", e->atom.atom);
YYERROR;
}
else if (symbol->symbol.class != class_namespace)
{
ParseError ("%A is not a namespace", e->atom.atom);
YYERROR;
}
NamespaceImport (CurrentNamespace,
symbol->namespace.namespace, yyvsp[-5].publish);
}
yyval.expr = NewExprTree (IMPORT, yyvsp[-2].expr, NewExprDecl (IMPORT,
0,
class_undef,
0,
yyvsp[-5].publish));
}
break;
case 75:
#line 658 "gram.y"
{ yyval.expr = yyvsp[-1].expr; }
break;
case 76:
#line 660 "gram.y"
{ yyval.expr = NewExprTree (TWIXT,
NewExprTree (TWIXT, yyvsp[-6].expr, yyvsp[-4].expr),
NewExprTree (TWIXT, yyvsp[-2].expr, 0));
}
break;
case 77:
#line 666 "gram.y"
{ yyval.expr = NewExprTree(SEMI, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 78:
#line 668 "gram.y"
{ yyval.expr = NewExprTree(SEMI, yyvsp[0].expr, 0); }
break;
case 80:
#line 673 "gram.y"
{ yyval.expr = yyvsp[-1].expr; }
break;
case 81:
#line 676 "gram.y"
{ yyval.expr = NewExprTree (CATCH, yyvsp[0].expr, yyvsp[-1].expr); }
break;
case 82:
#line 680 "gram.y"
{ yyval.expr = NewExprTree (CATCH, yyvsp[-1].expr, yyvsp[0].expr); }
break;
case 83:
#line 682 "gram.y"
{ yyval.expr = 0; }
break;
case 84:
#line 685 "gram.y"
{ yyval.expr = NewExprCode (NewFuncCode (typePrim[rep_void],
yyvsp[-3].argType, yyvsp[-1].expr, yyvsp[-2].value),
yyvsp[-5].expr);
}
break;
case 86:
#line 692 "gram.y"
{ yyval.expr = 0; }
break;
case 87:
#line 694 "gram.y"
{ ++funcDepth; }
break;
case 88:
#line 694 "gram.y"
{ --funcDepth; yyval.expr = yyvsp[0].expr; }
break;
case 89:
#line 697 "gram.y"
{ yyval.expr = yyvsp[0].expr; }
break;
case 90:
#line 699 "gram.y"
{
yyval.expr = NewExprTree (OC,
NewExprTree (RETURNTOK, 0, yyvsp[-1].expr),
NewExprTree (OC, 0, 0));
}
break;
case 93:
#line 709 "gram.y"
{ seeComment = 1; }
break;
case 94:
#line 712 "gram.y"
{ seeComment = 0; yyval.value = yyvsp[0].value; }
break;
case 96:
#line 716 "gram.y"
{ yyval.value = Void; }
break;
case 97:
#line 719 "gram.y"
{ yyval.expr = yyvsp[-1].expr; }
break;
case 98:
#line 722 "gram.y"
{ yyval.expr = NewExprTree (CASE, yyvsp[-1].expr, yyvsp[0].expr); }
break;
case 99:
#line 724 "gram.y"
{ yyval.expr = 0; }
break;
case 100:
#line 727 "gram.y"
{ yyval.expr = NewExprTree (CASE, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 101:
#line 729 "gram.y"
{ yyval.expr = NewExprTree (CASE, 0, yyvsp[0].expr); }
break;
case 102:
#line 732 "gram.y"
{ yyval.expr = yyvsp[-1].expr; }
break;
case 103:
#line 735 "gram.y"
{ yyval.expr = NewExprTree (CASE, yyvsp[-1].expr, yyvsp[0].expr); }
break;
case 104:
#line 737 "gram.y"
{ yyval.expr = 0; }
break;
case 105:
#line 740 "gram.y"
{
SymbolPtr sym = yyvsp[-3].symbol;
Atom sym_atom = sym ? sym->symbol.name : 0;
ExprPtr name = 0;
if (sym)
name = NewExprAtom (sym_atom, sym, False);
yyval.expr = NewExprTree (CASE,
NewExprTree (CASE,
NewExprAtom (yyvsp[-4].atom, 0, False),
name),
yyvsp[-1].expr);
}
break;
case 106:
#line 755 "gram.y"
{ yyval.expr = NewExprTree (CASE, 0, yyvsp[0].expr); }
break;
case 107:
#line 758 "gram.y"
{
yyval.symbol = ParseNewSymbol (publish_private,
class_undef,
typePoly,
yyvsp[0].atom);
}
break;
case 108:
#line 765 "gram.y"
{ yyval.symbol = 0; }
break;
case 109:
#line 771 "gram.y"
{ yyval.atomList = NewAtomList (yyvsp[0].atomList, yyvsp[-2].atom); }
break;
case 110:
#line 773 "gram.y"
{ yyval.atomList = NewAtomList (0, yyvsp[0].atom); }
break;
case 111:
#line 776 "gram.y"
{ yyval.declList = NewDeclList (yyvsp[-2].atom, 0, yyvsp[0].declList); }
break;
case 112:
#line 778 "gram.y"
{ yyval.declList = NewDeclList (yyvsp[0].atom, 0, 0); }
break;
case 115:
#line 792 "gram.y"
{
if (yyvsp[-3].symbol)
{
yyval.declList = NewDeclList (yyvsp[-3].symbol->symbol.name, yyvsp[-2].expr, yyvsp[0].declList);
yyval.declList->symbol = yyvsp[-3].symbol;
}
else
yyval.declList = yyvsp[0].declList;
}
break;
case 116:
#line 802 "gram.y"
{
if (yyvsp[-1].symbol)
{
yyval.declList = NewDeclList (yyvsp[-1].symbol->symbol.name, yyvsp[0].expr, 0);
yyval.declList->symbol = yyvsp[-1].symbol;
}
else
yyvsp[-1].symbol = 0;
}
break;
case 117:
#line 813 "gram.y"
{
yyval.symbol = ParseNewSymbol (yyvsp[-1].fulltype.publish,
yyvsp[-1].fulltype.class,
yyvsp[-1].fulltype.type,
yyvsp[0].atom);
}
break;
case 118:
#line 825 "gram.y"
{ yyval.fulltype = yyvsp[-3].fulltype; }
break;
case 119:
#line 831 "gram.y"
{
NamespacePtr save = CurrentNamespace;
SymbolPtr symbol;
Type *type = NewTypeFunc (yyvsp[-3].funcDecl.type.type, yyvsp[-1].argType);
/*
* namespace_start pushed a new namespace, make sure
* this symbol is placed in the original namespace
*/
CurrentNamespace = save->previous;
symbol = NamespaceFindName (CurrentNamespace, yyvsp[-3].funcDecl.decl->name, True);
if (symbol && symbol->symbol.forward)
{
if (!TypeIsSupertype (symbol->symbol.type, type))
{
ParseError ("%A redefinition with different type",
yyvsp[-3].funcDecl.decl->name);
symbol = 0;
}
}
else
{
symbol = ParseNewSymbol (yyvsp[-3].funcDecl.type.publish,
yyvsp[-3].funcDecl.type.class,
type,
yyvsp[-3].funcDecl.decl->name);
}
CurrentNamespace = save;
yyval.funcDecl = yyvsp[-3].funcDecl;
yyval.funcDecl.decl->symbol = symbol;
yyval.funcDecl.type.type = type;
}
break;
case 120:
#line 864 "gram.y"
{ yyval.funcDecl.type = yyvsp[-2].fulltype; yyval.funcDecl.decl = NewDeclList (yyvsp[-1].atom, 0, 0); }
break;
case 121:
#line 866 "gram.y"
{ yyval.funcDecl.type = yyvsp[-3].fulltype; yyval.funcDecl.decl = NewDeclList (yyvsp[-1].atom, 0, 0); }
break;
case 122:
#line 868 "gram.y"
{
yyval.funcDecl.type.publish = publish_private;
yyval.funcDecl.type.class = class_undef;
yyval.funcDecl.type.type = typePoly;
yyval.funcDecl.decl = NewDeclList (yyvsp[-1].atom, 0, 0);
}
break;
case 123:
#line 876 "gram.y"
{ yyval.expr = yyvsp[0].expr; }
break;
case 124:
#line 878 "gram.y"
{ yyval.expr = yyvsp[0].expr; }
break;
case 125:
#line 880 "gram.y"
{ yyval.expr = 0; }
break;
case 126:
#line 886 "gram.y"
{ yyval.fulltype.publish = yyvsp[-3].publish; yyval.fulltype.class = yyvsp[-2].class; yyval.fulltype.type = yyvsp[-1].type; }
break;
case 127:
#line 888 "gram.y"
{ yyval.fulltype.publish = publish_private; yyval.fulltype.class = yyvsp[-2].class; yyval.fulltype.type = yyvsp[-1].type; }
break;
case 128:
#line 890 "gram.y"
{ yyval.fulltype.publish = publish_private; yyval.fulltype.class = class_undef; yyval.fulltype.type = yyvsp[-1].type; }
break;
case 129:
#line 896 "gram.y"
{ yyval.type = NewTypeFunc (yyvsp[0].type, yyvsp[-1].argType); }
break;
case 130:
#line 898 "gram.y"
{ yyval.type = NewTypeArray (yyvsp[0].type, yyvsp[-2].expr, False); }
break;
case 131:
#line 900 "gram.y"
{ yyval.type = NewTypeArray (yyvsp[0].type, yyvsp[-2].expr, True); }
break;
case 132:
#line 902 "gram.y"
{ yyval.type = NewTypeArray (yyvsp[0].type, yyvsp[-2].expr, False); }
break;
case 133:
#line 904 "gram.y"
{ yyval.type = NewTypeHash (yyvsp[0].type, yyvsp[-2].type); }
break;
case 134:
#line 906 "gram.y"
{ yyval.type = 0; }
break;
case 135:
#line 909 "gram.y"
{
Type *top = yyvsp[0].type;
Type *t, **bot = ⊤
/*
* Walk down the type chain to hang the
* base type off of the end. This
* makes int[]() be an array of functions
* rather than a function returning an array
*/
while ((t = *bot))
switch (t->base.tag) {
case type_array:
bot = &t->array.type;
break;
case type_hash:
bot = &t->hash.type;
break;
case type_func:
bot = &t->func.ret;
break;
default:
assert(0);
}
*bot = yyvsp[-1].type;
yyval.type = top;
}
break;
case 136:
#line 937 "gram.y"
{ yyval.type = NewTypeRef (yyvsp[0].type, True); }
break;
case 137:
#line 939 "gram.y"
{ yyval.type = NewTypeRef (NewTypeRef (yyvsp[0].type, True), True); }
break;
case 138:
#line 941 "gram.y"
{ yyval.type = NewTypeRef (NewTypeRef (yyvsp[0].type, False), False); }
break;
case 139:
#line 943 "gram.y"
{ yyval.type = NewTypeRef (yyvsp[0].type, False); }
break;
case 141:
#line 947 "gram.y"
{
AtomListPtr al;
StructType *st;
MemListPtr ml;
int nelements;
nelements = 0;
for (ml = yyvsp[-1].memList; ml; ml = ml->next)
{
for (al = ml->atoms; al; al = al->next)
nelements++;
}
st = NewStructType (nelements);
nelements = 0;
for (ml = yyvsp[-1].memList; ml; ml = ml->next)
{
for (al = ml->atoms; al; al = al->next)
{
AddBoxType (&st->types, ml->type);
StructTypeAtoms(st)[nelements] = al->atom;
nelements++;
}
}
yyval.type = NewTypeStruct (st);
}
break;
case 142:
#line 973 "gram.y"
{
AtomListPtr al;
StructType *st;
MemListPtr ml;
int nelements;
nelements = 0;
for (ml = yyvsp[-1].memList; ml; ml = ml->next)
{
for (al = ml->atoms; al; al = al->next)
nelements++;
}
st = NewStructType (nelements);
nelements = 0;
for (ml = yyvsp[-1].memList; ml; ml = ml->next)
{
for (al = ml->atoms; al; al = al->next)
{
AddBoxType (&st->types, ml->type);
StructTypeAtoms(st)[nelements] = al->atom;
nelements++;
}
}
yyval.type = NewTypeUnion (st, False);
}
break;
case 143:
#line 999 "gram.y"
{
AtomListPtr al;
StructType *st;
int nelements;
nelements = 0;
for (al = yyvsp[-1].atomList; al; al = al->next)
nelements++;
st = NewStructType (nelements);
nelements = 0;
for (al = yyvsp[-1].atomList; al; al = al->next)
{
AddBoxType (&st->types, typePrim[rep_void]);
StructTypeAtoms(st)[nelements] = al->atom;
nelements++;
}
yyval.type = NewTypeUnion (st, True);
}
break;
case 144:
#line 1020 "gram.y"
{ yyval.type = yyvsp[-1].type; }
break;
case 145:
#line 1022 "gram.y"
{ yyval.type = NewTypeName (yyvsp[0].expr, 0); }
break;
case 147:
#line 1026 "gram.y"
{ yyval.type = typePoly; }
break;
case 162:
#line 1044 "gram.y"
{ yyval.expr = 0; }
break;
case 163:
#line 1047 "gram.y"
{ yyval.expr = NewExprTree (COMMA, 0, yyvsp[-2].expr); }
break;
case 164:
#line 1049 "gram.y"
{ yyval.expr = NewExprTree (COMMA, 0, 0); }
break;
case 165:
#line 1052 "gram.y"
{ yyval.expr = NewExprTree (COMMA, 0, yyvsp[-2].expr); }
break;
case 166:
#line 1054 "gram.y"
{ yyval.expr = NewExprTree (COMMA, 0, 0); }
break;
case 167:
#line 1057 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 168:
#line 1059 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[0].expr, 0); }
break;
case 169:
#line 1065 "gram.y"
{ yyval.memList = NewMemList (yyvsp[-2].atomList, yyvsp[-3].type, yyvsp[0].memList); }
break;
case 170:
#line 1067 "gram.y"
{ yyval.memList = 0; }
break;
case 171:
#line 1070 "gram.y"
{ yyval.memList = NewMemList (yyvsp[-2].atomList, yyvsp[-3].type, yyvsp[0].memList); }
break;
case 172:
#line 1072 "gram.y"
{ yyval.memList = 0; }
break;
case 174:
#line 1079 "gram.y"
{ yyval.class = class_undef; }
break;
case 180:
#line 1088 "gram.y"
{ yyval.publish = publish_private; }
break;
case 185:
#line 1102 "gram.y"
{ yyval.argType = yyvsp[-1].argType; }
break;
case 186:
#line 1104 "gram.y"
{ yyval.argType = 0; }
break;
case 187:
#line 1107 "gram.y"
{ yyval.argType = NewArgType (yyvsp[-2].argDecl.type, False, yyvsp[-2].argDecl.name, 0, yyvsp[0].argType); }
break;
case 188:
#line 1109 "gram.y"
{ yyval.argType = NewArgType (yyvsp[-1].argDecl.type, yyvsp[0].bool, yyvsp[-1].argDecl.name, 0, 0); }
break;
case 189:
#line 1112 "gram.y"
{
ParseCanonType (yyvsp[-1].type, False);
yyval.argDecl.type = yyvsp[-1].type;
yyval.argDecl.name = yyvsp[0].atom;
}
break;
case 190:
#line 1118 "gram.y"
{
ParseCanonType (yyvsp[0].type, False);
yyval.argDecl.type = yyvsp[0].type;
yyval.argDecl.name = 0;
}
break;
case 191:
#line 1129 "gram.y"
{ yyval.argType = yyvsp[-1].argType; }
break;
case 192:
#line 1132 "gram.y"
{
ArgType *args;
Type *type;
for (args = yyvsp[0].argType; args; args = args->next)
{
type = args->type;
if (ParseCanonType (type, False) != CanonTypeDefined)
break;
if (args->varargs)
{
type = NewTypeArray (type,
NewExprTree (COMMA,
NewExprConst (TEN_NUM,
NewInt (0)),
0),
False);
}
args->symbol = ParseNewSymbol (publish_private,
class_arg,
type, args->name);
}
yyval.argType = yyvsp[0].argType;
}
break;
case 193:
#line 1157 "gram.y"
{ yyval.argType = 0; }
break;
case 194:
#line 1160 "gram.y"
{ yyval.argType = NewArgType (yyvsp[-2].argDecl.type, False, yyvsp[-2].argDecl.name, 0, yyvsp[0].argType); }
break;
case 195:
#line 1162 "gram.y"
{ yyval.argType = NewArgType (yyvsp[-1].argDecl.type, yyvsp[0].bool, yyvsp[-1].argDecl.name, 0, 0); }
break;
case 196:
#line 1165 "gram.y"
{ yyval.argDecl.type = yyvsp[-1].type; yyval.argDecl.name = yyvsp[0].atom; }
break;
case 197:
#line 1167 "gram.y"
{ yyval.argDecl.type = yyvsp[0].type; yyval.argDecl.name = 0; }
break;
case 198:
#line 1170 "gram.y"
{ yyval.bool = True; }
break;
case 199:
#line 1172 "gram.y"
{ yyval.bool = False; }
break;
case 201:
#line 1180 "gram.y"
{ yyval.expr = 0; }
break;
case 203:
#line 1184 "gram.y"
{
DeclList *decl;
for (decl = yyvsp[0].declList; decl; decl = decl->next)
{
if (decl->init)
{
if (!decl->init->base.type)
decl->init->base.type = yyvsp[-1].fulltype.type;
}
}
yyval.expr = NewExprDecl (VAR, yyvsp[0].declList, yyvsp[-1].fulltype.class, yyvsp[-1].fulltype.type, yyvsp[-1].fulltype.publish);
}
break;
case 205:
#line 1201 "gram.y"
{ yyval.expr = NewExprTree(COMMA, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 207:
#line 1208 "gram.y"
{ yyval.expr = 0; }
break;
case 208:
#line 1211 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 209:
#line 1213 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[0].expr, 0); }
break;
case 211:
#line 1217 "gram.y"
{ yyval.expr = 0; }
break;
case 212:
#line 1220 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 213:
#line 1222 "gram.y"
{
ExprPtr arg = yyvsp[0].bool ? NewExprTree (DOTDOTDOT, yyvsp[-1].expr, 0) : yyvsp[-1].expr;
yyval.expr = NewExprTree (COMMA, arg, 0);
}
break;
case 214:
#line 1228 "gram.y"
{
yyval.expr = NewExprTree (OC,
NewExprTree (RETURNTOK, 0, yyvsp[0].expr),
NewExprTree (OC, 0, 0));
}
break;
case 215:
#line 1233 "gram.y"
{ ++funcDepth; }
break;
case 216:
#line 1233 "gram.y"
{ --funcDepth; yyval.expr = yyvsp[0].expr; }
break;
case 217:
#line 1239 "gram.y"
{
if (yyvsp[-1].ints == ASSIGNPOW)
yyval.expr = NewExprTree (ASSIGNPOW,
BuildName ("Math", "assign_pow"),
NewExprTree (ASSIGNPOW, yyvsp[-2].expr, yyvsp[0].expr));
else
{
ExprPtr left = yyvsp[-2].expr;
/*
* Automatically declare names used in
* simple assignements at the top level
*/
if (yyvsp[-1].ints == ASSIGN &&
funcDepth == 0 &&
left->base.tag == NAME &&
!(left->atom.symbol))
{
yyvsp[-2].expr->atom.symbol = ParseNewSymbol (publish_private,
class_undef,
typePoly,
yyvsp[-2].expr->atom.atom);
}
yyval.expr = NewExprTree(yyvsp[-1].ints, yyvsp[-2].expr, yyvsp[0].expr);
}
}
break;
case 218:
#line 1265 "gram.y"
{
ParseCanonType (yyvsp[-6].type, False);
yyval.expr = NewExprCode (NewFuncCode (yyvsp[-6].type, yyvsp[-3].argType, yyvsp[-1].expr, yyvsp[-2].value), 0);
}
break;
case 219:
#line 1270 "gram.y"
{ Value t;
t = do_Thread_id_to_thread (yyvsp[0].value);
if (t == Void)
{
ParseError ("No thread %v", yyvsp[0].value);
YYERROR;
}
else
yyval.expr = NewExprConst(THREAD_CONST, t);
}
break;
case 220:
#line 1281 "gram.y"
{ yyval.expr = NewExprTree(STAR, yyvsp[0].expr, (Expr *) 0); }
break;
case 221:
#line 1283 "gram.y"
{ yyval.expr = NewExprTree(STAR, NewExprTree (STAR, yyvsp[0].expr, 0), 0); }
break;
case 222:
#line 1285 "gram.y"
{ yyval.expr = NewExprTree(AMPER, yyvsp[0].expr, (Expr *) 0); }
break;
case 223:
#line 1287 "gram.y"
{ yyval.expr = NewExprTree(AMPER,
NewExprTree (AMPER, yyvsp[0].expr, (Expr *) 0),
(Expr *) 0); }
break;
case 224:
#line 1291 "gram.y"
{ yyval.expr = NewExprTree(UMINUS, yyvsp[0].expr, (Expr *) 0); }
break;
case 225:
#line 1293 "gram.y"
{ yyval.expr = NewExprTree(LNOT, yyvsp[0].expr, (Expr *) 0); }
break;
case 226:
#line 1295 "gram.y"
{ yyval.expr = NewExprTree(BANG, yyvsp[0].expr, (Expr *) 0); }
break;
case 227:
#line 1297 "gram.y"
{ yyval.expr = NewExprTree(FACT, yyvsp[-1].expr, (Expr *) 0); }
break;
case 228:
#line 1299 "gram.y"
{ yyval.expr = NewExprTree(INC, yyvsp[0].expr, (Expr *) 0); }
break;
case 229:
#line 1301 "gram.y"
{ yyval.expr = NewExprTree(INC, (Expr *) 0, yyvsp[-1].expr); }
break;
case 230:
#line 1303 "gram.y"
{ yyval.expr = NewExprTree(DEC, yyvsp[0].expr, (Expr *) 0); }
break;
case 231:
#line 1305 "gram.y"
{ yyval.expr = NewExprTree(DEC, (Expr *) 0, yyvsp[-1].expr); }
break;
case 232:
#line 1307 "gram.y"
{ yyval.expr = NewExprTree (FORK, (Expr *) 0, yyvsp[0].expr); }
break;
case 233:
#line 1309 "gram.y"
{ yyval.expr = NewExprTree(PLUS, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 234:
#line 1311 "gram.y"
{ yyval.expr = NewExprTree(MINUS, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 235:
#line 1313 "gram.y"
{ yyval.expr = NewExprTree(TIMES, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 236:
#line 1315 "gram.y"
{ yyval.expr = NewExprTree(DIVIDE, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 237:
#line 1317 "gram.y"
{ yyval.expr = NewExprTree(DIV, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 238:
#line 1319 "gram.y"
{ yyval.expr = NewExprTree(MOD, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 239:
#line 1321 "gram.y"
{
yyval.expr = NewExprTree(POW,
BuildName ("Math", "pow"),
NewExprTree (POW, yyvsp[-2].expr, yyvsp[0].expr));
}
break;
case 240:
#line 1327 "gram.y"
{
yyval.expr = NewExprTree (POW,
BuildName("Math", "pow"),
NewExprTree (POW, yyvsp[-1].expr,
NewExprConst (TEN_NUM,
NewInt(2))));
}
break;
case 241:
#line 1335 "gram.y"
{
yyval.expr = NewExprTree (POW,
BuildName("Math", "pow"),
NewExprTree (POW, yyvsp[-1].expr,
NewExprConst (TEN_NUM,
NewInt(3))));
}
break;
case 242:
#line 1343 "gram.y"
{ yyval.expr = NewExprTree(SHIFTL, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 243:
#line 1345 "gram.y"
{ yyval.expr = NewExprTree(SHIFTR, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 244:
#line 1347 "gram.y"
{ yyval.expr = NewExprTree(QUEST, yyvsp[-4].expr, NewExprTree(COLON, yyvsp[-2].expr, yyvsp[0].expr)); }
break;
case 245:
#line 1349 "gram.y"
{ yyval.expr = NewExprTree(LXOR, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 246:
#line 1351 "gram.y"
{ yyval.expr = NewExprTree(LAND, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 247:
#line 1353 "gram.y"
{ yyval.expr = NewExprTree(LOR, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 248:
#line 1355 "gram.y"
{ yyval.expr = NewExprTree(AND, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 249:
#line 1357 "gram.y"
{ yyval.expr = NewExprTree(OR, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 250:
#line 1359 "gram.y"
{ yyval.expr = NewExprTree(EQ, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 251:
#line 1361 "gram.y"
{ yyval.expr = NewExprTree(NE, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 252:
#line 1363 "gram.y"
{ yyval.expr = NewExprTree(LT, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 253:
#line 1365 "gram.y"
{ yyval.expr = NewExprTree(GT, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 254:
#line 1367 "gram.y"
{ yyval.expr = NewExprTree(LE, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 255:
#line 1369 "gram.y"
{ yyval.expr = NewExprTree(GE, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 257:
#line 1372 "gram.y"
{ yyval.expr = NewExprConst(TEN_NUM, yyvsp[0].value); }
break;
case 258:
#line 1374 "gram.y"
{ yyval.expr = NewExprConst(OCTAL_NUM, yyvsp[0].value); }
break;
case 259:
#line 1376 "gram.y"
{ yyval.expr = NewExprConst(OCTAL0_NUM, yyvsp[0].value); }
break;
case 260:
#line 1378 "gram.y"
{ yyval.expr = NewExprConst(BINARY_NUM, yyvsp[0].value); }
break;
case 261:
#line 1380 "gram.y"
{ yyval.expr = NewExprConst(HEX_NUM, yyvsp[0].value); }
break;
case 262:
#line 1382 "gram.y"
{ yyval.expr = NewExprConst(TEN_FLOAT, yyvsp[0].value); }
break;
case 263:
#line 1384 "gram.y"
{ yyval.expr = NewExprConst(OCTAL_FLOAT, yyvsp[0].value); }
break;
case 264:
#line 1386 "gram.y"
{ yyval.expr = NewExprConst(OCTAL0_FLOAT, yyvsp[0].value); }
break;
case 265:
#line 1388 "gram.y"
{ yyval.expr = NewExprConst(BINARY_FLOAT, yyvsp[0].value); }
break;
case 266:
#line 1390 "gram.y"
{ yyval.expr = NewExprConst(HEX_FLOAT, yyvsp[0].value); }
break;
case 267:
#line 1392 "gram.y"
{ yyval.expr = NewExprConst(CHAR_CONST, yyvsp[0].value); }
break;
case 268:
#line 1394 "gram.y"
{ yyval.expr = NewExprConst(STRING_CONST, yyvsp[0].value); }
break;
case 269:
#line 1396 "gram.y"
{ yyval.expr = NewExprConst(VOIDVAL, yyvsp[0].value); }
break;
case 270:
#line 1398 "gram.y"
{ yyval.expr = NewExprConst(BOOLVAL, yyvsp[0].value); }
break;
case 271:
#line 1400 "gram.y"
{
yyval.expr = BuildFullname (0, AtomId ("[]"));
}
break;
case 272:
#line 1404 "gram.y"
{
ParseCanonType (yyvsp[-4].type, False);
if (yyvsp[-1].expr)
yyvsp[-1].expr->base.type = yyvsp[-4].type;
yyval.expr = NewExprTree (NEW, yyvsp[-1].expr, 0);
yyval.expr->base.type = yyvsp[-4].type;
}
break;
case 273:
#line 1412 "gram.y"
{
yyvsp[-1].expr->base.type = NewTypeArray (typePoly, yyvsp[-5].expr, True);
ParseCanonType (yyvsp[-1].expr->base.type, False);
yyval.expr = NewExprTree (NEW, yyvsp[-1].expr, 0);
yyval.expr->base.type = yyvsp[-1].expr->base.type;
}
break;
case 274:
#line 1419 "gram.y"
{
TypePtr t = NewTypeArray (typePoly, yyvsp[-5].expr, False);
ParseCanonType (t, False);
yyval.expr = NewExprTree (NEW, yyvsp[-1].expr, 0);
if (yyvsp[-1].expr)
yyvsp[-1].expr->base.type = t;
yyval.expr->base.type = t;
}
break;
case 275:
#line 1428 "gram.y"
{
TypePtr t = NewTypeHash (typePoly, yyvsp[-5].type);
ParseCanonType (t, False);
yyval.expr = NewExprTree (NEW, yyvsp[-1].expr, 0);
if (yyvsp[-1].expr)
yyvsp[-1].expr->base.type = t;
yyval.expr->base.type = t;
}
break;
case 276:
#line 1437 "gram.y"
{
ParseCanonType (yyvsp[-2].type, False);
yyval.expr = NewExprTree (UNION, NewExprAtom (yyvsp[0].atom, 0, False), 0);
yyval.expr->base.type = yyvsp[-2].type;
}
break;
case 277:
#line 1443 "gram.y"
{
ParseCanonType (yyvsp[-4].type, False);
yyval.expr = NewExprTree (UNION, NewExprAtom (yyvsp[-2].atom, 0, False), yyvsp[0].expr);
yyval.expr->base.type = yyvsp[-4].type;
}
break;
case 278:
#line 1449 "gram.y"
{ yyval.expr = BuildCall ("History", "fetch", 1, NewExprConst (TEN_NUM, yyvsp[0].value)); }
break;
case 279:
#line 1451 "gram.y"
{ yyval.expr = NewExprTree (DOLLAR, 0, 0); }
break;
case 280:
#line 1453 "gram.y"
{ yyval.expr = yyvsp[-1].expr; }
break;
case 281:
#line 1455 "gram.y"
{ yyval.expr = yyvsp[-1].expr; }
break;
case 282:
#line 1457 "gram.y"
{ yyval.expr = NewExprTree (OS, NewExprTree (STAR, yyvsp[-3].expr, (Expr *) 0), yyvsp[-1].expr); }
break;
case 283:
#line 1459 "gram.y"
{ yyval.expr = NewExprTree(OS, yyvsp[-3].expr, yyvsp[-1].expr); }
break;
case 284:
#line 1461 "gram.y"
{ yyval.expr = NewExprTree (OP, yyvsp[-3].expr, yyvsp[-1].expr); }
break;
case 285:
#line 1463 "gram.y"
{ yyval.expr = NewExprTree(DOT, yyvsp[-2].expr, NewExprAtom (yyvsp[0].atom, 0, False)); }
break;
case 286:
#line 1465 "gram.y"
{ yyval.expr = NewExprTree(ARROW, yyvsp[-2].expr, NewExprAtom (yyvsp[0].atom, 0, False)); }
break;
case 288:
#line 1469 "gram.y"
{ yyval.value = Zero; }
break;
case 310:
#line 1497 "gram.y"
{ yyval.expr = 0; }
break;
case 311:
#line 1499 "gram.y"
{ yyval.expr = 0; }
break;
case 312:
#line 1502 "gram.y"
{
ExprPtr elts = yyvsp[-3].expr ? ExprRehang (yyvsp[-3].expr, 0) : 0;
if (yyvsp[-1].bool)
{
ExprPtr i = elts;
while (i->tree.right)
i = i->tree.right;
i->tree.right = NewExprTree (COMMA,
NewExprTree (DOTDOTDOT, 0, 0),
0);
}
yyval.expr = NewExprTree (ARRAY, elts, 0);
}
break;
case 313:
#line 1516 "gram.y"
{
yyval.expr = NewExprTree (COMP, NewExprTree (COMP, yyvsp[-5].expr, yyvsp[-4].expr), yyvsp[-2].expr);
}
break;
case 314:
#line 1521 "gram.y"
{ yyval.expr = yyvsp[0].expr; }
break;
case 316:
#line 1525 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 318:
#line 1529 "gram.y"
{
SymbolPtr s;
s = ParseNewSymbol (publish_private, class_arg,
typePrim[rep_integer], yyvsp[0].atom);
yyval.expr = NewExprAtom (yyvsp[0].atom, s, False);
}
break;
case 319:
#line 1537 "gram.y"
{
SymbolPtr s;
Atom a = AtomId("[]");
s = ParseNewSymbol (publish_private, class_undef,
typePoly, a);
yyval.expr = NewExprAtom (a, s, False);
}
break;
case 320:
#line 1546 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 321:
#line 1548 "gram.y"
{ yyval.expr = NewExprTree (COMMA, 0, yyvsp[0].expr); }
break;
case 325:
#line 1559 "gram.y"
{ yyval.expr = 0; }
break;
case 326:
#line 1561 "gram.y"
{ yyval.expr = 0; }
break;
case 327:
#line 1564 "gram.y"
{
ExprPtr elts = yyvsp[-2].expr ? ExprRehang (yyvsp[-2].expr, 0) : 0;
yyval.expr = NewExprTree (HASH, elts, 0);
}
break;
case 328:
#line 1570 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 329:
#line 1572 "gram.y"
{ yyval.expr = NewExprTree (COMMA, 0, yyvsp[0].expr); }
break;
case 330:
#line 1575 "gram.y"
{ yyval.expr = NewExprTree (DARROW, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 331:
#line 1577 "gram.y"
{ yyval.expr = NewExprTree (DARROW, 0, yyvsp[0].expr); }
break;
case 334:
#line 1586 "gram.y"
{ yyval.expr = NewExprTree (STRUCT, ExprRehang (yyvsp[-2].expr, 0), 0); }
break;
case 335:
#line 1589 "gram.y"
{ yyval.expr = NewExprTree (COMMA, yyvsp[-2].expr, yyvsp[0].expr); }
break;
case 336:
#line 1591 "gram.y"
{ yyval.expr = NewExprTree (COMMA, 0, yyvsp[0].expr); }
break;
case 337:
#line 1594 "gram.y"
{ yyval.expr = NewExprTree (ASSIGN, NewExprAtom (yyvsp[-2].atom, 0, False), yyvsp[0].expr); }
break;
case 338:
#line 1596 "gram.y"
{ yyval.expr = NewExprTree (ASSIGN, NewExprAtom (yyvsp[-2].atom, 0, False), yyvsp[0].expr); }
break;
case 342:
#line 1603 "gram.y"
{ yyval.expr = NewExprTree (ANONINIT, 0, 0); }
break;
#line 4750 "gram.c"
}
yyssp -= yym;
yystate = *yyssp;
yyvsp -= yym;
yym = yylhs[yyn];
if (yystate == 0 && yym == 0)
{
#if YYDEBUG
if (yydebug)
printf("%sdebug: after reduction, shifting from state 0 to\
state %d\n", YYPREFIX, YYFINAL);
#endif
yystate = YYFINAL;
*++yyssp = YYFINAL;
*++yyvsp = yyval;
if (yychar < 0)
{
if ((yychar = yylex()) < 0) yychar = 0;
#if YYDEBUG
if (yydebug)
{
yys = 0;
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
printf("%sdebug: state %d, reading %d (%s)\n",
YYPREFIX, YYFINAL, yychar, yys);
}
#endif
}
if (yychar == 0) goto yyaccept;
goto yyloop;
}
if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
yystate = yytable[yyn];
else
yystate = yydgoto[yym];
#if YYDEBUG
if (yydebug)
printf("%sdebug: after reduction, shifting from state %d \
to state %d\n", YYPREFIX, *yyssp, yystate);
#endif
if (yyssp >= yysslim && yygrowstack())
{
goto yyoverflow;
}
*++yyssp = yystate;
*++yyvsp = yyval;
goto yyloop;
yyoverflow:
yyerror("yacc stack overflow");
yyabort:
return (1);
yyaccept:
return (0);
}
syntax highlighted by Code2HTML, v. 0.9.1