#ifndef lint static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; #endif #include #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 /* * 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 #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); }