diff options
Diffstat (limited to 'awktab.c')
-rw-r--r-- | awktab.c | 3948 |
1 files changed, 2163 insertions, 1785 deletions
@@ -1,5 +1,48 @@ -# line 27 "awk.y" +/* A Bison parser, made from awk.y */ + +#define YYBISON 1 /* Identify Bison output. */ + +#define FUNC_CALL 258 +#define NAME 259 +#define REGEXP 260 +#define ERROR 261 +#define YNUMBER 262 +#define YSTRING 263 +#define RELOP 264 +#define APPEND_OP 265 +#define ASSIGNOP 266 +#define MATCHOP 267 +#define NEWLINE 268 +#define CONCAT_OP 269 +#define LEX_BEGIN 270 +#define LEX_END 271 +#define LEX_IF 272 +#define LEX_ELSE 273 +#define LEX_RETURN 274 +#define LEX_DELETE 275 +#define LEX_WHILE 276 +#define LEX_DO 277 +#define LEX_FOR 278 +#define LEX_BREAK 279 +#define LEX_CONTINUE 280 +#define LEX_PRINT 281 +#define LEX_PRINTF 282 +#define LEX_NEXT 283 +#define LEX_EXIT 284 +#define LEX_FUNCTION 285 +#define LEX_GETLINE 286 +#define LEX_IN 287 +#define LEX_AND 288 +#define LEX_OR 289 +#define INCREMENT 290 +#define DECREMENT 291 +#define LEX_BUILTIN 292 +#define LEX_LENGTH 293 +#define UNARY 294 + +#line 26 "awk.y" + #ifdef DEBUG #define YYDEBUG 12 #endif @@ -42,14 +85,14 @@ NODE *variables[HASHSIZE]; extern char *source; extern int sourceline; -extern char *cmdline_src; -extern char **srcfiles; +extern struct src *srcfiles; +extern int numfiles; extern int errcount; extern NODE *begin_block; extern NODE *end_block; -# line 76 "awk.y" -typedef union { +#line 73 "awk.y" +typedef union { long lval; AWKNUM fval; NODE *nodeval; @@ -57,54 +100,2089 @@ typedef union { char *sval; NODE *(*ptrval)(); } YYSTYPE; -# define FUNC_CALL 257 -# define NAME 258 -# define REGEXP 259 -# define ERROR 260 -# define YNUMBER 261 -# define YSTRING 262 -# define RELOP 263 -# define APPEND_OP 264 -# define ASSIGNOP 265 -# define MATCHOP 266 -# define NEWLINE 267 -# define CONCAT_OP 268 -# define LEX_BEGIN 269 -# define LEX_END 270 -# define LEX_IF 271 -# define LEX_ELSE 272 -# define LEX_RETURN 273 -# define LEX_DELETE 274 -# define LEX_WHILE 275 -# define LEX_DO 276 -# define LEX_FOR 277 -# define LEX_BREAK 278 -# define LEX_CONTINUE 279 -# define LEX_PRINT 280 -# define LEX_PRINTF 281 -# define LEX_NEXT 282 -# define LEX_EXIT 283 -# define LEX_FUNCTION 284 -# define LEX_GETLINE 285 -# define LEX_IN 286 -# define LEX_AND 287 -# define LEX_OR 288 -# define INCREMENT 289 -# define DECREMENT 290 -# define LEX_BUILTIN 291 -# define LEX_LENGTH 292 -# define UNARY 293 -#define yyclearin yychar = -1 -#define yyerrok yyerrflag = 0 -extern int yychar; -extern int yyerrflag; + +#ifndef YYLTYPE +typedef + struct yyltype + { + int timestamp; + int first_line; + int first_column; + int last_line; + int last_column; + char *text; + } + yyltype; + +#define YYLTYPE yyltype +#endif + +#include <stdio.h> + +#ifndef __STDC__ +#define const +#endif + + + +#define YYFINAL 306 +#define YYFLAG -32768 +#define YYNTBASE 61 + +#define YYTRANSLATE(x) ((unsigned)(x) <= 294 ? yytranslate[x] : 106) + +static const char yytranslate[] = { 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 49, 2, 2, 52, 48, 2, 2, 53, + 54, 46, 44, 60, 45, 2, 47, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 40, 59, 41, + 2, 42, 39, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 55, 2, 56, 51, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 57, 43, 58, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 50 +}; + +#if YYDEBUG != 0 +static const short yyprhs[] = { 0, + 0, 4, 6, 9, 11, 14, 15, 19, 20, 24, + 27, 30, 33, 35, 38, 41, 43, 45, 47, 49, + 51, 52, 60, 65, 67, 71, 72, 77, 83, 88, + 90, 93, 95, 98, 100, 103, 106, 109, 113, 115, + 122, 131, 140, 151, 161, 164, 167, 174, 179, 183, + 187, 188, 193, 200, 203, 205, 207, 214, 224, 226, + 229, 230, 232, 233, 236, 237, 240, 243, 246, 247, + 249, 251, 255, 257, 260, 264, 265, 267, 268, 270, + 272, 276, 278, 281, 285, 289, 290, 292, 294, 298, + 300, 303, 307, 311, 312, 317, 323, 328, 332, 336, + 340, 344, 346, 349, 353, 357, 361, 365, 371, 373, + 376, 377, 382, 386, 390, 394, 396, 399, 403, 407, + 411, 417, 419, 422, 424, 428, 432, 436, 440, 444, + 448, 451, 454, 457, 461, 466, 471, 473, 478, 480, + 483, 486, 488, 490, 493, 496, 497, 499, 501, 506, + 509, 512, 515, 517, 518, 520, 522 +}; + +#endif + +static const short yyrhs[] = { 82, + 62, 82, 0, 63, 0, 62, 63, 0, 1, 0, + 62, 1, 0, 0, 15, 64, 74, 0, 0, 16, + 65, 74, 0, 15, 76, 0, 16, 76, 0, 71, + 74, 0, 74, 0, 71, 76, 0, 68, 70, 0, + 4, 0, 3, 0, 67, 0, 37, 0, 38, 0, + 0, 30, 69, 66, 53, 85, 102, 82, 0, 100, + 75, 101, 103, 0, 92, 0, 92, 105, 92, 0, + 0, 47, 73, 5, 47, 0, 100, 75, 101, 103, + 82, 0, 100, 101, 103, 82, 0, 77, 0, 75, + 77, 0, 1, 0, 75, 1, 0, 81, 0, 104, + 82, 0, 104, 82, 0, 100, 101, 0, 100, 75, + 101, 0, 80, 0, 21, 53, 92, 102, 82, 77, + 0, 22, 82, 77, 21, 53, 92, 102, 82, 0, + 23, 53, 4, 32, 4, 102, 82, 77, 0, 23, + 53, 87, 104, 92, 104, 87, 102, 82, 77, 0, + 23, 53, 87, 104, 104, 87, 102, 82, 77, 0, + 24, 76, 0, 25, 76, 0, 79, 53, 91, 102, + 84, 76, 0, 79, 88, 84, 76, 0, 28, 87, + 76, 0, 29, 87, 76, 0, 0, 19, 78, 87, + 76, 0, 20, 4, 55, 91, 56, 76, 0, 92, + 76, 0, 26, 0, 27, 0, 17, 53, 92, 102, + 82, 77, 0, 17, 53, 92, 102, 82, 77, 18, + 82, 77, 0, 13, 0, 81, 13, 0, 0, 81, + 0, 0, 41, 96, 0, 0, 42, 92, 0, 10, + 92, 0, 43, 92, 0, 0, 86, 0, 4, 0, + 86, 105, 4, 0, 1, 0, 86, 1, 0, 86, + 105, 1, 0, 0, 92, 0, 0, 89, 0, 94, + 0, 89, 105, 94, 0, 1, 0, 89, 1, 0, + 89, 1, 94, 0, 89, 105, 1, 0, 0, 91, + 0, 92, 0, 91, 105, 92, 0, 1, 0, 91, + 1, 0, 91, 1, 92, 0, 91, 105, 1, 0, + 0, 99, 11, 93, 92, 0, 53, 91, 102, 32, + 4, 0, 92, 43, 31, 98, 0, 31, 98, 83, + 0, 92, 33, 92, 0, 92, 34, 92, 0, 92, + 12, 92, 0, 72, 0, 49, 72, 0, 92, 32, + 4, 0, 92, 9, 92, 0, 92, 41, 92, 0, + 92, 42, 92, 0, 92, 39, 92, 40, 92, 0, + 96, 0, 92, 96, 0, 0, 99, 11, 95, 94, + 0, 94, 33, 94, 0, 94, 34, 94, 0, 31, + 98, 83, 0, 72, 0, 49, 72, 0, 94, 12, + 94, 0, 94, 32, 4, 0, 94, 9, 94, 0, + 94, 39, 94, 40, 94, 0, 96, 0, 94, 96, + 0, 97, 0, 96, 51, 96, 0, 96, 46, 96, + 0, 96, 47, 96, 0, 96, 48, 96, 0, 96, + 44, 96, 0, 96, 45, 96, 0, 99, 35, 0, + 99, 36, 0, 49, 96, 0, 53, 92, 102, 0, + 37, 53, 90, 102, 0, 38, 53, 90, 102, 0, + 38, 0, 3, 53, 90, 102, 0, 99, 0, 35, + 99, 0, 36, 99, 0, 7, 0, 8, 0, 45, + 96, 0, 44, 96, 0, 0, 99, 0, 4, 0, + 4, 55, 91, 56, 0, 52, 97, 0, 57, 82, + 0, 58, 82, 0, 54, 0, 0, 104, 0, 59, + 0, 60, 82, 0 +}; + +#if YYDEBUG != 0 +static const short yyrline[] = { 0, + 133, 138, 146, 162, 163, 167, 169, 183, 185, 199, + 205, 211, 213, 215, 228, 237, 239, 241, 251, 252, + 256, 260, 268, 277, 279, 288, 290, 308, 310, 315, + 317, 325, 327, 332, 333, 337, 339, 341, 343, 345, + 347, 349, 354, 358, 363, 366, 369, 371, 382, 400, + 402, 404, 406, 408, 413, 415, 420, 425, 432, 434, + 438, 439, 443, 445, 450, 452, 454, 456, 461, 463, + 468, 470, 472, 474, 476, 482, 484, 489, 491, 496, + 498, 504, 506, 508, 510, 515, 517, 522, 524, 530, + 532, 534, 536, 541, 544, 549, 551, 556, 562, 564, + 566, 572, 574, 582, 584, 590, 592, 594, 596, 598, + 603, 606, 607, 609, 611, 617, 619, 621, 623, 625, + 627, 629, 631, 636, 638, 640, 642, 644, 646, 648, + 650, 652, 657, 659, 661, 664, 666, 674, 678, 679, + 681, 683, 685, 688, 695, 700, 702, 707, 709, 717, + 722, 726, 730, 734, 735, 739, 742 +}; + +static const char * const yytname[] = { "$","error","$illegal.","FUNC_CALL", +"NAME","REGEXP","ERROR","YNUMBER","YSTRING","RELOP","APPEND_OP","ASSIGNOP","MATCHOP", +"NEWLINE","CONCAT_OP","LEX_BEGIN","LEX_END","LEX_IF","LEX_ELSE","LEX_RETURN", +"LEX_DELETE","LEX_WHILE","LEX_DO","LEX_FOR","LEX_BREAK","LEX_CONTINUE","LEX_PRINT", +"LEX_PRINTF","LEX_NEXT","LEX_EXIT","LEX_FUNCTION","LEX_GETLINE","LEX_IN","LEX_AND", +"LEX_OR","INCREMENT","DECREMENT","LEX_BUILTIN","LEX_LENGTH","'?'","':'","'<'", +"'>'","'|'","'+'","'-'","'*'","'/'","'%'","'!'","UNARY","'^'","'$'","'('","')'", +"'['","']'","'{'","'}'","';'","','","start","program","rule","@1","@2","func_name", +"lex_builtin","function_prologue","@3","function_body","pattern","regexp","@4", +"action","statements","statement_term","statement","@5","print","if_statement", +"nls","opt_nls","input_redir","output_redir","opt_param_list","param_list","opt_exp", +"opt_rexpression_list","rexpression_list","opt_expression_list","expression_list", +"exp","@6","rexp","@7","simp_exp","non_post_simp_exp","opt_variable","variable", +"l_brace","r_brace","r_paren","opt_semi","semi","comma","" +}; +#endif + +static const short yyr1[] = { 0, + 61, 62, 62, 62, 62, 64, 63, 65, 63, 63, + 63, 63, 63, 63, 63, 66, 66, 66, 67, 67, + 69, 68, 70, 71, 71, 73, 72, 74, 74, 75, + 75, 75, 75, 76, 76, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 78, 77, 77, 77, 79, 79, 80, 80, 81, 81, + 82, 82, 83, 83, 84, 84, 84, 84, 85, 85, + 86, 86, 86, 86, 86, 87, 87, 88, 88, 89, + 89, 89, 89, 89, 89, 90, 90, 91, 91, 91, + 91, 91, 91, 93, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 95, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 98, 98, 99, 99, 99, + 100, 101, 102, 103, 103, 104, 105 +}; + +static const short yyr2[] = { 0, + 3, 1, 2, 1, 2, 0, 3, 0, 3, 2, + 2, 2, 1, 2, 2, 1, 1, 1, 1, 1, + 0, 7, 4, 1, 3, 0, 4, 5, 4, 1, + 2, 1, 2, 1, 2, 2, 2, 3, 1, 6, + 8, 8, 10, 9, 2, 2, 6, 4, 3, 3, + 0, 4, 6, 2, 1, 1, 6, 9, 1, 2, + 0, 1, 0, 2, 0, 2, 2, 2, 0, 1, + 1, 3, 1, 2, 3, 0, 1, 0, 1, 1, + 3, 1, 2, 3, 3, 0, 1, 1, 3, 1, + 2, 3, 3, 0, 4, 5, 4, 3, 3, 3, + 3, 1, 2, 3, 3, 3, 3, 5, 1, 2, + 0, 4, 3, 3, 3, 1, 2, 3, 3, 3, + 5, 1, 2, 1, 3, 3, 3, 3, 3, 3, + 2, 2, 2, 3, 4, 4, 1, 4, 1, 2, + 2, 1, 1, 2, 2, 0, 1, 1, 4, 2, + 2, 2, 1, 0, 1, 1, 2 +}; + +static const short yydefact[] = { 61, + 59, 62, 0, 60, 4, 0, 148, 142, 143, 6, + 8, 21, 146, 0, 0, 0, 137, 0, 0, 26, + 0, 0, 0, 61, 0, 2, 0, 0, 102, 13, + 24, 109, 124, 139, 0, 0, 0, 156, 0, 10, + 34, 61, 0, 11, 0, 63, 147, 140, 141, 0, + 0, 0, 0, 145, 139, 144, 0, 103, 133, 150, + 139, 90, 0, 88, 151, 5, 3, 1, 15, 0, + 12, 14, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 61, 110, 0, 0, 0, 0, 0, 0, 0, + 94, 131, 132, 32, 0, 51, 0, 0, 61, 0, + 0, 0, 55, 56, 76, 76, 61, 0, 30, 0, + 39, 0, 0, 154, 61, 0, 0, 88, 0, 7, + 35, 9, 17, 16, 19, 20, 0, 18, 0, 98, + 0, 0, 0, 0, 91, 153, 0, 0, 134, 0, + 105, 101, 104, 99, 100, 0, 106, 107, 146, 157, + 25, 129, 130, 126, 127, 128, 125, 0, 0, 76, + 0, 0, 0, 76, 45, 46, 0, 77, 0, 152, + 33, 31, 154, 82, 146, 0, 0, 116, 65, 0, + 80, 122, 139, 54, 0, 37, 61, 155, 36, 138, + 149, 0, 64, 135, 136, 27, 92, 0, 93, 89, + 154, 0, 97, 95, 0, 0, 0, 0, 0, 148, + 0, 49, 50, 61, 63, 117, 0, 0, 0, 0, + 0, 83, 0, 0, 0, 0, 0, 0, 0, 123, + 111, 38, 29, 73, 71, 0, 0, 96, 23, 108, + 61, 52, 0, 61, 0, 0, 0, 28, 115, 65, + 67, 66, 68, 48, 84, 85, 81, 120, 118, 119, + 113, 114, 0, 0, 61, 74, 0, 0, 0, 0, + 0, 0, 0, 76, 0, 0, 112, 22, 75, 72, + 57, 53, 40, 0, 61, 76, 0, 47, 121, 61, + 61, 0, 0, 61, 0, 41, 42, 61, 0, 58, + 0, 44, 43, 0, 0, 0 +}; + +static const short yydefgoto[] = { 304, + 25, 26, 39, 43, 127, 128, 27, 45, 69, 28, + 29, 57, 30, 108, 40, 109, 160, 110, 111, 2, + 3, 130, 221, 236, 237, 167, 179, 180, 116, 117, + 112, 158, 181, 264, 32, 33, 46, 34, 113, 114, + 139, 187, 115, 138 +}; + +static const short yypact[] = { -6, +-32768, 8, 1094,-32768,-32768, -26, -11,-32768,-32768, -1, + -1,-32768, 1, 1, 1, 16, 31, 1738, 1738,-32768, + 1691, 1738, 1186, -6, 890,-32768, -5, -2,-32768,-32768, + 836, 69,-32768, 83, 612, 1166, 1186,-32768, -5,-32768, + 8, -6, -5,-32768, 101, 20,-32768,-32768,-32768, 1166, + 1166, 1738, 1606, 36, 2, 36, 62,-32768, 36,-32768, +-32768,-32768, 5, 1299,-32768,-32768,-32768,-32768,-32768, 726, +-32768,-32768, 1606, 1606, 93, 1606, 1606, 1606, 1606, 1606, + 70, -6, 69, 1606, 1738, 1738, 1738, 1738, 1738, 1738, +-32768,-32768,-32768,-32768, 54,-32768, 105, 58, -6, 68, + -1, -1,-32768,-32768, 1606, 1606, -6, 679,-32768, 783, +-32768, 994, 612, 78, -6, 86, 18, 1398, 23,-32768, +-32768,-32768,-32768,-32768,-32768,-32768, 90,-32768, 1738,-32768, + 86, 86, 1299, 97, 1606,-32768, 104, 1233,-32768, 679, + 1373, 1753,-32768, 1506, 1445, 1351, 1373, 1373, 1,-32768, + 1398, 130, 130, 36, 36, 36, 36, 1606, 1606, 1606, + 92, 1606, 937, 1625,-32768,-32768, -1, 1398, -1,-32768, +-32768,-32768, 78,-32768, 1, 1691, 1186,-32768, 0, 3, + 1528, 69, 89,-32768, 679,-32768, -6,-32768,-32768,-32768, +-32768, 14, 69,-32768,-32768,-32768, 1398, 144,-32768, 1398, + 78, 1606,-32768, 1398, 1299, -1, 1186, 1299, 131, -15, + 78,-32768,-32768, -6, 20,-32768, 5, 1606, 1606, 1606, + -1, 1672, 1252, 1672, 1672, 147, 1672, 1672, 1672, 69, +-32768,-32768,-32768,-32768,-32768, 86, 28,-32768,-32768, 1398, + -6,-32768, 29, -6, 100, 150, 1119,-32768,-32768, 0, + 1398, 1398, 1398,-32768, 1528,-32768, 1528, 802, 1013,-32768, + 1586, 1567, 1467, 1672, -6,-32768, 35, 937, -1, 937, + 1606, 86, 1047, 1606, -1, 1672, 1528,-32768,-32768,-32768, + 140,-32768,-32768, 1299, -6, 1606, 86,-32768, 1528, -6, + -6, 937, 86, -6, 937,-32768,-32768, -6, 937,-32768, + 937,-32768,-32768, 160, 172,-32768 +}; + +static const short yypgoto[] = {-32768, +-32768, 148,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + 91,-32768, 106, -47, 82, -99,-32768,-32768,-32768, 21, + 155, -40, -65,-32768,-32768, -104,-32768,-32768, 76, -9, + -3,-32768, 11,-32768, 325, 164, -124, 77, 103, -105, + 247, -147, 406, -30 +}; + + +#define YYLAST 1806 + + +static const short yytable[] = { 31, + 84, 169, 173, 222, 7, 135, 1, 186, 172, 218, + 1, 1, -79, 63, 234, -79, 246, 235, 135, 64, + 4, 31, 140, 135, 203, 214, 36, 119, 266, 135, + 41, 41, 118, 118, 201, 279, 92, 93, 280, 37, + 172, 219, 220, 37, -79, -79, 118, 118, 41, 133, + 215, 24, 22, 239, 24, 206, 38, 38, 136, 211, + 129, -79, 82, 209, 82, 185, 134, -69, 50, 141, + 142, -87, 144, 145, 146, 147, 148, 82, 191, 232, + 151, -70, 82, 51, 269, 172, 90, 82, 82, 47, + 48, 49, 44, 91, 55, 55, 143, 55, 61, 231, + 149, 168, 168, 123, 124, 35, 159, 55, 161, 72, + 162, 58, 85, 86, 87, 88, 89, 92, 93, 90, + 164, 41, 41, 92, 93, 131, 132, 35, 55, 70, + 35, 197, 41, 71, 200, 198, 38, 125, 126, 136, + 55, 35, 192, 196, 120, 35, 207, 238, 122, 223, + 260, 245, 271, 272, 204, 205, 168, 290, 208, 305, + 168, 55, 55, 55, 55, 55, 55, 217, 281, 287, + 283, 306, 67, 64, 249, 87, 88, 89, 65, 68, + 90, 293, 165, 166, 275, 60, 183, 41, 55, 41, + 0, 0, 297, 184, 55, 300, 121, 243, 240, 302, + 178, 303, 0, 118, 0, 55, 267, 0, 0, 55, + 0, 0, 0, 0, 251, 252, 253, 55, 55, 0, + 55, 55, 55, 55, 55, 47, 41, 55, 0, 0, + 0, 0, 255, 257, 258, 259, 150, 261, 262, 263, + 0, 41, 0, 273, 55, 0, 0, 0, 212, 0, + 213, 47, 55, 163, 0, 0, 0, 55, 0, 0, + 0, 170, 0, 0, 0, 0, 216, 284, 0, 189, + 168, 0, 0, 55, 277, 0, 55, 0, 0, 0, + 55, 55, 168, 0, 55, 0, 289, 242, 0, 41, + 0, 0, 0, 0, 0, 41, 0, 0, 183, 183, + 183, 183, 254, 183, 183, 183, 0, 0, 0, 137, + 0, 0, 178, 178, 178, 178, 55, 178, 178, 178, + 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, + 0, 55, 0, 55, 55, 55, 0, 55, 55, 55, + 183, 233, 54, 56, 0, 59, 0, 0, 0, 55, + 282, 0, 183, 55, 178, 83, 288, 0, 0, 0, + 55, 0, 190, 0, 0, 55, 178, 0, 248, 0, + 0, 0, 0, 0, 0, 0, 59, 194, 195, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, + 0, 0, 0, 0, 0, 268, 0, 0, 270, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, + 153, 154, 155, 156, 157, 42, 42, 0, 0, 278, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 42, 182, 0, 83, 0, 0, 292, + 0, 0, 83, 0, 295, 296, 0, 0, 299, 0, + 0, 241, 301, 193, 244, 0, 0, 83, 0, 0, + 0, 0, 0, 250, 0, 83, 83, 0, 83, 83, + 83, 83, 83, 0, 0, 83, 0, 0, 0, 0, + 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, + 59, 0, 0, 0, 0, 230, 42, 42, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 42, 285, 188, + 0, 83, 0, 0, 83, 0, 0, 0, 83, 83, + 291, 0, 83, 294, 0, 0, 0, 0, 0, 298, + 0, 0, 0, 0, 0, 0, 182, 182, 182, 182, + 0, 182, 182, 182, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, + 0, 0, 42, 0, 42, 83, 83, 83, 188, 230, + 0, 230, 230, 230, 0, 230, 230, 230, 182, 0, + 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, + 182, 230, 0, 0, 0, 0, 188, 0, 83, 0, + 0, 42, 94, 230, 6, 7, 247, 0, 8, 9, + 0, 0, 0, 0, 0, 0, 42, 0, 95, 0, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 0, 13, 0, 0, 0, 14, 15, 16, 17, + 0, 0, 274, 0, 0, 18, 19, 0, 20, 0, + 21, 0, 0, 22, 23, 0, 0, 0, 24, 107, + 38, 0, 0, 0, 42, 0, 0, 0, 286, 171, + 42, 6, 7, 0, 0, 8, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 95, 0, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 0, 13, + 0, 0, 0, 14, 15, 16, 17, 0, 0, 0, + 0, 0, 18, 19, 0, 20, 94, 21, 6, 7, + 22, 23, 8, 9, 0, 24, 107, 38, 0, 0, + 0, 0, 95, 0, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 0, 13, 0, 0, 0, + 14, 15, 16, 17, 0, 0, 0, 0, 0, 18, + 19, 0, 20, 0, 21, 0, 0, 22, 23, 0, + 0, 0, 24, 174, 38, 6, 7, 0, 0, 8, + 9, 0, -78, 0, 0, -78, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 0, 0, 8, 9, +-32768, 0, 0, 175, 0, 0, 0, 14, 15, 16, + 17, 0, 0, 0, -78, -78, 18, 19, 0, 20, + 0, 176, 0, 0, 22, 177, 14, 15, 6, 7, + 0, -78, 8, 9, 73, 18, 19, 74, 0, 0, + 52, 0, 0, 22, 53, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 75, 76, 77, + 14, 15, 16, 17, 78, 0, 79, 80, 81, 18, + 19, 0, 0, 0, 52, 0, 0, 22, 53, -61, + 66, 0, 6, 7, 0, 82, 8, 9, 0, 0, + 0, 0, 1, 0, 10, 11, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 13, 0, 0, 0, 14, 15, 16, 17, 0, 0, + 0, 0, 0, 18, 19, 0, 20, 0, 21, 6, + 7, 22, 23, 8, 9, 0, 24, 0, 0, 0, + 0, 0, 0, 95, 0, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 0, 13, 0, 0, + 0, 14, 15, 16, 17, 0, 0, 0, 0, 0, + 18, 19, 0, 20, 0, 21, 0, 0, 22, 23, + 0, 0, 0, 24, 0, 38, 6, 7, 0, 0, + 8, 9, 73, 0, 0, 74, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, + 9, 224, 0, 0,-32768, 75, 76, 77, 14, 15, + 16, 17, 78, 0, 79, 80, 81, 18, 19, 0, + 0, 0, 52, 0, 0, 22, 53, 14, 15, 6, + 7, 0, 38, 8, 9, 73, 18, 19, 74, 0, + 0, 52, 0, 0, 22, 53, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 75, 76, + 77, 14, 15, 16, 17, 78, 0, 79, 80, 81, + 18, 19, 0, 0, 5, 52, 6, 7, 22, 53, + 8, 9, 0, 0, 0, 38, 0, 0, 10, 11, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 7, 12, 13, 8, 9, 0, 14, 15, + 16, 17, 0, 0, 0, 0, 0, 18, 19, 0, + 20, 0, 21, 0, 0, 22, 23, 0, 0, 13, + 24, 0, 0, 14, 15, 16, 17, 0, 0, 0, + 0, 0, 18, 19, 0, 20, 62, 21, 6, 7, + 22, 23, 8, 9, 0, 0, 0, 38, 0, 0, + 0, 0, 0, 0, 0, 0, 62, 0, 6, 7, + 0, 0, 8, 9, 0, 0, 13, 0, 0, 0, + 14, 15, 16, 17, 0, 0, 0, 0, 0, 18, + 19, 0, 20, 0, 21, 0, 13, 22, 23, -86, + 14, 15, 16, 17, 0, 0, 0, 0, 0, 18, + 19, 0, 20, 199, 21, 6, 7, 22, 23, 8, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 256, 0, 6, 7, 0, 0, 8, 9, + 0, 0, 0, 13, 0, 0, 0, 14, 15, 16, + 17, 0, 0, 0, 0, 0, 18, 19, 0, 20, + 0, 21, 175, 0, 22, 23, 14, 15, 16, 17, + 0, 0, 0, 0, 0, 18, 19, 0, 20, 0, + 176, 6, 7, 22, 53, 8, 9, 73, 0, 0, + 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 75, 76, 77, 14, 15, 16, 17, 78, 0, 79, + 80, 81, 18, 19, 0, 0, 0, 52, 0, 0, + 22, 53, 136, 6, 7, 0, 0, 8, 9, 73, + 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, + 9,-32768, 75, 76, 77, 14, 15, 16, 17, 78, + 202, 79, 80, 81, 18, 19, 0, 0, 0, 52, + 6, 7, 22, 53, 8, 9, 73, 14, 15, 74, + 0, 0, 0,-32768,-32768,-32768, 18, 19, 0, 0, + 0, 52, 0, 0, 22, 53, 0, 0, 0, 75, + 76, 77, 14, 15, 16, 17, 78, 0, 79, 80, + 81, 18, 19, 0, 0, 0, 52, 6, 7, 22, + 53, 8, 9, 73, 0, 0, 74, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, + 7, 0, 0, 8, 9, 224, 75, 76, 225, 14, + 15, 16, 17, 0, 0, 79, 80, 81, 18, 19, + 0, 0, 0, 52, 0, 0, 22, 53, 226, 227, + 228, 14, 15, 16, 17, 229, 276, 0, 6, 7, + 18, 19, 8, 9, 73, 52, 0, 74, 22, 53, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 7, 0, 0, 8, 9, 224, 75, 0, 225, + 14, 15, 16, 17, 0, 0, 79, 80, 81, 18, + 19, 0, 0, 0, 52, 0, 0, 22, 53, 226, + 227, 228, 14, 15, 16, 17, 229, 0, 0, 6, + 7, 18, 19, 8, 9, 224, 52, 0, 225, 22, + 53, 0, 0, 0, 0, 0, 0, 0, 6, 7, + 0, 0, 8, 9, 224, 0, 0, 225, 226, 227, + 0, 14, 15, 16, 17, 0, 0, 0, 6, 7, + 18, 19, 8, 9, 0, 52, 0, 226, 22, 53, + 14, 15, 16, 17, 0, 0, 0, 6, 210, 18, + 19, 8, 9, 0, 52, 0, 13, 22, 53, 0, + 14, 15, 16, 17, 0, 0, 0, 0, 0, 18, + 19, 0, 20, 0, 21, 13, 0, 22, 23, 14, + 15, 16, 17, 0, 0, 0, 0, 0, 18, 19, + 0, 20, 0, 21, 6, 7, 22, 23, 8, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6, 7, 0, 0, 8, 9, 0, + 0, 0, 175, 0, 0, 0, 14, 15, 16, 17, + 0, 0, 0, 0, 0, 18, 19, 0, 20, 0, + 176, 0, 0, 22, 53, 14, 15, 16, 17, 0, + 0, 0, 0, 0, 18, 19, 0, 20, 0, 52, + 6, 7, 22, 53, 8, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, + 9, 73, 0, 0,-32768, 0, 0, 0, 0, 0, + 0, 0, 14, 15, 16, 17, 0, 0, 0, 0, + 0, 18, 19, 0, 0, 0, 52, 14, 15, 22, + 53, 0, 0, 79, 80, 81, 18, 19, 0, 0, + 0, 52, 0, 0, 22, 53 +}; + +static const short yycheck[] = { 3, + 31, 106, 108, 1, 4, 1, 13, 113, 108, 10, + 13, 13, 10, 23, 1, 13, 32, 4, 1, 23, + 13, 25, 70, 1, 149, 173, 53, 37, 1, 1, + 10, 11, 36, 37, 140, 1, 35, 36, 4, 55, + 140, 42, 43, 55, 42, 43, 50, 51, 28, 53, + 175, 57, 52, 201, 57, 160, 59, 59, 54, 164, + 41, 59, 60, 163, 60, 113, 5, 54, 53, 73, + 74, 54, 76, 77, 78, 79, 80, 60, 56, 185, + 84, 54, 60, 53, 56, 185, 51, 60, 60, 13, + 14, 15, 11, 11, 18, 19, 4, 21, 22, 11, + 31, 105, 106, 3, 4, 3, 53, 31, 4, 28, + 53, 21, 44, 45, 46, 47, 48, 35, 36, 51, + 53, 101, 102, 35, 36, 50, 51, 25, 52, 27, + 28, 135, 112, 28, 138, 32, 59, 37, 38, 54, + 64, 39, 53, 47, 39, 43, 55, 4, 43, 180, + 4, 21, 53, 4, 158, 159, 160, 18, 162, 0, + 164, 85, 86, 87, 88, 89, 90, 177, 268, 274, + 270, 0, 25, 177, 215, 46, 47, 48, 24, 25, + 51, 286, 101, 102, 250, 22, 110, 167, 112, 169, + -1, -1, 292, 112, 118, 295, 42, 207, 202, 299, + 110, 301, -1, 207, -1, 129, 237, -1, -1, 133, + -1, -1, -1, -1, 218, 219, 220, 141, 142, -1, + 144, 145, 146, 147, 148, 149, 206, 151, -1, -1, + -1, -1, 222, 223, 224, 225, 82, 227, 228, 229, + -1, 221, -1, 247, 168, -1, -1, -1, 167, -1, + 169, 175, 176, 99, -1, -1, -1, 181, -1, -1, + -1, 107, -1, -1, -1, -1, 176, 271, -1, 115, + 274, -1, -1, 197, 264, -1, 200, -1, -1, -1, + 204, 205, 286, -1, 208, -1, 276, 206, -1, 269, + -1, -1, -1, -1, -1, 275, -1, -1, 222, 223, + 224, 225, 221, 227, 228, 229, -1, -1, -1, 63, + -1, -1, 222, 223, 224, 225, 240, 227, 228, 229, + -1, -1, -1, -1, -1, -1, -1, 251, 252, 253, + -1, 255, -1, 257, 258, 259, -1, 261, 262, 263, + 264, 187, 18, 19, -1, 21, -1, -1, -1, 273, + 269, -1, 276, 277, 264, 31, 275, -1, -1, -1, + 284, -1, 116, -1, -1, 289, 276, -1, 214, -1, + -1, -1, -1, -1, -1, -1, 52, 131, 132, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 64, -1, + -1, -1, -1, -1, -1, 241, -1, -1, 244, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, + 86, 87, 88, 89, 90, 10, 11, -1, -1, 265, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 28, 110, -1, 112, -1, -1, 285, + -1, -1, 118, -1, 290, 291, -1, -1, 294, -1, + -1, 205, 298, 129, 208, -1, -1, 133, -1, -1, + -1, -1, -1, 217, -1, 141, 142, -1, 144, 145, + 146, 147, 148, -1, -1, 151, -1, -1, -1, -1, + -1, -1, 236, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 168, -1, -1, -1, -1, -1, -1, -1, + 176, -1, -1, -1, -1, 181, 101, 102, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 112, 272, 114, + -1, 197, -1, -1, 200, -1, -1, -1, 204, 205, + 284, -1, 208, 287, -1, -1, -1, -1, -1, 293, + -1, -1, -1, -1, -1, -1, 222, 223, 224, 225, + -1, 227, 228, 229, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 240, -1, -1, -1, -1, -1, + -1, -1, 167, -1, 169, 251, 252, 253, 173, 255, + -1, 257, 258, 259, -1, 261, 262, 263, 264, -1, + -1, -1, -1, -1, -1, -1, -1, 273, -1, -1, + 276, 277, -1, -1, -1, -1, 201, -1, 284, -1, + -1, 206, 1, 289, 3, 4, 211, -1, 7, 8, + -1, -1, -1, -1, -1, -1, 221, -1, 17, -1, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, -1, 31, -1, -1, -1, 35, 36, 37, 38, + -1, -1, 247, -1, -1, 44, 45, -1, 47, -1, + 49, -1, -1, 52, 53, -1, -1, -1, 57, 58, + 59, -1, -1, -1, 269, -1, -1, -1, 273, 1, + 275, 3, 4, -1, -1, 7, 8, -1, -1, -1, + -1, -1, -1, -1, -1, 17, -1, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + -1, -1, -1, 35, 36, 37, 38, -1, -1, -1, + -1, -1, 44, 45, -1, 47, 1, 49, 3, 4, + 52, 53, 7, 8, -1, 57, 58, 59, -1, -1, + -1, -1, 17, -1, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, -1, 31, -1, -1, -1, + 35, 36, 37, 38, -1, -1, -1, -1, -1, 44, + 45, -1, 47, -1, 49, -1, -1, 52, 53, -1, + -1, -1, 57, 1, 59, 3, 4, -1, -1, 7, + 8, -1, 10, -1, -1, 13, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4, -1, -1, 7, 8, + 9, -1, -1, 31, -1, -1, -1, 35, 36, 37, + 38, -1, -1, -1, 42, 43, 44, 45, -1, 47, + -1, 49, -1, -1, 52, 53, 35, 36, 3, 4, + -1, 59, 7, 8, 9, 44, 45, 12, -1, -1, + 49, -1, -1, 52, 53, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 32, 33, 34, + 35, 36, 37, 38, 39, -1, 41, 42, 43, 44, + 45, -1, -1, -1, 49, -1, -1, 52, 53, 0, + 1, -1, 3, 4, -1, 60, 7, 8, -1, -1, + -1, -1, 13, -1, 15, 16, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 30, + 31, -1, -1, -1, 35, 36, 37, 38, -1, -1, + -1, -1, -1, 44, 45, -1, 47, -1, 49, 3, + 4, 52, 53, 7, 8, -1, 57, -1, -1, -1, + -1, -1, -1, 17, -1, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, -1, 31, -1, -1, + -1, 35, 36, 37, 38, -1, -1, -1, -1, -1, + 44, 45, -1, 47, -1, 49, -1, -1, 52, 53, + -1, -1, -1, 57, -1, 59, 3, 4, -1, -1, + 7, 8, 9, -1, -1, 12, 13, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4, -1, -1, 7, + 8, 9, -1, -1, 12, 32, 33, 34, 35, 36, + 37, 38, 39, -1, 41, 42, 43, 44, 45, -1, + -1, -1, 49, -1, -1, 52, 53, 35, 36, 3, + 4, -1, 59, 7, 8, 9, 44, 45, 12, -1, + -1, 49, -1, -1, 52, 53, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 32, 33, + 34, 35, 36, 37, 38, 39, -1, 41, 42, 43, + 44, 45, -1, -1, 1, 49, 3, 4, 52, 53, + 7, 8, -1, -1, -1, 59, -1, -1, 15, 16, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3, 4, 30, 31, 7, 8, -1, 35, 36, + 37, 38, -1, -1, -1, -1, -1, 44, 45, -1, + 47, -1, 49, -1, -1, 52, 53, -1, -1, 31, + 57, -1, -1, 35, 36, 37, 38, -1, -1, -1, + -1, -1, 44, 45, -1, 47, 1, 49, 3, 4, + 52, 53, 7, 8, -1, -1, -1, 59, -1, -1, + -1, -1, -1, -1, -1, -1, 1, -1, 3, 4, + -1, -1, 7, 8, -1, -1, 31, -1, -1, -1, + 35, 36, 37, 38, -1, -1, -1, -1, -1, 44, + 45, -1, 47, -1, 49, -1, 31, 52, 53, 54, + 35, 36, 37, 38, -1, -1, -1, -1, -1, 44, + 45, -1, 47, 1, 49, 3, 4, 52, 53, 7, + 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1, -1, 3, 4, -1, -1, 7, 8, + -1, -1, -1, 31, -1, -1, -1, 35, 36, 37, + 38, -1, -1, -1, -1, -1, 44, 45, -1, 47, + -1, 49, 31, -1, 52, 53, 35, 36, 37, 38, + -1, -1, -1, -1, -1, 44, 45, -1, 47, -1, + 49, 3, 4, 52, 53, 7, 8, 9, -1, -1, + 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 32, 33, 34, 35, 36, 37, 38, 39, -1, 41, + 42, 43, 44, 45, -1, -1, -1, 49, -1, -1, + 52, 53, 54, 3, 4, -1, -1, 7, 8, 9, + -1, -1, 12, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4, -1, -1, 7, + 8, 9, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, -1, -1, -1, 49, + 3, 4, 52, 53, 7, 8, 9, 35, 36, 12, + -1, -1, -1, 41, 42, 43, 44, 45, -1, -1, + -1, 49, -1, -1, 52, 53, -1, -1, -1, 32, + 33, 34, 35, 36, 37, 38, 39, -1, 41, 42, + 43, 44, 45, -1, -1, -1, 49, 3, 4, 52, + 53, 7, 8, 9, -1, -1, 12, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, + 4, -1, -1, 7, 8, 9, 32, 33, 12, 35, + 36, 37, 38, -1, -1, 41, 42, 43, 44, 45, + -1, -1, -1, 49, -1, -1, 52, 53, 32, 33, + 34, 35, 36, 37, 38, 39, 40, -1, 3, 4, + 44, 45, 7, 8, 9, 49, -1, 12, 52, 53, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3, 4, -1, -1, 7, 8, 9, 32, -1, 12, + 35, 36, 37, 38, -1, -1, 41, 42, 43, 44, + 45, -1, -1, -1, 49, -1, -1, 52, 53, 32, + 33, 34, 35, 36, 37, 38, 39, -1, -1, 3, + 4, 44, 45, 7, 8, 9, 49, -1, 12, 52, + 53, -1, -1, -1, -1, -1, -1, -1, 3, 4, + -1, -1, 7, 8, 9, -1, -1, 12, 32, 33, + -1, 35, 36, 37, 38, -1, -1, -1, 3, 4, + 44, 45, 7, 8, -1, 49, -1, 32, 52, 53, + 35, 36, 37, 38, -1, -1, -1, 3, 4, 44, + 45, 7, 8, -1, 49, -1, 31, 52, 53, -1, + 35, 36, 37, 38, -1, -1, -1, -1, -1, 44, + 45, -1, 47, -1, 49, 31, -1, 52, 53, 35, + 36, 37, 38, -1, -1, -1, -1, -1, 44, 45, + -1, 47, -1, 49, 3, 4, 52, 53, 7, 8, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3, 4, -1, -1, 7, 8, -1, + -1, -1, 31, -1, -1, -1, 35, 36, 37, 38, + -1, -1, -1, -1, -1, 44, 45, -1, 47, -1, + 49, -1, -1, 52, 53, 35, 36, 37, 38, -1, + -1, -1, -1, -1, 44, 45, -1, 47, -1, 49, + 3, 4, 52, 53, 7, 8, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4, -1, -1, 7, + 8, 9, -1, -1, 12, -1, -1, -1, -1, -1, + -1, -1, 35, 36, 37, 38, -1, -1, -1, -1, + -1, 44, 45, -1, -1, -1, 49, 35, 36, 52, + 53, -1, -1, 41, 42, 43, 44, 45, -1, -1, + -1, 49, -1, -1, 52, 53 +}; +/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ +#line 3 "/local/lib/bison.simple" + +/* Skeleton output parser for bison, + Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + + +#ifndef alloca +#ifdef __GNUC__ +#define alloca __builtin_alloca +#else /* not GNU C. */ +#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) +#include <alloca.h> +#else /* not sparc */ +#if defined (MSDOS) && !defined (__TURBOC__) +#include <malloc.h> +#else /* not MSDOS, or __TURBOC__ */ +#if defined(_AIX) +#include <malloc.h> + #pragma alloca +#endif /* not _AIX */ +#endif /* not MSDOS, or __TURBOC__ */ +#endif /* not sparc. */ +#endif /* not GNU C. */ +#endif /* alloca not defined. */ + +/* This is the parser code that is written into each bison parser + when the %semantic_parser declaration is not specified in the grammar. + It was written by Richard Stallman by simplifying the hairy parser + used when %semantic_parser is specified. */ + +/* Note: there must be only one dollar sign in this file. + It is replaced by the list of actions, each action + as one case of the switch. */ + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY -2 +#define YYEOF 0 +#define YYACCEPT return(0) +#define YYABORT return(1) +#define YYERROR goto yyerrlab1 +/* Like YYERROR except do call yyerror. + This remains here temporarily to ease the + transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ +#define YYFAIL goto yyerrlab +#define YYRECOVERING() (!!yyerrstatus) +#define YYBACKUP(token, value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { yychar = (token), yylval = (value); \ + yychar1 = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ + { yyerror ("syntax error: cannot back up"); YYERROR; } \ +while (0) + +#define YYTERROR 1 +#define YYERRCODE 256 + +#ifndef YYPURE +#define YYLEX yylex() +#endif + +#ifdef YYPURE +#ifdef YYLSP_NEEDED +#define YYLEX yylex(&yylval, &yylloc) +#else +#define YYLEX yylex(&yylval) +#endif +#endif + +/* If nonreentrant, generate the variables here */ + +#ifndef YYPURE + +int yychar; /* the lookahead symbol */ +YYSTYPE yylval; /* the semantic value of the */ + /* lookahead symbol */ + +#ifdef YYLSP_NEEDED +YYLTYPE yylloc; /* location data for the lookahead */ + /* symbol */ +#endif + +int yynerrs; /* number of parse errors so far */ +#endif /* not YYPURE */ + +#if YYDEBUG != 0 +int yydebug; /* nonzero means print parse trace */ +/* Since this is uninitialized, it does not stop multiple parsers + from coexisting. */ +#endif + +/* YYINITDEPTH indicates the initial size of the parser's stacks */ + +#ifndef YYINITDEPTH +#define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH is the maximum size the stacks can grow to + (effective only if the built-in stack extension method is used). */ + +#if YYMAXDEPTH == 0 +#undef YYMAXDEPTH +#endif + #ifndef YYMAXDEPTH -#define YYMAXDEPTH 150 +#define YYMAXDEPTH 10000 +#endif + +#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ +#define __yy_bcopy(FROM,TO,COUNT) __builtin_memcpy(TO,FROM,COUNT) +#else /* not GNU C or C++ */ +#ifndef __cplusplus + +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__yy_bcopy (from, to, count) + char *from; + char *to; + int count; +{ + register char *f = from; + register char *t = to; + register int i = count; + + while (i-- > 0) + *t++ = *f++; +} + +#else /* __cplusplus */ + +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__yy_bcopy (char *from, char *to, int count) +{ + register char *f = from; + register char *t = to; + register int i = count; + + while (i-- > 0) + *t++ = *f++; +} + +#endif +#endif + +#line 169 "/local/lib/bison.simple" +int +yyparse() +{ + register int yystate; + register int yyn; + register short *yyssp; + register YYSTYPE *yyvsp; + int yyerrstatus; /* number of tokens to shift before error messages enabled */ + int yychar1; /* lookahead token as an internal (translated) token number */ + + short yyssa[YYINITDEPTH]; /* the state stack */ + YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ + + short *yyss = yyssa; /* refer to the stacks thru separate pointers */ + YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ + +#ifdef YYLSP_NEEDED + YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp; + +#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) +#else +#define YYPOPSTACK (yyvsp--, yyssp--) +#endif + + int yystacksize = YYINITDEPTH; + +#ifdef YYPURE + int yychar; + YYSTYPE yylval; + int yynerrs; +#ifdef YYLSP_NEEDED + YYLTYPE yylloc; +#endif +#endif + + YYSTYPE yyval; /* the variable used to return */ + /* semantic values from the action */ + /* routines */ + + int yylen; + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Starting parse\n"); +#endif + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss - 1; + yyvsp = yyvs; +#ifdef YYLSP_NEEDED + yylsp = yyls; +#endif + +/* Push a new state, which is found in yystate . */ +/* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. */ +yynewstate: + + *++yyssp = yystate; + + if (yyssp >= yyss + yystacksize - 1) + { + /* Give user a chance to reallocate the stack */ + /* Use copies of these so that the &'s don't force the real ones into memory. */ + YYSTYPE *yyvs1 = yyvs; + short *yyss1 = yyss; +#ifdef YYLSP_NEEDED + YYLTYPE *yyls1 = yyls; +#endif + + /* Get the current used size of the three stacks, in elements. */ + int size = yyssp - yyss + 1; + +#ifdef yyoverflow + /* Each stack pointer address is followed by the size of + the data in use in that stack, in bytes. */ + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), +#ifdef YYLSP_NEEDED + &yyls1, size * sizeof (*yylsp), +#endif + &yystacksize); + + yyss = yyss1; yyvs = yyvs1; +#ifdef YYLSP_NEEDED + yyls = yyls1; +#endif +#else /* no yyoverflow */ + /* Extend the stack our own way. */ + if (yystacksize >= YYMAXDEPTH) + { + yyerror("parser stack overflow"); + return 2; + } + yystacksize *= 2; + if (yystacksize > YYMAXDEPTH) + yystacksize = YYMAXDEPTH; + yyss = (short *) alloca (yystacksize * sizeof (*yyssp)); + __yy_bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp)); + yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp)); + __yy_bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp)); +#ifdef YYLSP_NEEDED + yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp)); + __yy_bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp)); +#endif +#endif /* no yyoverflow */ + + yyssp = yyss + size - 1; + yyvsp = yyvs + size - 1; +#ifdef YYLSP_NEEDED + yylsp = yyls + size - 1; +#endif + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Stack size increased to %d\n", yystacksize); +#endif + + if (yyssp >= yyss + yystacksize - 1) + YYABORT; + } + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Entering state %d\n", yystate); +#endif + + goto yybackup; + yybackup: + +/* Do appropriate processing given the current state. */ +/* Read a lookahead token if we need one and don't already have one. */ +/* yyresume: */ + + /* First try to decide what to do without reference to lookahead token. */ + + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* yychar is either YYEMPTY or YYEOF + or a valid token in external form. */ + + if (yychar == YYEMPTY) + { +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Reading a token: "); +#endif + yychar = YYLEX; + } + + /* Convert token to internal form (in yychar1) for indexing tables with */ + + if (yychar <= 0) /* This means end of input. */ + { + yychar1 = 0; + yychar = YYEOF; /* Don't call YYLEX any more */ + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Now at end of input.\n"); +#endif + } + else + { + yychar1 = YYTRANSLATE(yychar); + +#if YYDEBUG != 0 + if (yydebug) + { + fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); + /* Give the individual parser a way to print the precise meaning + of a token, for further debugging info. */ +#ifdef YYPRINT + YYPRINT (stderr, yychar, yylval); +#endif + fprintf (stderr, ")\n"); + } +#endif + } + + yyn += yychar1; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) + goto yydefault; + + yyn = yytable[yyn]; + + /* yyn is what to do for this token type in this state. + Negative => reduce, -yyn is rule number. + Positive => shift, yyn is new state. + New state is final state => don't bother to shift, + just return success. + 0, or most negative number => error. */ + + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + else if (yyn == 0) + goto yyerrlab; + + if (yyn == YYFINAL) + YYACCEPT; + + /* Shift the lookahead token. */ + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); +#endif + + /* Discard the token being shifted unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + *++yyvsp = yylval; +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif + + /* count tokens shifted since error; after three, turn off error status. */ + if (yyerrstatus) yyerrstatus--; + + yystate = yyn; + goto yynewstate; + +/* Do the default action for the current state. */ +yydefault: + + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + +/* Do a reduction. yyn is the number of a rule to reduce with. */ +yyreduce: + yylen = yyr2[yyn]; + yyval = yyvsp[1-yylen]; /* implement default value of the action */ + +#if YYDEBUG != 0 + if (yydebug) + { + int i; + + fprintf (stderr, "Reducing via rule %d (line %d), ", + yyn, yyrline[yyn]); + + /* Print the symbols being reduced, and their result. */ + for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) + fprintf (stderr, "%s ", yytname[yyrhs[i]]); + fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); + } +#endif + + + switch (yyn) { + +case 1: +#line 134 "awk.y" +{ expression_value = yyvsp[-1].nodeval; ; + break;} +case 2: +#line 139 "awk.y" +{ + if (yyvsp[0].nodeval != NULL) + yyval.nodeval = yyvsp[0].nodeval; + else + yyval.nodeval = NULL; + yyerrok; + ; + break;} +case 3: +#line 148 "awk.y" +{ + if (yyvsp[0].nodeval == NULL) + yyval.nodeval = yyvsp[-1].nodeval; + else if (yyvsp[-1].nodeval == NULL) + yyval.nodeval = yyvsp[0].nodeval; + else { + if (yyvsp[-1].nodeval->type != Node_rule_list) + yyvsp[-1].nodeval = node(yyvsp[-1].nodeval, Node_rule_list, + (NODE*)NULL); + yyval.nodeval = append_right (yyvsp[-1].nodeval, + node(yyvsp[0].nodeval, Node_rule_list,(NODE *) NULL)); + } + yyerrok; + ; + break;} +case 4: +#line 162 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 5: +#line 163 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 6: +#line 167 "awk.y" +{ io_allowed = 0; ; + break;} +case 7: +#line 169 "awk.y" +{ + if (begin_block) { + if (begin_block->type != Node_rule_list) + begin_block = node(begin_block, Node_rule_list, + (NODE *)NULL); + (void) append_right (begin_block, node( + node((NODE *)NULL, Node_rule_node, yyvsp[0].nodeval), + Node_rule_list, (NODE *)NULL) ); + } else + begin_block = node((NODE *)NULL, Node_rule_node, yyvsp[0].nodeval); + yyval.nodeval = NULL; + io_allowed = 1; + yyerrok; + ; + break;} +case 8: +#line 183 "awk.y" +{ io_allowed = 0; ; + break;} +case 9: +#line 185 "awk.y" +{ + if (end_block) { + if (end_block->type != Node_rule_list) + end_block = node(end_block, Node_rule_list, + (NODE *)NULL); + (void) append_right (end_block, node( + node((NODE *)NULL, Node_rule_node, yyvsp[0].nodeval), + Node_rule_list, (NODE *)NULL)); + } else + end_block = node((NODE *)NULL, Node_rule_node, yyvsp[0].nodeval); + yyval.nodeval = NULL; + io_allowed = 1; + yyerrok; + ; + break;} +case 10: +#line 200 "awk.y" +{ + warning("BEGIN blocks must have an action part"); + errcount++; + yyerrok; + ; + break;} +case 11: +#line 206 "awk.y" +{ + warning("END blocks must have an action part"); + errcount++; + yyerrok; + ; + break;} +case 12: +#line 212 "awk.y" +{ yyval.nodeval = node (yyvsp[-1].nodeval, Node_rule_node, yyvsp[0].nodeval); yyerrok; ; + break;} +case 13: +#line 214 "awk.y" +{ yyval.nodeval = node ((NODE *)NULL, Node_rule_node, yyvsp[0].nodeval); yyerrok; ; + break;} +case 14: +#line 216 "awk.y" +{ + yyval.nodeval = node (yyvsp[-1].nodeval, + Node_rule_node, + node(node(node(make_number(0.0), + Node_field_spec, + (NODE *) NULL), + Node_expression_list, + (NODE *) NULL), + Node_K_print, + (NODE *) NULL)); + yyerrok; + ; + break;} +case 15: +#line 229 "awk.y" +{ + func_install(yyvsp[-1].nodeval, yyvsp[0].nodeval); + yyval.nodeval = NULL; + yyerrok; + ; + break;} +case 16: +#line 238 "awk.y" +{ yyval.sval = yyvsp[0].sval; ; + break;} +case 17: +#line 240 "awk.y" +{ yyval.sval = yyvsp[0].sval; ; + break;} +case 18: +#line 242 "awk.y" +{ + yyerror("%s() is a built-in function, it cannot be redefined", + tokstart); + errcount++; + /* yyerrok; */ + ; + break;} +case 21: +#line 257 "awk.y" +{ + param_counter = 0; + ; + break;} +case 22: +#line 261 "awk.y" +{ + yyval.nodeval = append_right(make_param(yyvsp[-4].sval), yyvsp[-2].nodeval); + can_return = 1; + ; + break;} +case 23: +#line 269 "awk.y" +{ + yyval.nodeval = yyvsp[-2].nodeval; + can_return = 0; + ; + break;} +case 24: +#line 278 "awk.y" +{ yyval.nodeval = yyvsp[0].nodeval; ; + break;} +case 25: +#line 280 "awk.y" +{ yyval.nodeval = mkrangenode ( node(yyvsp[-2].nodeval, Node_cond_pair, yyvsp[0].nodeval) ); ; + break;} +case 26: +#line 289 "awk.y" +{ ++want_regexp; ; + break;} +case 27: +#line 291 "awk.y" +{ + NODE *n; + int len; + + getnode(n); + n->type = Node_regex; + len = strlen(yyvsp[-1].sval); + n->re_exp = make_string(yyvsp[-1].sval, len); + n->re_reg = make_regexp(yyvsp[-1].sval, len, 0, 1); + n->re_text = NULL; + n->re_flags = CONST; + n->re_cnt = 1; + yyval.nodeval = n; + ; + break;} +case 28: +#line 309 "awk.y" +{ yyval.nodeval = yyvsp[-3].nodeval ; ; + break;} +case 29: +#line 311 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 30: +#line 316 "awk.y" +{ yyval.nodeval = yyvsp[0].nodeval; ; + break;} +case 31: +#line 318 "awk.y" +{ + if (yyvsp[-1].nodeval == NULL || yyvsp[-1].nodeval->type != Node_statement_list) + yyvsp[-1].nodeval = node(yyvsp[-1].nodeval, Node_statement_list,(NODE *)NULL); + yyval.nodeval = append_right(yyvsp[-1].nodeval, + node( yyvsp[0].nodeval, Node_statement_list, (NODE *)NULL)); + yyerrok; + ; + break;} +case 32: +#line 326 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 33: +#line 328 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 36: +#line 338 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 37: +#line 340 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 38: +#line 342 "awk.y" +{ yyval.nodeval = yyvsp[-1].nodeval; ; + break;} +case 39: +#line 344 "awk.y" +{ yyval.nodeval = yyvsp[0].nodeval; ; + break;} +case 40: +#line 346 "awk.y" +{ yyval.nodeval = node (yyvsp[-3].nodeval, Node_K_while, yyvsp[0].nodeval); ; + break;} +case 41: +#line 348 "awk.y" +{ yyval.nodeval = node (yyvsp[-2].nodeval, Node_K_do, yyvsp[-5].nodeval); ; + break;} +case 42: +#line 350 "awk.y" +{ + yyval.nodeval = node (yyvsp[0].nodeval, Node_K_arrayfor, make_for_loop(variable(yyvsp[-5].sval,1), + (NODE *)NULL, variable(yyvsp[-3].sval,1))); + ; + break;} +case 43: +#line 355 "awk.y" +{ + yyval.nodeval = node(yyvsp[0].nodeval, Node_K_for, (NODE *)make_for_loop(yyvsp[-7].nodeval, yyvsp[-5].nodeval, yyvsp[-3].nodeval)); + ; + break;} +case 44: +#line 359 "awk.y" +{ + yyval.nodeval = node (yyvsp[0].nodeval, Node_K_for, + (NODE *)make_for_loop(yyvsp[-6].nodeval, (NODE *)NULL, yyvsp[-3].nodeval)); + ; + break;} +case 45: +#line 365 "awk.y" +{ yyval.nodeval = node ((NODE *)NULL, Node_K_break, (NODE *)NULL); ; + break;} +case 46: +#line 368 "awk.y" +{ yyval.nodeval = node ((NODE *)NULL, Node_K_continue, (NODE *)NULL); ; + break;} +case 47: +#line 370 "awk.y" +{ yyval.nodeval = node (yyvsp[-3].nodeval, yyvsp[-5].nodetypeval, yyvsp[-1].nodeval); ; + break;} +case 48: +#line 372 "awk.y" +{ + if (yyvsp[-3].nodetypeval == Node_K_print && yyvsp[-2].nodeval == NULL) + yyvsp[-2].nodeval = node(node(make_number(0.0), + Node_field_spec, + (NODE *) NULL), + Node_expression_list, + (NODE *) NULL); + + yyval.nodeval = node (yyvsp[-2].nodeval, yyvsp[-3].nodetypeval, yyvsp[-1].nodeval); + ; + break;} +case 49: +#line 383 "awk.y" +{ NODETYPE type; + + if (yyvsp[-1].nodeval && yyvsp[-1].nodeval == lookup("file")) { + if (do_lint) + warning("`next file' is a gawk extension"); + else if (do_unix || do_posix) + yyerror("`next file' is a gawk extension"); + else if (! io_allowed) + yyerror("`next file' used in BEGIN or END action"); + type = Node_K_nextfile; + } else { + if (! io_allowed) + yyerror("next used in BEGIN or END action"); + type = Node_K_next; + } + yyval.nodeval = node ((NODE *)NULL, type, (NODE *)NULL); + ; + break;} +case 50: +#line 401 "awk.y" +{ yyval.nodeval = node (yyvsp[-1].nodeval, Node_K_exit, (NODE *)NULL); ; + break;} +case 51: +#line 403 "awk.y" +{ if (! can_return) yyerror("return used outside function context"); ; + break;} +case 52: +#line 405 "awk.y" +{ yyval.nodeval = node (yyvsp[-1].nodeval, Node_K_return, (NODE *)NULL); ; + break;} +case 53: +#line 407 "awk.y" +{ yyval.nodeval = node (variable(yyvsp[-4].sval,1), Node_K_delete, yyvsp[-2].nodeval); ; + break;} +case 54: +#line 409 "awk.y" +{ yyval.nodeval = yyvsp[-1].nodeval; ; + break;} +case 55: +#line 414 "awk.y" +{ yyval.nodetypeval = yyvsp[0].nodetypeval; ; + break;} +case 56: +#line 416 "awk.y" +{ yyval.nodetypeval = yyvsp[0].nodetypeval; ; + break;} +case 57: +#line 421 "awk.y" +{ + yyval.nodeval = node(yyvsp[-3].nodeval, Node_K_if, + node(yyvsp[0].nodeval, Node_if_branches, (NODE *)NULL)); + ; + break;} +case 58: +#line 427 "awk.y" +{ yyval.nodeval = node (yyvsp[-6].nodeval, Node_K_if, + node (yyvsp[-3].nodeval, Node_if_branches, yyvsp[0].nodeval)); ; + break;} +case 59: +#line 433 "awk.y" +{ want_assign = 0; ; + break;} +case 63: +#line 444 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 64: +#line 446 "awk.y" +{ yyval.nodeval = node (yyvsp[0].nodeval, Node_redirect_input, (NODE *)NULL); ; + break;} +case 65: +#line 451 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 66: +#line 453 "awk.y" +{ yyval.nodeval = node (yyvsp[0].nodeval, Node_redirect_output, (NODE *)NULL); ; + break;} +case 67: +#line 455 "awk.y" +{ yyval.nodeval = node (yyvsp[0].nodeval, Node_redirect_append, (NODE *)NULL); ; + break;} +case 68: +#line 457 "awk.y" +{ yyval.nodeval = node (yyvsp[0].nodeval, Node_redirect_pipe, (NODE *)NULL); ; + break;} +case 69: +#line 462 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 70: +#line 464 "awk.y" +{ yyval.nodeval = yyvsp[0].nodeval; ; + break;} +case 71: +#line 469 "awk.y" +{ yyval.nodeval = make_param(yyvsp[0].sval); ; + break;} +case 72: +#line 471 "awk.y" +{ yyval.nodeval = append_right(yyvsp[-2].nodeval, make_param(yyvsp[0].sval)); yyerrok; ; + break;} +case 73: +#line 473 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 74: +#line 475 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 75: +#line 477 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 76: +#line 483 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 77: +#line 485 "awk.y" +{ yyval.nodeval = yyvsp[0].nodeval; ; + break;} +case 78: +#line 490 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 79: +#line 492 "awk.y" +{ yyval.nodeval = yyvsp[0].nodeval; ; + break;} +case 80: +#line 497 "awk.y" +{ yyval.nodeval = node (yyvsp[0].nodeval, Node_expression_list, (NODE *)NULL); ; + break;} +case 81: +#line 499 "awk.y" +{ + yyval.nodeval = append_right(yyvsp[-2].nodeval, + node( yyvsp[0].nodeval, Node_expression_list, (NODE *)NULL)); + yyerrok; + ; + break;} +case 82: +#line 505 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 83: +#line 507 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 84: +#line 509 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 85: +#line 511 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 86: +#line 516 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 87: +#line 518 "awk.y" +{ yyval.nodeval = yyvsp[0].nodeval; ; + break;} +case 88: +#line 523 "awk.y" +{ yyval.nodeval = node (yyvsp[0].nodeval, Node_expression_list, (NODE *)NULL); ; + break;} +case 89: +#line 525 "awk.y" +{ + yyval.nodeval = append_right(yyvsp[-2].nodeval, + node( yyvsp[0].nodeval, Node_expression_list, (NODE *)NULL)); + yyerrok; + ; + break;} +case 90: +#line 531 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 91: +#line 533 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 92: +#line 535 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 93: +#line 537 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 94: +#line 542 "awk.y" +{ want_assign = 0; ; + break;} +case 95: +#line 544 "awk.y" +{ + if (do_lint && yyvsp[0].nodeval->type == Node_regex) + warning("Regular expression on left of assignment."); + yyval.nodeval = node (yyvsp[-3].nodeval, yyvsp[-2].nodetypeval, yyvsp[0].nodeval); + ; + break;} +case 96: +#line 550 "awk.y" +{ yyval.nodeval = node (variable(yyvsp[0].sval,1), Node_in_array, yyvsp[-3].nodeval); ; + break;} +case 97: +#line 552 "awk.y" +{ + yyval.nodeval = node (yyvsp[0].nodeval, Node_K_getline, + node (yyvsp[-3].nodeval, Node_redirect_pipein, (NODE *)NULL)); + ; + break;} +case 98: +#line 557 "awk.y" +{ + if (do_lint && ! io_allowed && yyvsp[0].nodeval == NULL) + warning("non-redirected getline undefined inside BEGIN or END action"); + yyval.nodeval = node (yyvsp[-1].nodeval, Node_K_getline, yyvsp[0].nodeval); + ; + break;} +case 99: +#line 563 "awk.y" +{ yyval.nodeval = node (yyvsp[-2].nodeval, Node_and, yyvsp[0].nodeval); ; + break;} +case 100: +#line 565 "awk.y" +{ yyval.nodeval = node (yyvsp[-2].nodeval, Node_or, yyvsp[0].nodeval); ; + break;} +case 101: +#line 567 "awk.y" +{ + if (yyvsp[-2].nodeval->type == Node_regex) + warning("Regular expression on left of MATCH operator."); + yyval.nodeval = node (yyvsp[-2].nodeval, yyvsp[-1].nodetypeval, mk_rexp(yyvsp[0].nodeval)); + ; + break;} +case 102: +#line 573 "awk.y" +{ yyval.nodeval = yyvsp[0].nodeval; ; + break;} +case 103: +#line 575 "awk.y" +{ + yyval.nodeval = node(node(make_number(0.0), + Node_field_spec, + (NODE *) NULL), + Node_nomatch, + yyvsp[0].nodeval); + ; + break;} +case 104: +#line 583 "awk.y" +{ yyval.nodeval = node (variable(yyvsp[0].sval,1), Node_in_array, yyvsp[-2].nodeval); ; + break;} +case 105: +#line 585 "awk.y" +{ + if (do_lint && yyvsp[0].nodeval->type == Node_regex) + warning("Regular expression on left of comparison."); + yyval.nodeval = node (yyvsp[-2].nodeval, yyvsp[-1].nodetypeval, yyvsp[0].nodeval); + ; + break;} +case 106: +#line 591 "awk.y" +{ yyval.nodeval = node (yyvsp[-2].nodeval, Node_less, yyvsp[0].nodeval); ; + break;} +case 107: +#line 593 "awk.y" +{ yyval.nodeval = node (yyvsp[-2].nodeval, Node_greater, yyvsp[0].nodeval); ; + break;} +case 108: +#line 595 "awk.y" +{ yyval.nodeval = node(yyvsp[-4].nodeval, Node_cond_exp, node(yyvsp[-2].nodeval, Node_if_branches, yyvsp[0].nodeval));; + break;} +case 109: +#line 597 "awk.y" +{ yyval.nodeval = yyvsp[0].nodeval; ; + break;} +case 110: +#line 599 "awk.y" +{ yyval.nodeval = node (yyvsp[-1].nodeval, Node_concat, yyvsp[0].nodeval); ; + break;} +case 111: +#line 604 "awk.y" +{ want_assign = 0; ; + break;} +case 112: +#line 606 "awk.y" +{ yyval.nodeval = node (yyvsp[-3].nodeval, yyvsp[-2].nodetypeval, yyvsp[0].nodeval); ; + break;} +case 113: +#line 608 "awk.y" +{ yyval.nodeval = node (yyvsp[-2].nodeval, Node_and, yyvsp[0].nodeval); ; + break;} +case 114: +#line 610 "awk.y" +{ yyval.nodeval = node (yyvsp[-2].nodeval, Node_or, yyvsp[0].nodeval); ; + break;} +case 115: +#line 612 "awk.y" +{ + if (do_lint && ! io_allowed && yyvsp[0].nodeval == NULL) + warning("non-redirected getline undefined inside BEGIN or END action"); + yyval.nodeval = node (yyvsp[-1].nodeval, Node_K_getline, yyvsp[0].nodeval); + ; + break;} +case 116: +#line 618 "awk.y" +{ yyval.nodeval = yyvsp[0].nodeval; ; + break;} +case 117: +#line 620 "awk.y" +{ yyval.nodeval = node((NODE *) NULL, Node_nomatch, yyvsp[0].nodeval); ; + break;} +case 118: +#line 622 "awk.y" +{ yyval.nodeval = node (yyvsp[-2].nodeval, yyvsp[-1].nodetypeval, mk_rexp(yyvsp[0].nodeval)); ; + break;} +case 119: +#line 624 "awk.y" +{ yyval.nodeval = node (variable(yyvsp[0].sval,1), Node_in_array, yyvsp[-2].nodeval); ; + break;} +case 120: +#line 626 "awk.y" +{ yyval.nodeval = node (yyvsp[-2].nodeval, yyvsp[-1].nodetypeval, yyvsp[0].nodeval); ; + break;} +case 121: +#line 628 "awk.y" +{ yyval.nodeval = node(yyvsp[-4].nodeval, Node_cond_exp, node(yyvsp[-2].nodeval, Node_if_branches, yyvsp[0].nodeval));; + break;} +case 122: +#line 630 "awk.y" +{ yyval.nodeval = yyvsp[0].nodeval; ; + break;} +case 123: +#line 632 "awk.y" +{ yyval.nodeval = node (yyvsp[-1].nodeval, Node_concat, yyvsp[0].nodeval); ; + break;} +case 125: +#line 639 "awk.y" +{ yyval.nodeval = node (yyvsp[-2].nodeval, Node_exp, yyvsp[0].nodeval); ; + break;} +case 126: +#line 641 "awk.y" +{ yyval.nodeval = node (yyvsp[-2].nodeval, Node_times, yyvsp[0].nodeval); ; + break;} +case 127: +#line 643 "awk.y" +{ yyval.nodeval = node (yyvsp[-2].nodeval, Node_quotient, yyvsp[0].nodeval); ; + break;} +case 128: +#line 645 "awk.y" +{ yyval.nodeval = node (yyvsp[-2].nodeval, Node_mod, yyvsp[0].nodeval); ; + break;} +case 129: +#line 647 "awk.y" +{ yyval.nodeval = node (yyvsp[-2].nodeval, Node_plus, yyvsp[0].nodeval); ; + break;} +case 130: +#line 649 "awk.y" +{ yyval.nodeval = node (yyvsp[-2].nodeval, Node_minus, yyvsp[0].nodeval); ; + break;} +case 131: +#line 651 "awk.y" +{ yyval.nodeval = node (yyvsp[-1].nodeval, Node_postincrement, (NODE *)NULL); ; + break;} +case 132: +#line 653 "awk.y" +{ yyval.nodeval = node (yyvsp[-1].nodeval, Node_postdecrement, (NODE *)NULL); ; + break;} +case 133: +#line 658 "awk.y" +{ yyval.nodeval = node (yyvsp[0].nodeval, Node_not,(NODE *) NULL); ; + break;} +case 134: +#line 660 "awk.y" +{ yyval.nodeval = yyvsp[-1].nodeval; ; + break;} +case 135: +#line 663 "awk.y" +{ yyval.nodeval = snode (yyvsp[-1].nodeval, Node_builtin, (int) yyvsp[-3].lval); ; + break;} +case 136: +#line 665 "awk.y" +{ yyval.nodeval = snode (yyvsp[-1].nodeval, Node_builtin, (int) yyvsp[-3].lval); ; + break;} +case 137: +#line 667 "awk.y" +{ + if (do_lint) + warning("call of `length' without parentheses is not portable"); + yyval.nodeval = snode ((NODE *)NULL, Node_builtin, (int) yyvsp[0].lval); + if (do_posix) + warning( "call of `length' without parentheses is deprecated by POSIX"); + ; + break;} +case 138: +#line 675 "awk.y" +{ + yyval.nodeval = node (yyvsp[-1].nodeval, Node_func_call, make_string(yyvsp[-3].sval, strlen(yyvsp[-3].sval))); + ; + break;} +case 140: +#line 680 "awk.y" +{ yyval.nodeval = node (yyvsp[0].nodeval, Node_preincrement, (NODE *)NULL); ; + break;} +case 141: +#line 682 "awk.y" +{ yyval.nodeval = node (yyvsp[0].nodeval, Node_predecrement, (NODE *)NULL); ; + break;} +case 142: +#line 684 "awk.y" +{ yyval.nodeval = yyvsp[0].nodeval; ; + break;} +case 143: +#line 686 "awk.y" +{ yyval.nodeval = yyvsp[0].nodeval; ; + break;} +case 144: +#line 689 "awk.y" +{ if (yyvsp[0].nodeval->type == Node_val) { + yyvsp[0].nodeval->numbr = -(force_number(yyvsp[0].nodeval)); + yyval.nodeval = yyvsp[0].nodeval; + } else + yyval.nodeval = node (yyvsp[0].nodeval, Node_unary_minus, (NODE *)NULL); + ; + break;} +case 145: +#line 696 "awk.y" +{ yyval.nodeval = yyvsp[0].nodeval; ; + break;} +case 146: +#line 701 "awk.y" +{ yyval.nodeval = NULL; ; + break;} +case 147: +#line 703 "awk.y" +{ yyval.nodeval = yyvsp[0].nodeval; ; + break;} +case 148: +#line 708 "awk.y" +{ yyval.nodeval = variable(yyvsp[0].sval,1); ; + break;} +case 149: +#line 710 "awk.y" +{ + if (yyvsp[-1].nodeval->rnode == NULL) { + yyval.nodeval = node (variable(yyvsp[-3].sval,1), Node_subscript, yyvsp[-1].nodeval->lnode); + freenode(yyvsp[-1].nodeval); + } else + yyval.nodeval = node (variable(yyvsp[-3].sval,1), Node_subscript, yyvsp[-1].nodeval); + ; + break;} +case 150: +#line 718 "awk.y" +{ yyval.nodeval = node (yyvsp[0].nodeval, Node_field_spec, (NODE *)NULL); ; + break;} +case 152: +#line 726 "awk.y" +{ yyerrok; ; + break;} +case 153: +#line 730 "awk.y" +{ yyerrok; ; + break;} +case 156: +#line 739 "awk.y" +{ yyerrok; want_assign = 0; ; + break;} +case 157: +#line 742 "awk.y" +{ yyerrok; ; + break;} +} + /* the action file gets copied in in place of this dollarsign */ +#line 442 "/local/lib/bison.simple" + + yyvsp -= yylen; + yyssp -= yylen; +#ifdef YYLSP_NEEDED + yylsp -= yylen; +#endif + +#if YYDEBUG != 0 + if (yydebug) + { + short *ssp1 = yyss - 1; + fprintf (stderr, "state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } #endif -YYSTYPE yylval, yyval; -# define YYERRCODE 256 -# line 751 "awk.y" + *++yyvsp = yyval; + +#ifdef YYLSP_NEEDED + yylsp++; + if (yylen == 0) + { + yylsp->first_line = yylloc.first_line; + yylsp->first_column = yylloc.first_column; + yylsp->last_line = (yylsp-1)->last_line; + yylsp->last_column = (yylsp-1)->last_column; + yylsp->text = 0; + } + else + { + yylsp->last_line = (yylsp+yylen-1)->last_line; + yylsp->last_column = (yylsp+yylen-1)->last_column; + } +#endif + + /* Now "shift" the result of the reduction. + Determine what state that goes to, + based on the state we popped back to + and the rule number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTBASE] + *yyssp; + if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTBASE]; + + goto yynewstate; + +yyerrlab: /* here on detecting error */ + + if (! yyerrstatus) + /* If not already recovering from an error, report this error. */ + { + ++yynerrs; + +#ifdef YYERROR_VERBOSE + yyn = yypact[yystate]; + + if (yyn > YYFLAG && yyn < YYLAST) + { + int size = 0; + char *msg; + int x, count; + + count = 0; + for (x = 0; x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + size += strlen(yytname[x]) + 15, count++; + msg = (char *) malloc(size + 15); + if (msg != 0) + { + strcpy(msg, "parse error"); + + if (count < 5) + { + count = 0; + for (x = 0; x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + { + strcat(msg, count == 0 ? ", expecting `" : " or `"); + strcat(msg, yytname[x]); + strcat(msg, "'"); + count++; + } + } + yyerror(msg); + free(msg); + } + else + yyerror ("parse error; also virtual memory exceeded"); + } + else +#endif /* YYERROR_VERBOSE */ + yyerror("parse error"); + } + + goto yyerrlab1; +yyerrlab1: /* here on error raised explicitly by an action */ + + if (yyerrstatus == 3) + { + /* if just tried and failed to reuse lookahead token after an error, discard it. */ + + /* return failure if at end of input */ + if (yychar == YYEOF) + YYABORT; + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); +#endif + + yychar = YYEMPTY; + } + + /* Else will try to reuse lookahead token + after shifting the error token. */ + + yyerrstatus = 3; /* Each real token shifted decrements this */ + + goto yyerrhandle; + +yyerrdefault: /* current state does not do anything special for the error token. */ + +#if 0 + /* This is wrong; only states that explicitly want error tokens + should shift them. */ + yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ + if (yyn) goto yydefault; +#endif + +yyerrpop: /* pop the current state because it cannot handle the error token */ + + if (yyssp == yyss) YYABORT; + yyvsp--; + yystate = *--yyssp; +#ifdef YYLSP_NEEDED + yylsp--; +#endif + +#if YYDEBUG != 0 + if (yydebug) + { + short *ssp1 = yyss - 1; + fprintf (stderr, "Error: state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif + +yyerrhandle: + + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yyerrdefault; + + yyn += YYTERROR; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) + goto yyerrdefault; + + yyn = yytable[yyn]; + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrpop; + yyn = -yyn; + goto yyreduce; + } + else if (yyn == 0) + goto yyerrpop; + + if (yyn == YYFINAL) + YYACCEPT; + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting error token, "); +#endif + + *++yyvsp = yylval; +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif + + yystate = yyn; + goto yynewstate; +} +#line 745 "awk.y" struct token { @@ -182,7 +2260,7 @@ yyerror(va_alist) va_dcl { va_list args; - char *mesg; + char *mesg = NULL; register char *bp, *cp; char *scan; char buf[120]; @@ -191,7 +2269,12 @@ va_dcl /* Find the current line in the input file */ if (lexptr) { if (!thisline) { - for (cp=lexeme; cp != lexptr_begin && *cp != '\n'; --cp) + cp = lexeme; + if (*cp == '\n') { + cp--; + mesg = "unexpected newline"; + } + for ( ; cp != lexptr_begin && *cp != '\n'; --cp) ; if (*cp == '\n') cp++; @@ -219,7 +2302,8 @@ va_dcl *bp++ = ' '; } va_start(args); - mesg = va_arg(args, char *); + if (mesg == NULL) + mesg = va_arg(args, char *); strcpy(bp, mesg); err("", buf, args); va_end(args); @@ -239,13 +2323,14 @@ get_src_buf() static int did_newline = 0; # define SLOP 128 /* enough space to hold most source lines */ - if (cmdline_src) { + if (nextfile > numfiles) + return NULL; + + if (srcfiles[nextfile].stype == CMDLINE) { if (len == 0) { - len = strlen(cmdline_src); - if (len == 0) - cmdline_src = NULL; + len = strlen(srcfiles[nextfile].val); sourceline = 1; - lexptr = lexptr_begin = cmdline_src; + lexptr = lexptr_begin = srcfiles[nextfile].val; lexend = lexptr + len; } else if (!did_newline && *(lexptr-1) != '\n') { /* @@ -271,15 +2356,22 @@ get_src_buf() lexeme = lexptr - offset; lexptr_begin = buf; lexend = lexptr + 1; - } else + } else { + len = 0; lexeme = lexptr = lexptr_begin = NULL; + } + if (lexptr == NULL && ++nextfile <= numfiles) + return get_src_buf(); return lexptr; } if (!samefile) { - source = srcfiles[nextfile]; + source = srcfiles[nextfile].val; if (source == NULL) { - if (buf) + if (buf) { free(buf); + buf = NULL; + } + len = 0; return lexeme = lexptr = lexptr_begin = NULL; } fd = pathopen(source); @@ -309,7 +2401,7 @@ get_src_buf() } linelen = lexptr - scan; if (linelen > SLOP) - len = SLOP; + linelen = SLOP; thisline = buf + SLOP - linelen; memcpy(thisline, scan, linelen); lexeme = buf + SLOP - offset; @@ -322,6 +2414,7 @@ get_src_buf() if (n == 0) { samefile = 0; nextfile++; + len = 0; return get_src_buf(); } lexptr = buf + SLOP; @@ -348,14 +2441,15 @@ tokexpand() return token; } -#ifdef DEBUG +#if DEBUG char nextc() { if (lexptr && lexptr < lexend) return *lexptr++; - if (get_src_buf()) + else if (get_src_buf()) return *lexptr++; - return '\0'; + else + return '\0'; } #else #define nextc() ((lexptr && lexptr < lexend) ? \ @@ -428,7 +2522,7 @@ retry: while ((c = nextc()) == ' ' || c == '\t') ; - lexeme = lexptr-1; + lexeme = lexptr ? lexptr - 1 : lexptr; thisline = NULL; token = tokstart; yylval.nodetypeval = Node_illegal; @@ -451,7 +2545,7 @@ retry: case '\\': #ifdef RELAXED_CONTINUATION - if (!strict) { /* strip trailing white-space and/or comment */ + if (!do_unix) { /* strip trailing white-space and/or comment */ while ((c = nextc()) == ' ' || c == '\t') continue; if (c == '#') while ((c = nextc()) != '\n') if (!c) break; @@ -815,7 +2909,7 @@ retry: warning("%s is not supported in old awk", tokentab[mid].operator); } - if ((strict && (tokentab[mid].flags & GAWKX)) + if ((do_unix && (tokentab[mid].flags & GAWKX)) || (do_posix && (tokentab[mid].flags & NOT_POSIX))) break; if (tokentab[mid].class == LEX_BUILTIN @@ -996,6 +3090,7 @@ NODE *value; hp->hlength = len; hp->hvalue = value; hp->hname = name; + hp->hvalue->vname = name; return hp->hvalue; } @@ -1148,1720 +3243,3 @@ NODE *exp; return n; } } -int yyexca[] ={ --1, 1, - 0, -1, - -2, 0, --1, 5, - 0, 61, - -2, 0, --1, 77, - 264, 78, - 267, 78, - 62, 78, - 124, 78, - 59, 78, - -2, 0, --1, 112, - 41, 86, - -2, 0, --1, 113, - 41, 86, - -2, 0, --1, 126, - 266, 0, - -2, 101, --1, 128, - 263, 0, - 60, 0, - 62, 0, - 124, 0, - -2, 105, --1, 129, - 263, 0, - 60, 0, - 62, 0, - 124, 0, - -2, 106, --1, 130, - 263, 0, - 60, 0, - 62, 0, - 124, 0, - -2, 107, --1, 149, - 264, 79, - 267, 79, - 62, 79, - 124, 79, - 59, 79, - -2, 0, --1, 188, - 41, 86, - -2, 0, --1, 190, - 41, 87, - -2, 0, --1, 224, - 41, 69, - -2, 0, --1, 253, - 266, 0, - -2, 118, --1, 255, - 263, 0, - -2, 120, --1, 263, - 41, 70, - -2, 0, - }; -# define YYNPROD 161 -# define YYLAST 1998 -int yyact[]={ - - 62, 216, 107, 13, 87, 229, 13, 88, 89, 166, - 165, 123, 240, 297, 4, 82, 45, 37, 91, 45, - 292, 265, 291, 264, 204, 88, 89, 187, 88, 89, - 270, 24, 171, 266, 254, 155, 63, 161, 24, 127, - 176, 65, 98, 168, 169, 36, 52, 35, 157, 25, - 63, 174, 82, 122, 63, 124, 125, 126, 22, 128, - 129, 130, 131, 93, 136, 82, 189, 203, 66, 63, - 100, 82, 103, 222, 107, 64, 177, 101, 63, 158, - 158, 45, 102, 22, 103, 276, 206, 63, 232, 101, - 104, 174, 105, 269, 102, 224, 188, 163, 16, 178, - 144, 142, 113, 112, 6, 11, 133, 26, 186, 111, - 39, 257, 140, 186, 186, 170, 48, 94, 231, 99, - 160, 110, 82, 109, 86, 46, 41, 121, 159, 100, - 114, 115, 108, 134, 99, 99, 167, 164, 77, 262, - 71, 100, 82, 198, 82, 158, 141, 118, 91, 148, - 149, 263, 120, 10, 27, 20, 5, 1, 24, 50, - 12, 158, 17, 192, 223, 36, 0, 35, 0, 25, - 0, 225, 226, 228, 0, 0, 152, 0, 0, 0, - 191, 45, 207, 197, 0, 0, 0, 193, 0, 186, - 134, 0, 0, 201, 0, 237, 99, 241, 195, 99, - 99, 99, 99, 99, 99, 245, 246, 247, 0, 221, - 134, 0, 199, 0, 0, 0, 190, 217, 0, 0, - 0, 0, 94, 186, 4, 20, 205, 4, 24, 0, - 0, 0, 17, 0, 90, 36, 0, 35, 0, 25, - 0, 0, 0, 271, 0, 22, 0, 68, 172, 152, - 0, 45, 94, 23, 99, 233, 0, 236, 258, 30, - 23, 0, 280, 33, 34, 213, 172, 0, 211, 82, - 282, 0, 20, 158, 0, 24, 99, 0, 82, 17, - 0, 172, 36, 0, 35, 158, 25, 153, 212, 209, - 172, 31, 32, 28, 29, 82, 279, 0, 45, 208, - 0, 0, 82, 82, 82, 0, 152, 152, 152, 152, - 152, 273, 152, 152, 152, 22, 20, 68, 0, 24, - 0, 285, 155, 17, 185, 24, 36, 0, 35, 98, - 25, 0, 36, 295, 35, 0, 25, 281, 0, 0, - 0, 0, 45, 0, 0, 0, 289, 152, 0, 152, - 152, 152, 152, 0, 152, 152, 152, 0, 0, 0, - 0, 0, 22, 299, 202, 0, 0, 0, 0, 0, - 304, 305, 306, 152, 152, 0, 0, 0, 135, 30, - 23, 0, 0, 33, 34, 0, 152, 0, 0, 0, - 0, 0, 0, 83, 0, 80, 81, 72, 73, 74, - 75, 76, 84, 85, 78, 79, 22, 18, 0, 0, - 0, 31, 32, 28, 29, 20, 0, 0, 24, 0, - 215, 0, 17, 0, 0, 36, 0, 35, 0, 25, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, - 0, 45, 59, 0, 60, 61, 0, 0, 67, 30, - 23, 0, 0, 33, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 83, 0, 80, 81, 72, 73, 74, - 75, 76, 84, 85, 78, 79, 0, 18, 0, 0, - 0, 31, 32, 28, 29, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 67, 30, 23, 150, 0, - 33, 34, 21, 0, 0, 0, 53, 0, 0, 0, - 83, 0, 80, 81, 72, 73, 74, 75, 76, 84, - 85, 78, 79, 96, 18, 0, 0, 0, 31, 32, - 28, 29, 0, 0, 0, 0, 0, 0, 116, 117, - 30, 23, 0, 0, 33, 34, 2, 23, 0, 0, - 33, 34, 38, 0, 83, 0, 80, 81, 72, 73, - 74, 75, 76, 84, 85, 78, 79, 0, 18, 106, - 0, 0, 31, 32, 28, 29, 0, 0, 31, 32, - 156, 0, 0, 0, 0, 20, 0, 0, 24, 0, - 0, 119, 17, 0, 0, 36, 0, 35, 0, 25, - 96, 0, 0, 179, 180, 181, 182, 183, 184, 0, - 132, 0, 59, 0, 60, 138, 139, 0, 0, 0, - 143, 0, 0, 0, 0, 0, 0, 0, 248, 250, - 251, 252, 253, 0, 255, 256, 0, 0, 0, 30, - 23, 0, 0, 33, 34, 58, 0, 0, 56, 4, - 0, 0, 20, 156, 0, 24, 0, 0, 96, 17, - 174, 0, 36, 0, 35, 0, 25, 18, 57, 54, - 55, 31, 32, 28, 29, 0, 53, 0, 275, 59, - 230, 60, 61, 196, 0, 0, 70, 0, 0, 14, - 0, 0, 14, 20, 0, 287, 24, 14, 0, 51, - 17, 0, 0, 36, 0, 35, 0, 25, 0, 0, - 156, 156, 156, 156, 156, 0, 156, 156, 156, 45, - 59, 0, 60, 61, 0, 0, 0, 0, 14, 0, - 0, 0, 0, 14, 0, 0, 0, 0, 20, 0, - 0, 24, 238, 53, 0, 17, 0, 0, 36, 0, - 35, 156, 25, 156, 156, 156, 156, 0, 156, 156, - 156, 0, 0, 194, 0, 59, 0, 60, 61, 0, - 0, 0, 0, 0, 0, 0, 0, 156, 156, 0, - 0, 0, 20, 0, 53, 24, 268, 0, 0, 17, - 156, 0, 36, 63, 35, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 277, 59, - 23, 60, 61, 33, 34, 58, 0, 0, 0, 0, - 0, 20, 0, 0, 24, 290, 0, 0, 17, 53, - 294, 36, 0, 35, 0, 25, 0, 0, 0, 0, - 298, 31, 32, 301, 302, 0, 0, 303, 59, 0, - 60, 61, 0, 0, 0, 0, 0, 0, 155, 0, - 0, 24, 0, 0, 0, 98, 0, 0, 36, 0, - 35, 0, 25, 53, 0, 0, 30, 23, 0, 0, - 33, 34, 58, 274, 0, 56, 0, 0, 214, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 18, 57, 54, 55, 31, 32, - 28, 29, 53, 0, 0, 0, 0, 30, 23, 0, - 0, 33, 34, 58, 0, 0, 56, 20, 0, 0, - 24, 0, 0, 0, 17, 0, 0, 36, 0, 35, - 0, 25, 0, 0, 0, 18, 57, 54, 55, 31, - 32, 28, 29, 0, 59, 0, 60, 0, 0, 0, - 0, 0, 30, 23, 0, 0, 33, 34, 58, 155, - 0, 56, 24, 0, 0, 155, 98, 0, 24, 36, - 0, 35, 98, 25, 0, 36, 0, 35, 0, 25, - 18, 57, 54, 55, 31, 32, 28, 29, 0, 214, - 0, 0, 0, 19, 0, 0, 30, 23, 0, 0, - 33, 34, 58, 20, 0, 56, 24, 0, 53, 0, - 17, 0, 0, 36, 95, 35, 0, 25, 0, 0, - 0, 0, 0, 0, 18, 57, 54, 55, 31, 32, - 28, 29, 0, 0, 0, 30, 23, 0, 0, 33, - 34, 58, 20, 0, 56, 24, 0, 0, 0, 17, - 0, 0, 36, 0, 35, 0, 25, 0, 0, 0, - 0, 0, 0, 18, 57, 54, 55, 31, 32, 28, - 29, 154, 30, 23, 0, 0, 33, 34, 213, 0, - 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, - 153, 212, 209, 210, 31, 32, 28, 29, 20, 0, - 0, 24, 0, 0, 0, 17, 0, 0, 36, 0, - 35, 0, 25, 0, 155, 0, 0, 24, 0, 0, - 0, 98, 22, 0, 36, 59, 35, 60, 25, 0, - 0, 30, 23, 0, 154, 33, 34, 58, 0, 218, - 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, - 57, 54, 0, 31, 32, 28, 29, 0, 0, 0, - 0, 0, 0, 30, 23, 0, 0, 33, 34, 213, - 23, 0, 211, 33, 34, 213, 0, 0, 0, 53, - 0, 154, 154, 154, 154, 154, 0, 154, 154, 154, - 0, 153, 212, 209, 210, 31, 32, 28, 29, 0, - 0, 31, 32, 0, 0, 0, 40, 30, 23, 0, - 0, 33, 34, 0, 0, 0, 0, 4, 0, 8, - 9, 0, 154, 0, 154, 154, 154, 154, 0, 154, - 154, 154, 0, 0, 15, 18, 0, 0, 0, 31, - 32, 28, 29, 0, 0, 7, 30, 23, 154, 154, - 33, 34, 0, 0, 0, 0, 0, 20, 8, 9, - 24, 154, 0, 0, 17, 0, 0, 36, 0, 35, - 0, 25, 0, 15, 18, 0, 0, 0, 31, 32, - 28, 29, 20, 45, 0, 24, 0, 0, 0, 17, - 0, 0, 36, 0, 35, 155, 25, 0, 24, 0, - 0, 0, 98, 0, 0, 36, 0, 35, 0, 25, - 0, 0, 30, 23, 0, 0, 33, 34, 58, 0, - 0, 56, 0, 0, 0, 0, 0, 0, 30, 23, - 0, 0, 33, 34, 213, 0, 0, 211, 0, 0, - 18, 57, 0, 0, 31, 32, 28, 29, 0, 0, - 0, 0, 0, 0, 0, 0, 153, 212, 0, 0, - 31, 32, 28, 29, 20, 0, 0, 24, 0, 0, - 175, 17, 155, 0, 36, 24, 35, 0, 25, 147, - 0, 0, 36, 0, 35, 0, 25, 0, 0, 0, - 20, 0, 0, 24, 0, 0, 0, 17, 0, 0, - 36, 0, 35, 0, 25, 0, 0, 0, 0, 0, - 0, 155, 0, 0, 24, 0, 0, 0, 98, 0, - 0, 36, 0, 35, 0, 25, 20, 0, 0, 24, - 0, 0, 0, 17, 0, 0, 36, 0, 35, 0, - 25, 0, 0, 0, 0, 0, 0, 0, 97, 0, - 0, 24, 0, 0, 0, 98, 0, 0, 36, 0, - 35, 173, 25, 97, 0, 0, 24, 0, 0, 0, - 98, 0, 0, 36, 0, 35, 0, 0, 0, 0, - 0, 30, 23, 0, 20, 33, 34, 24, 0, 0, - 0, 17, 0, 0, 36, 0, 35, 0, 25, 0, - 0, 0, 0, 0, 0, 92, 30, 23, 0, 18, - 33, 34, 0, 31, 32, 28, 29, 0, 249, 30, - 23, 0, 0, 33, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 18, 0, 0, 0, 31, 32, - 28, 29, 0, 0, 0, 0, 0, 153, 0, 0, - 0, 31, 32, 28, 29, 0, 0, 0, 0, 0, - 234, 0, 235, 0, 0, 0, 0, 0, 0, 239, - 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 227, 30, 23, - 0, 0, 33, 34, 261, 151, 30, 23, 69, 0, - 33, 34, 0, 0, 267, 0, 0, 44, 44, 44, - 0, 0, 0, 0, 30, 23, 18, 0, 33, 34, - 31, 32, 28, 29, 153, 0, 0, 0, 31, 32, - 28, 29, 0, 278, 3, 30, 23, 0, 0, 33, - 34, 283, 18, 43, 43, 43, 31, 32, 28, 29, - 30, 200, 0, 293, 33, 34, 296, 0, 0, 0, - 0, 0, 0, 153, 137, 0, 300, 31, 32, 28, - 29, 0, 30, 23, 44, 44, 33, 34, 18, 0, - 0, 44, 31, 32, 28, 29, 0, 30, 23, 0, - 42, 33, 34, 0, 0, 0, 0, 0, 0, 0, - 47, 49, 0, 0, 31, 32, 28, 29, 0, 23, - 43, 43, 33, 34, 0, 0, 0, 43, 0, 31, - 32, 28, 29, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, - 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 44, 0, 44, 0, - 0, 0, 0, 0, 0, 0, 145, 146, 0, 0, - 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 137, 43, 0, 43, 0, 0, 0, 0, 0, - 242, 0, 44, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, - 0, 272, 0, 0, 0, 0, 0, 0, 219, 0, - 220, 0, 0, 0, 0, 0, 43, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 284, 0, 44, 0, 0, 44, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, - 0, 43, 259, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 286, 0, 0, 288 }; -int yypact[]={ - - -253, -1000, 1019, -250, -1000, 980, -1000, -1000, -43, -43, - -40, -1000, -65, 749, 192, -1000, -261, 1279, -5, -1000, - 1445, 47, -253, -17, 1460, -1000, -1000, -1000, -1000, 63, - 62, -5, -5, -1000, -1000, 1460, 1460, -1000, -1000, -1000, - -1000, -65, -1000, -250, -253, -1000, -65, -1000, -1000, -1000, - -1000, 239, 1387, -274, 1387, 1387, 1387, -219, 1387, 1387, - 1387, 1387, 1481, -253, 122, 22, -1000, -1000, -253, -253, - 192, -1000, 61, -253, 60, -43, -43, 1369, 1387, 1387, - -1000, -221, 382, 57, -1000, -1000, -248, -1000, -1000, -1000, - 10, 619, -1000, 16, -1000, -1000, -24, 1460, 1387, -282, - 1460, 1460, 1460, 1460, 1460, 1460, -1000, 1279, -1000, -1000, - -232, 56, 1279, 1279, -1000, -1000, -24, -24, -1000, -1000, - -1000, 122, 788, -5, 1085, 894, 552, -1000, 1481, 1481, - 1481, 705, -1000, 22, -1000, -1000, -253, -1000, -1000, -1000, - -1000, 122, 1387, 283, 1423, -1000, -1000, 1279, -38, 43, - 936, -1000, -264, -5, -1000, 1445, 47, -43, 788, -43, - 1387, -18, -1000, 1387, 55, -1000, -1000, -1000, -1000, -1000, - 1387, 1361, 1387, -281, -1000, -1000, -1000, 1460, 619, -24, - -24, -24, -24, 35, 35, 25, 788, 41, 1279, 50, - 34, 50, 22, -1000, 1387, -253, -1000, -1000, 619, -263, - -89, 22, 10, -43, 1387, 1387, 1387, 1292, 1408, 1408, - 1408, 1408, -224, 1408, 1408, 289, -1000, 16, -1000, -1000, - -1000, -43, 1279, 619, -235, 788, 788, -1000, 788, -225, - 47, -1000, -1000, 50, -1000, -1000, -1000, 788, -1000, -253, - 53, -228, 1254, -38, -1000, 788, 788, 788, 936, -1000, - 936, 1101, 2, 942, -1000, 289, 825, 1408, -1000, -1000, - -8, -253, 50, 6, -1000, -1000, -1000, -1000, 283, 1387, - 50, 660, 1387, -43, 1408, 936, -43, 283, -253, -236, - -1000, -1000, 619, -253, 1387, 50, -1000, 936, -1000, -259, - -1000, -1000, -1000, -253, 283, 50, -253, -253, -1000, -1000, - -253, 283, 283, 283, -1000, -1000, -1000 }; -int yypgo[]={ - - 0, 160, 159, 420, 0, 157, 156, 104, 502, 107, - 154, 153, 105, 98, 151, 150, 149, 216, 66, 75, - 68, 140, 139, 48, 63, 1003, 40, 67, 138, 137, - 136, 546, 126, 125, 1720, 124, 1400, 686, 41, 64, - 32, 121, 1664, 1628, 120, 115, 111, 109 }; -int yyr1[]={ - - 0, 5, 6, 6, 6, 6, 32, 7, 33, 7, - 7, 7, 7, 7, 7, 7, 29, 29, 29, 30, - 30, 35, 1, 2, 11, 11, 41, 25, 12, 12, - 19, 19, 19, 19, 34, 34, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 44, 20, 20, 20, 28, 28, 21, 21, 42, - 42, 31, 31, 26, 26, 27, 27, 27, 27, 22, - 22, 14, 14, 14, 14, 14, 23, 23, 16, 16, - 15, 15, 15, 15, 15, 15, 18, 18, 17, 17, - 17, 17, 17, 17, 45, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 46, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 8, 8, 8, 8, 8, 8, - 8, 8, 9, 9, 47, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 10, 10, 10, 24, 24, - 13, 13, 13, 13, 37, 38, 36, 39, 39, 43, - 40 }; -int yyr2[]={ - - 0, 7, 3, 5, 3, 5, 1, 7, 1, 7, - 5, 5, 5, 3, 5, 5, 3, 3, 3, 2, - 2, 1, 15, 9, 3, 7, 1, 9, 11, 9, - 3, 5, 3, 5, 2, 4, 5, 5, 7, 3, - 13, 17, 17, 21, 19, 5, 5, 13, 9, 7, - 7, 1, 9, 13, 5, 3, 3, 13, 19, 3, - 4, 0, 2, 1, 5, 1, 5, 5, 5, 1, - 3, 3, 7, 3, 5, 7, 1, 3, 1, 3, - 3, 7, 3, 5, 7, 7, 1, 3, 3, 7, - 3, 5, 7, 7, 1, 9, 11, 9, 7, 7, - 7, 7, 3, 5, 7, 7, 7, 7, 11, 3, - 5, 1, 9, 7, 7, 7, 3, 5, 7, 7, - 7, 11, 3, 5, 2, 2, 7, 7, 7, 7, - 7, 7, 5, 7, 1, 11, 9, 3, 9, 5, - 5, 3, 3, 5, 5, 5, 5, 2, 1, 3, - 3, 9, 5, 5, 4, 5, 3, 0, 2, 3, - 5 }; -int yychk[]={ - - -1000, -5, -31, -42, 267, -6, -7, 256, 269, 270, - -11, -12, -1, -4, -37, 284, -13, 40, 285, -25, - 33, -8, 123, 258, 36, 47, -9, -10, 291, 292, - 257, 289, 290, 261, 262, 45, 43, 267, -31, -7, - 256, -32, -34, -42, -43, 59, -33, -34, -12, -34, - -2, -37, -40, 124, 287, 288, 266, 286, 263, 60, - 62, 63, -4, 44, -19, -38, -20, 256, 125, -43, - -37, -21, 275, 276, 277, 278, 279, -28, 282, 283, - 273, 274, -4, 271, 280, 281, -35, 265, 289, 290, - -17, -4, 256, -24, -13, -25, -8, 33, 40, -13, - 94, 42, 47, 37, 43, 45, -31, 91, -9, -13, - -41, -47, 40, 40, -13, -13, -8, -8, -12, -31, - -12, -19, -4, 285, -4, -4, -4, 258, -4, -4, - -4, -4, -31, -38, -20, 256, -39, -43, -31, -31, - -38, -19, 40, -31, 40, -34, -34, 40, -16, -15, - -3, 256, -13, 285, -25, 33, -8, -23, -4, -23, - -44, 258, -34, 40, -29, 258, 257, -30, 291, 292, - -45, -40, 256, -36, 41, -36, -26, 60, -4, -8, - -8, -8, -8, -8, -8, -17, -4, 259, 40, -18, - -17, -18, -38, -24, 58, -39, -31, -38, -4, -20, - 258, -23, -17, -27, 62, 264, 124, -40, 256, 287, - 288, 266, 286, 263, 63, -3, 265, -24, -25, -34, - -34, -23, 91, -4, 40, -4, -4, 256, -4, 286, - -8, 93, 47, -18, -36, -36, -39, -4, -31, -36, - 275, 286, -43, -36, -34, -4, -4, -4, -3, 256, - -3, -3, -3, -3, 258, -3, -3, -46, -26, -34, - -17, -36, -22, -14, 258, 256, 258, -36, -31, 40, - 258, -4, -43, -27, 58, -3, 93, -31, -36, -40, - 256, -20, -4, -36, -43, -23, -34, -3, -34, -20, - -31, 258, 256, -36, -31, -23, -36, 272, -31, -20, - -36, -31, -31, -31, -20, -20, -20 }; -int yydef[]={ - - 61, -2, 0, 62, 59, -2, 2, 4, 6, 8, - 0, 13, 0, 24, 0, 21, 147, 0, 148, 102, - 0, 109, 61, 150, 0, 26, 124, 125, 134, 137, - 0, 0, 0, 141, 142, 0, 0, 60, 1, 3, - 5, 0, 10, 34, 61, 159, 0, 11, 12, 14, - 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 110, 61, 0, 157, 30, 32, 61, 61, - 0, 39, 0, 61, 0, 0, 0, -2, 76, 76, - 51, 0, 0, 0, 55, 56, 0, 94, 145, 146, - 0, 88, 90, 63, 149, 103, 132, 0, 0, 147, - 0, 0, 0, 0, 0, 0, 154, 0, 152, 153, - 0, 0, -2, -2, 139, 140, 143, 144, 7, 35, - 9, 0, 25, 148, 99, 100, -2, 104, -2, -2, - -2, 0, 160, 157, 31, 33, 61, 158, 155, 36, - 37, 0, 0, 0, 76, 45, 46, 0, 65, -2, - 80, 82, 147, 148, 116, 0, 122, 0, 77, 0, - 76, 0, 54, 0, 0, 16, 17, 18, 19, 20, - 0, 0, 91, 0, 156, 133, 98, 0, 0, 126, - 127, 128, 129, 130, 131, 0, 88, 0, -2, 0, - -2, 0, 157, 97, 0, 61, 29, 38, 0, 0, - 150, 0, 0, 0, 0, 0, 0, 0, 83, 0, - 0, 0, 0, 0, 0, 123, 111, 63, 117, 49, - 50, 0, 0, 0, -2, 95, 89, 93, 92, 0, - 64, 151, 27, 0, 136, 138, 23, 108, 28, 61, - 0, 0, 0, 65, 48, 66, 67, 68, 81, 85, - 84, 113, 114, -2, 119, -2, 0, 0, 115, 52, - 0, 61, 0, -2, 71, 73, 96, 135, 0, 0, - 0, 0, 76, 0, 0, 112, 0, 0, 61, 0, - 74, 40, 0, 61, 76, 0, 47, 121, 53, 57, - 22, 72, 75, 61, 0, 0, 61, 61, 41, 42, - 61, 0, 0, 0, 44, 58, 43 }; -typedef struct { char *t_name; int t_val; } yytoktype; -#ifndef YYDEBUG -# define YYDEBUG 0 /* don't allow debugging */ -#endif - -#if YYDEBUG - -yytoktype yytoks[] = -{ - "FUNC_CALL", 257, - "NAME", 258, - "REGEXP", 259, - "ERROR", 260, - "YNUMBER", 261, - "YSTRING", 262, - "RELOP", 263, - "APPEND_OP", 264, - "ASSIGNOP", 265, - "MATCHOP", 266, - "NEWLINE", 267, - "CONCAT_OP", 268, - "LEX_BEGIN", 269, - "LEX_END", 270, - "LEX_IF", 271, - "LEX_ELSE", 272, - "LEX_RETURN", 273, - "LEX_DELETE", 274, - "LEX_WHILE", 275, - "LEX_DO", 276, - "LEX_FOR", 277, - "LEX_BREAK", 278, - "LEX_CONTINUE", 279, - "LEX_PRINT", 280, - "LEX_PRINTF", 281, - "LEX_NEXT", 282, - "LEX_EXIT", 283, - "LEX_FUNCTION", 284, - "LEX_GETLINE", 285, - "LEX_IN", 286, - "LEX_AND", 287, - "LEX_OR", 288, - "INCREMENT", 289, - "DECREMENT", 290, - "LEX_BUILTIN", 291, - "LEX_LENGTH", 292, - "?", 63, - ":", 58, - "<", 60, - ">", 62, - "|", 124, - "+", 43, - "-", 45, - "*", 42, - "/", 47, - "%", 37, - "!", 33, - "UNARY", 293, - "^", 94, - "$", 36, - "(", 40, - ")", 41, - "-unknown-", -1 /* ends search */ -}; - -char * yyreds[] = -{ - "-no such reduction-", - "start : opt_nls program opt_nls", - "program : rule", - "program : program rule", - "program : error", - "program : program error", - "rule : LEX_BEGIN", - "rule : LEX_BEGIN action", - "rule : LEX_END", - "rule : LEX_END action", - "rule : LEX_BEGIN statement_term", - "rule : LEX_END statement_term", - "rule : pattern action", - "rule : action", - "rule : pattern statement_term", - "rule : function_prologue function_body", - "func_name : NAME", - "func_name : FUNC_CALL", - "func_name : lex_builtin", - "lex_builtin : LEX_BUILTIN", - "lex_builtin : LEX_LENGTH", - "function_prologue : LEX_FUNCTION", - "function_prologue : LEX_FUNCTION func_name '(' opt_param_list r_paren opt_nls", - "function_body : l_brace statements r_brace opt_semi", - "pattern : exp", - "pattern : exp comma exp", - "regexp : '/'", - "regexp : '/' REGEXP '/'", - "action : l_brace statements r_brace opt_semi opt_nls", - "action : l_brace r_brace opt_semi opt_nls", - "statements : statement", - "statements : statements statement", - "statements : error", - "statements : statements error", - "statement_term : nls", - "statement_term : semi opt_nls", - "statement : semi opt_nls", - "statement : l_brace r_brace", - "statement : l_brace statements r_brace", - "statement : if_statement", - "statement : LEX_WHILE '(' exp r_paren opt_nls statement", - "statement : LEX_DO opt_nls statement LEX_WHILE '(' exp r_paren opt_nls", - "statement : LEX_FOR '(' NAME LEX_IN NAME r_paren opt_nls statement", - "statement : LEX_FOR '(' opt_exp semi exp semi opt_exp r_paren opt_nls statement", - "statement : LEX_FOR '(' opt_exp semi semi opt_exp r_paren opt_nls statement", - "statement : LEX_BREAK statement_term", - "statement : LEX_CONTINUE statement_term", - "statement : print '(' expression_list r_paren output_redir statement_term", - "statement : print opt_rexpression_list output_redir statement_term", - "statement : LEX_NEXT opt_exp statement_term", - "statement : LEX_EXIT opt_exp statement_term", - "statement : LEX_RETURN", - "statement : LEX_RETURN opt_exp statement_term", - "statement : LEX_DELETE NAME '[' expression_list ']' statement_term", - "statement : exp statement_term", - "print : LEX_PRINT", - "print : LEX_PRINTF", - "if_statement : LEX_IF '(' exp r_paren opt_nls statement", - "if_statement : LEX_IF '(' exp r_paren opt_nls statement LEX_ELSE opt_nls statement", - "nls : NEWLINE", - "nls : nls NEWLINE", - "opt_nls : /* empty */", - "opt_nls : nls", - "input_redir : /* empty */", - "input_redir : '<' simp_exp", - "output_redir : /* empty */", - "output_redir : '>' exp", - "output_redir : APPEND_OP exp", - "output_redir : '|' exp", - "opt_param_list : /* empty */", - "opt_param_list : param_list", - "param_list : NAME", - "param_list : param_list comma NAME", - "param_list : error", - "param_list : param_list error", - "param_list : param_list comma error", - "opt_exp : /* empty */", - "opt_exp : exp", - "opt_rexpression_list : /* empty */", - "opt_rexpression_list : rexpression_list", - "rexpression_list : rexp", - "rexpression_list : rexpression_list comma rexp", - "rexpression_list : error", - "rexpression_list : rexpression_list error", - "rexpression_list : rexpression_list error rexp", - "rexpression_list : rexpression_list comma error", - "opt_expression_list : /* empty */", - "opt_expression_list : expression_list", - "expression_list : exp", - "expression_list : expression_list comma exp", - "expression_list : error", - "expression_list : expression_list error", - "expression_list : expression_list error exp", - "expression_list : expression_list comma error", - "exp : variable ASSIGNOP", - "exp : variable ASSIGNOP exp", - "exp : '(' expression_list r_paren LEX_IN NAME", - "exp : exp '|' LEX_GETLINE opt_variable", - "exp : LEX_GETLINE opt_variable input_redir", - "exp : exp LEX_AND exp", - "exp : exp LEX_OR exp", - "exp : exp MATCHOP exp", - "exp : regexp", - "exp : '!' regexp", - "exp : exp LEX_IN NAME", - "exp : exp RELOP exp", - "exp : exp '<' exp", - "exp : exp '>' exp", - "exp : exp '?' exp ':' exp", - "exp : simp_exp", - "exp : exp exp", - "rexp : variable ASSIGNOP", - "rexp : variable ASSIGNOP rexp", - "rexp : rexp LEX_AND rexp", - "rexp : rexp LEX_OR rexp", - "rexp : LEX_GETLINE opt_variable input_redir", - "rexp : regexp", - "rexp : '!' regexp", - "rexp : rexp MATCHOP rexp", - "rexp : rexp LEX_IN NAME", - "rexp : rexp RELOP rexp", - "rexp : rexp '?' rexp ':' rexp", - "rexp : simp_exp", - "rexp : rexp rexp", - "simp_exp : non_post_simp_exp", - "simp_exp : post_inc_dec_exp", - "simp_exp : simp_exp '^' simp_exp", - "simp_exp : simp_exp '*' simp_exp", - "simp_exp : simp_exp '/' simp_exp", - "simp_exp : simp_exp '%' simp_exp", - "simp_exp : simp_exp '+' simp_exp", - "simp_exp : simp_exp '-' simp_exp", - "non_post_simp_exp : '!' simp_exp", - "non_post_simp_exp : '(' exp r_paren", - "non_post_simp_exp : LEX_BUILTIN", - "non_post_simp_exp : LEX_BUILTIN '(' opt_expression_list r_paren", - "non_post_simp_exp : LEX_LENGTH '(' opt_expression_list r_paren", - "non_post_simp_exp : LEX_LENGTH", - "non_post_simp_exp : FUNC_CALL '(' opt_expression_list r_paren", - "non_post_simp_exp : INCREMENT variable", - "non_post_simp_exp : DECREMENT variable", - "non_post_simp_exp : YNUMBER", - "non_post_simp_exp : YSTRING", - "non_post_simp_exp : '-' simp_exp", - "non_post_simp_exp : '+' simp_exp", - "post_inc_dec_exp : variable INCREMENT", - "post_inc_dec_exp : variable DECREMENT", - "post_inc_dec_exp : variable", - "opt_variable : /* empty */", - "opt_variable : variable", - "variable : NAME", - "variable : NAME '[' expression_list ']'", - "variable : '$' non_post_simp_exp", - "variable : '$' variable", - "l_brace : '{' opt_nls", - "r_brace : '}' opt_nls", - "r_paren : ')'", - "opt_semi : /* empty */", - "opt_semi : semi", - "semi : ';'", - "comma : ',' opt_nls", -}; -#endif /* YYDEBUG */ -#line 1 "/usr/lib/yaccpar" -/* @(#)yaccpar 1.10 89/04/04 SMI; from S5R3 1.10 */ - -/* -** Skeleton parser driver for yacc output -*/ - -/* -** yacc user known macros and defines -*/ -#define YYERROR goto yyerrlab -#define YYACCEPT { free(yys); free(yyv); return(0); } -#define YYABORT { free(yys); free(yyv); return(1); } -#define YYBACKUP( newtoken, newvalue )\ -{\ - if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\ - {\ - yyerror( "syntax error - cannot backup" );\ - goto yyerrlab;\ - }\ - yychar = newtoken;\ - yystate = *yyps;\ - yylval = newvalue;\ - goto yynewstate;\ -} -#define YYRECOVERING() (!!yyerrflag) -#ifndef YYDEBUG -# define YYDEBUG 1 /* make debugging available */ -#endif - -/* -** user known globals -*/ -int yydebug; /* set to 1 to get debugging */ - -/* -** driver internal defines -*/ -#define YYFLAG (-1000) - -/* -** static variables used by the parser -*/ -static YYSTYPE *yyv; /* value stack */ -static int *yys; /* state stack */ - -static YYSTYPE *yypv; /* top of value stack */ -static int *yyps; /* top of state stack */ - -static int yystate; /* current state */ -static int yytmp; /* extra var (lasts between blocks) */ - -int yynerrs; /* number of errors */ - -int yyerrflag; /* error recovery flag */ -int yychar; /* current input token number */ - - -/* -** yyparse - return 0 if worked, 1 if syntax error not recovered from -*/ -int -yyparse() -{ - register YYSTYPE *yypvt; /* top of value stack for $vars */ - unsigned yymaxdepth = YYMAXDEPTH; - - /* - ** Initialize externals - yyparse may be called more than once - */ - yyv = (YYSTYPE*)malloc(yymaxdepth*sizeof(YYSTYPE)); - yys = (int*)malloc(yymaxdepth*sizeof(int)); - if (!yyv || !yys) - { - yyerror( "out of memory" ); - return(1); - } - yypv = &yyv[-1]; - yyps = &yys[-1]; - yystate = 0; - yytmp = 0; - yynerrs = 0; - yyerrflag = 0; - yychar = -1; - - goto yystack; - { - register YYSTYPE *yy_pv; /* top of value stack */ - register int *yy_ps; /* top of state stack */ - register int yy_state; /* current state */ - register int yy_n; /* internal state number info */ - - /* - ** get globals into registers. - ** branch to here only if YYBACKUP was called. - */ - yynewstate: - yy_pv = yypv; - yy_ps = yyps; - yy_state = yystate; - goto yy_newstate; - - /* - ** get globals into registers. - ** either we just started, or we just finished a reduction - */ - yystack: - yy_pv = yypv; - yy_ps = yyps; - yy_state = yystate; - - /* - ** top of for (;;) loop while no reductions done - */ - yy_stack: - /* - ** put a state and value onto the stacks - */ -#if YYDEBUG - /* - ** if debugging, look up token value in list of value vs. - ** name pairs. 0 and negative (-1) are special values. - ** Note: linear search is used since time is not a real - ** consideration while debugging. - */ - if ( yydebug ) - { - register int yy_i; - - (void)printf( "State %d, token ", yy_state ); - if ( yychar == 0 ) - (void)printf( "end-of-file\n" ); - else if ( yychar < 0 ) - (void)printf( "-none-\n" ); - else - { - for ( yy_i = 0; yytoks[yy_i].t_val >= 0; - yy_i++ ) - { - if ( yytoks[yy_i].t_val == yychar ) - break; - } - (void)printf( "%s\n", yytoks[yy_i].t_name ); - } - } -#endif /* YYDEBUG */ - if ( ++yy_ps >= &yys[ yymaxdepth ] ) /* room on stack? */ - { - /* - ** reallocate and recover. Note that pointers - ** have to be reset, or bad things will happen - */ - int yyps_index = (yy_ps - yys); - int yypv_index = (yy_pv - yyv); - int yypvt_index = (yypvt - yyv); - yymaxdepth += YYMAXDEPTH; - yyv = (YYSTYPE*)realloc((char*)yyv, - yymaxdepth * sizeof(YYSTYPE)); - yys = (int*)realloc((char*)yys, - yymaxdepth * sizeof(int)); - if (!yyv || !yys) - { - yyerror( "yacc stack overflow" ); - return(1); - } - yy_ps = yys + yyps_index; - yy_pv = yyv + yypv_index; - yypvt = yyv + yypvt_index; - } - *yy_ps = yy_state; - *++yy_pv = yyval; - - /* - ** we have a new state - find out what to do - */ - yy_newstate: - if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG ) - goto yydefault; /* simple state */ -#if YYDEBUG - /* - ** if debugging, need to mark whether new token grabbed - */ - yytmp = yychar < 0; -#endif - if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) ) - yychar = 0; /* reached EOF */ -#if YYDEBUG - if ( yydebug && yytmp ) - { - register int yy_i; - - (void)printf( "Received token " ); - if ( yychar == 0 ) - (void)printf( "end-of-file\n" ); - else if ( yychar < 0 ) - (void)printf( "-none-\n" ); - else - { - for ( yy_i = 0; yytoks[yy_i].t_val >= 0; - yy_i++ ) - { - if ( yytoks[yy_i].t_val == yychar ) - break; - } - (void)printf( "%s\n", yytoks[yy_i].t_name ); - } - } -#endif /* YYDEBUG */ - if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) ) - goto yydefault; - if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar ) /*valid shift*/ - { - yychar = -1; - yyval = yylval; - yy_state = yy_n; - if ( yyerrflag > 0 ) - yyerrflag--; - goto yy_stack; - } - - yydefault: - if ( ( yy_n = yydef[ yy_state ] ) == -2 ) - { -#if YYDEBUG - yytmp = yychar < 0; -#endif - if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) ) - yychar = 0; /* reached EOF */ -#if YYDEBUG - if ( yydebug && yytmp ) - { - register int yy_i; - - (void)printf( "Received token " ); - if ( yychar == 0 ) - (void)printf( "end-of-file\n" ); - else if ( yychar < 0 ) - (void)printf( "-none-\n" ); - else - { - for ( yy_i = 0; - yytoks[yy_i].t_val >= 0; - yy_i++ ) - { - if ( yytoks[yy_i].t_val - == yychar ) - { - break; - } - } - (void)printf( "%s\n", yytoks[yy_i].t_name ); - } - } -#endif /* YYDEBUG */ - /* - ** look through exception table - */ - { - register int *yyxi = yyexca; - - while ( ( *yyxi != -1 ) || - ( yyxi[1] != yy_state ) ) - { - yyxi += 2; - } - while ( ( *(yyxi += 2) >= 0 ) && - ( *yyxi != yychar ) ) - ; - if ( ( yy_n = yyxi[1] ) < 0 ) - YYACCEPT; - } - } - - /* - ** check for syntax error - */ - if ( yy_n == 0 ) /* have an error */ - { - /* no worry about speed here! */ - switch ( yyerrflag ) - { - case 0: /* new error */ - yyerror( "syntax error" ); - goto skip_init; - yyerrlab: - /* - ** get globals into registers. - ** we have a user generated syntax type error - */ - yy_pv = yypv; - yy_ps = yyps; - yy_state = yystate; - yynerrs++; - skip_init: - case 1: - case 2: /* incompletely recovered error */ - /* try again... */ - yyerrflag = 3; - /* - ** find state where "error" is a legal - ** shift action - */ - while ( yy_ps >= yys ) - { - yy_n = yypact[ *yy_ps ] + YYERRCODE; - if ( yy_n >= 0 && yy_n < YYLAST && - yychk[yyact[yy_n]] == YYERRCODE) { - /* - ** simulate shift of "error" - */ - yy_state = yyact[ yy_n ]; - goto yy_stack; - } - /* - ** current state has no shift on - ** "error", pop stack - */ -#if YYDEBUG -# define _POP_ "Error recovery pops state %d, uncovers state %d\n" - if ( yydebug ) - (void)printf( _POP_, *yy_ps, - yy_ps[-1] ); -# undef _POP_ -#endif - yy_ps--; - yy_pv--; - } - /* - ** there is no state on stack with "error" as - ** a valid shift. give up. - */ - YYABORT; - case 3: /* no shift yet; eat a token */ -#if YYDEBUG - /* - ** if debugging, look up token in list of - ** pairs. 0 and negative shouldn't occur, - ** but since timing doesn't matter when - ** debugging, it doesn't hurt to leave the - ** tests here. - */ - if ( yydebug ) - { - register int yy_i; - - (void)printf( "Error recovery discards " ); - if ( yychar == 0 ) - (void)printf( "token end-of-file\n" ); - else if ( yychar < 0 ) - (void)printf( "token -none-\n" ); - else - { - for ( yy_i = 0; - yytoks[yy_i].t_val >= 0; - yy_i++ ) - { - if ( yytoks[yy_i].t_val - == yychar ) - { - break; - } - } - (void)printf( "token %s\n", - yytoks[yy_i].t_name ); - } - } -#endif /* YYDEBUG */ - if ( yychar == 0 ) /* reached EOF. quit */ - YYABORT; - yychar = -1; - goto yy_newstate; - } - }/* end if ( yy_n == 0 ) */ - /* - ** reduction by production yy_n - ** put stack tops, etc. so things right after switch - */ -#if YYDEBUG - /* - ** if debugging, print the string that is the user's - ** specification of the reduction which is just about - ** to be done. - */ - if ( yydebug ) - (void)printf( "Reduce by (%d) \"%s\"\n", - yy_n, yyreds[ yy_n ] ); -#endif - yytmp = yy_n; /* value to switch over */ - yypvt = yy_pv; /* $vars top of value stack */ - /* - ** Look in goto table for next state - ** Sorry about using yy_state here as temporary - ** register variable, but why not, if it works... - ** If yyr2[ yy_n ] doesn't have the low order bit - ** set, then there is no action to be done for - ** this reduction. So, no saving & unsaving of - ** registers done. The only difference between the - ** code just after the if and the body of the if is - ** the goto yy_stack in the body. This way the test - ** can be made before the choice of what to do is needed. - */ - { - /* length of production doubled with extra bit */ - register int yy_len = yyr2[ yy_n ]; - - if ( !( yy_len & 01 ) ) - { - yy_len >>= 1; - yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */ - yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] + - *( yy_ps -= yy_len ) + 1; - if ( yy_state >= YYLAST || - yychk[ yy_state = - yyact[ yy_state ] ] != -yy_n ) - { - yy_state = yyact[ yypgo[ yy_n ] ]; - } - goto yy_stack; - } - yy_len >>= 1; - yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */ - yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] + - *( yy_ps -= yy_len ) + 1; - if ( yy_state >= YYLAST || - yychk[ yy_state = yyact[ yy_state ] ] != -yy_n ) - { - yy_state = yyact[ yypgo[ yy_n ] ]; - } - } - /* save until reenter driver code */ - yystate = yy_state; - yyps = yy_ps; - yypv = yy_pv; - } - /* - ** code supplied by user is placed in this switch - */ - switch( yytmp ) - { - -case 1: -# line 137 "awk.y" -{ expression_value = yypvt[-1].nodeval; } break; -case 2: -# line 142 "awk.y" -{ - if (yypvt[-0].nodeval != NULL) - yyval.nodeval = yypvt[-0].nodeval; - else - yyval.nodeval = NULL; - yyerrok; - } break; -case 3: -# line 151 "awk.y" -{ - if (yypvt[-0].nodeval == NULL) - yyval.nodeval = yypvt[-1].nodeval; - else if (yypvt[-1].nodeval == NULL) - yyval.nodeval = yypvt[-0].nodeval; - else { - if (yypvt[-1].nodeval->type != Node_rule_list) - yypvt[-1].nodeval = node(yypvt[-1].nodeval, Node_rule_list, - (NODE*)NULL); - yyval.nodeval = append_right (yypvt[-1].nodeval, - node(yypvt[-0].nodeval, Node_rule_list,(NODE *) NULL)); - } - yyerrok; - } break; -case 4: -# line 165 "awk.y" -{ yyval.nodeval = NULL; } break; -case 5: -# line 166 "awk.y" -{ yyval.nodeval = NULL; } break; -case 6: -# line 170 "awk.y" -{ io_allowed = 0; } break; -case 7: -# line 172 "awk.y" -{ - if (begin_block) { - if (begin_block->type != Node_rule_list) - begin_block = node(begin_block, Node_rule_list, - (NODE *)NULL); - (void) append_right (begin_block, node( - node((NODE *)NULL, Node_rule_node, yypvt[-0].nodeval), - Node_rule_list, (NODE *)NULL) ); - } else - begin_block = node((NODE *)NULL, Node_rule_node, yypvt[-0].nodeval); - yyval.nodeval = NULL; - io_allowed = 1; - yyerrok; - } break; -case 8: -# line 186 "awk.y" -{ io_allowed = 0; } break; -case 9: -# line 188 "awk.y" -{ - if (end_block) { - if (end_block->type != Node_rule_list) - end_block = node(end_block, Node_rule_list, - (NODE *)NULL); - (void) append_right (end_block, node( - node((NODE *)NULL, Node_rule_node, yypvt[-0].nodeval), - Node_rule_list, (NODE *)NULL)); - } else - end_block = node((NODE *)NULL, Node_rule_node, yypvt[-0].nodeval); - yyval.nodeval = NULL; - io_allowed = 1; - yyerrok; - } break; -case 10: -# line 203 "awk.y" -{ - warning("BEGIN blocks must have an action part"); - errcount++; - yyerrok; - } break; -case 11: -# line 209 "awk.y" -{ - warning("END blocks must have an action part"); - errcount++; - yyerrok; - } break; -case 12: -# line 215 "awk.y" -{ yyval.nodeval = node (yypvt[-1].nodeval, Node_rule_node, yypvt[-0].nodeval); yyerrok; } break; -case 13: -# line 217 "awk.y" -{ yyval.nodeval = node ((NODE *)NULL, Node_rule_node, yypvt[-0].nodeval); yyerrok; } break; -case 14: -# line 219 "awk.y" -{ - yyval.nodeval = node (yypvt[-1].nodeval, - Node_rule_node, - node(node(node(make_number(0.0), - Node_field_spec, - (NODE *) NULL), - Node_expression_list, - (NODE *) NULL), - Node_K_print, - (NODE *) NULL)); - yyerrok; - } break; -case 15: -# line 232 "awk.y" -{ - func_install(yypvt[-1].nodeval, yypvt[-0].nodeval); - yyval.nodeval = NULL; - yyerrok; - } break; -case 16: -# line 241 "awk.y" -{ yyval.sval = yypvt[-0].sval; } break; -case 17: -# line 243 "awk.y" -{ yyval.sval = yypvt[-0].sval; } break; -case 18: -# line 245 "awk.y" -{ - yyerror("%s() is a built-in function, it cannot be redefined", - tokstart); - errcount++; - /* yyerrok; */ - } break; -case 21: -# line 260 "awk.y" -{ - param_counter = 0; - } break; -case 22: -# line 264 "awk.y" -{ - yyval.nodeval = append_right(make_param(yypvt[-4].sval), yypvt[-2].nodeval); - can_return = 1; - } break; -case 23: -# line 272 "awk.y" -{ - yyval.nodeval = yypvt[-2].nodeval; - can_return = 0; - } break; -case 24: -# line 281 "awk.y" -{ yyval.nodeval = yypvt[-0].nodeval; } break; -case 25: -# line 283 "awk.y" -{ yyval.nodeval = mkrangenode ( node(yypvt[-2].nodeval, Node_cond_pair, yypvt[-0].nodeval) ); } break; -case 26: -# line 292 "awk.y" -{ ++want_regexp; } break; -case 27: -# line 294 "awk.y" -{ - NODE *n; - - getnode(n); - n->type = Node_regex; - n->re_exp = make_string(yypvt[-1].sval, strlen(yypvt[-1].sval)); - n->re_reg = mk_re_parse(yypvt[-1].sval, 0); - n->re_text = NULL; - n->re_flags = CONST; - n->re_cnt = 1; - yyval.nodeval = n; - } break; -case 28: -# line 310 "awk.y" -{ yyval.nodeval = yypvt[-3].nodeval ; } break; -case 29: -# line 312 "awk.y" -{ yyval.nodeval = NULL; } break; -case 30: -# line 317 "awk.y" -{ yyval.nodeval = yypvt[-0].nodeval; } break; -case 31: -# line 319 "awk.y" -{ - if (yypvt[-1].nodeval == NULL || yypvt[-1].nodeval->type != Node_statement_list) - yypvt[-1].nodeval = node(yypvt[-1].nodeval, Node_statement_list,(NODE *)NULL); - yyval.nodeval = append_right(yypvt[-1].nodeval, - node( yypvt[-0].nodeval, Node_statement_list, (NODE *)NULL)); - yyerrok; - } break; -case 32: -# line 327 "awk.y" -{ yyval.nodeval = NULL; } break; -case 33: -# line 329 "awk.y" -{ yyval.nodeval = NULL; } break; -case 36: -# line 339 "awk.y" -{ yyval.nodeval = NULL; } break; -case 37: -# line 341 "awk.y" -{ yyval.nodeval = NULL; } break; -case 38: -# line 343 "awk.y" -{ yyval.nodeval = yypvt[-1].nodeval; } break; -case 39: -# line 345 "awk.y" -{ yyval.nodeval = yypvt[-0].nodeval; } break; -case 40: -# line 347 "awk.y" -{ yyval.nodeval = node (yypvt[-3].nodeval, Node_K_while, yypvt[-0].nodeval); } break; -case 41: -# line 349 "awk.y" -{ yyval.nodeval = node (yypvt[-2].nodeval, Node_K_do, yypvt[-5].nodeval); } break; -case 42: -# line 351 "awk.y" -{ - yyval.nodeval = node (yypvt[-0].nodeval, Node_K_arrayfor, make_for_loop(variable(yypvt[-5].sval,1), - (NODE *)NULL, variable(yypvt[-3].sval,1))); - } break; -case 43: -# line 356 "awk.y" -{ - yyval.nodeval = node(yypvt[-0].nodeval, Node_K_for, (NODE *)make_for_loop(yypvt[-7].nodeval, yypvt[-5].nodeval, yypvt[-3].nodeval)); - } break; -case 44: -# line 360 "awk.y" -{ - yyval.nodeval = node (yypvt[-0].nodeval, Node_K_for, - (NODE *)make_for_loop(yypvt[-6].nodeval, (NODE *)NULL, yypvt[-3].nodeval)); - } break; -case 45: -# line 366 "awk.y" -{ yyval.nodeval = node ((NODE *)NULL, Node_K_break, (NODE *)NULL); } break; -case 46: -# line 369 "awk.y" -{ yyval.nodeval = node ((NODE *)NULL, Node_K_continue, (NODE *)NULL); } break; -case 47: -# line 371 "awk.y" -{ yyval.nodeval = node (yypvt[-3].nodeval, yypvt[-5].nodetypeval, yypvt[-1].nodeval); } break; -case 48: -# line 373 "awk.y" -{ - if (yypvt[-3].nodetypeval == Node_K_print && yypvt[-2].nodeval == NULL) - yypvt[-2].nodeval = node(node(make_number(0.0), - Node_field_spec, - (NODE *) NULL), - Node_expression_list, - (NODE *) NULL); - - yyval.nodeval = node (yypvt[-2].nodeval, yypvt[-3].nodetypeval, yypvt[-1].nodeval); - } break; -case 49: -# line 384 "awk.y" -{ NODETYPE type; - - if (! io_allowed) yyerror("next used in BEGIN or END action"); - if (yypvt[-1].nodeval && yypvt[-1].nodeval == lookup("file")) { - if (do_lint) - warning("`next file' is a gawk extension"); - else if (strict || do_posix) - yyerror("`next file' is a gawk extension"); - type = Node_K_nextfile; - } else type = Node_K_next; - yyval.nodeval = node ((NODE *)NULL, type, (NODE *)NULL); - } break; -case 50: -# line 397 "awk.y" -{ yyval.nodeval = node (yypvt[-1].nodeval, Node_K_exit, (NODE *)NULL); } break; -case 51: -# line 399 "awk.y" -{ if (! can_return) yyerror("return used outside function context"); } break; -case 52: -# line 401 "awk.y" -{ yyval.nodeval = node (yypvt[-1].nodeval, Node_K_return, (NODE *)NULL); } break; -case 53: -# line 403 "awk.y" -{ yyval.nodeval = node (variable(yypvt[-4].sval,1), Node_K_delete, yypvt[-2].nodeval); } break; -case 54: -# line 405 "awk.y" -{ yyval.nodeval = yypvt[-1].nodeval; } break; -case 55: -# line 410 "awk.y" -{ yyval.nodetypeval = yypvt[-0].nodetypeval; } break; -case 56: -# line 412 "awk.y" -{ yyval.nodetypeval = yypvt[-0].nodetypeval; } break; -case 57: -# line 417 "awk.y" -{ - yyval.nodeval = node(yypvt[-3].nodeval, Node_K_if, - node(yypvt[-0].nodeval, Node_if_branches, (NODE *)NULL)); - } break; -case 58: -# line 423 "awk.y" -{ yyval.nodeval = node (yypvt[-6].nodeval, Node_K_if, - node (yypvt[-3].nodeval, Node_if_branches, yypvt[-0].nodeval)); } break; -case 59: -# line 429 "awk.y" -{ want_assign = 0; } break; -case 63: -# line 440 "awk.y" -{ yyval.nodeval = NULL; } break; -case 64: -# line 442 "awk.y" -{ yyval.nodeval = node (yypvt[-0].nodeval, Node_redirect_input, (NODE *)NULL); } break; -case 65: -# line 447 "awk.y" -{ yyval.nodeval = NULL; } break; -case 66: -# line 449 "awk.y" -{ yyval.nodeval = node (yypvt[-0].nodeval, Node_redirect_output, (NODE *)NULL); } break; -case 67: -# line 451 "awk.y" -{ yyval.nodeval = node (yypvt[-0].nodeval, Node_redirect_append, (NODE *)NULL); } break; -case 68: -# line 453 "awk.y" -{ yyval.nodeval = node (yypvt[-0].nodeval, Node_redirect_pipe, (NODE *)NULL); } break; -case 69: -# line 458 "awk.y" -{ yyval.nodeval = NULL; } break; -case 70: -# line 460 "awk.y" -{ yyval.nodeval = yypvt[-0].nodeval; } break; -case 71: -# line 465 "awk.y" -{ yyval.nodeval = make_param(yypvt[-0].sval); } break; -case 72: -# line 467 "awk.y" -{ yyval.nodeval = append_right(yypvt[-2].nodeval, make_param(yypvt[-0].sval)); yyerrok; } break; -case 73: -# line 469 "awk.y" -{ yyval.nodeval = NULL; } break; -case 74: -# line 471 "awk.y" -{ yyval.nodeval = NULL; } break; -case 75: -# line 473 "awk.y" -{ yyval.nodeval = NULL; } break; -case 76: -# line 479 "awk.y" -{ yyval.nodeval = NULL; } break; -case 77: -# line 481 "awk.y" -{ yyval.nodeval = yypvt[-0].nodeval; } break; -case 78: -# line 486 "awk.y" -{ yyval.nodeval = NULL; } break; -case 79: -# line 488 "awk.y" -{ yyval.nodeval = yypvt[-0].nodeval; } break; -case 80: -# line 493 "awk.y" -{ yyval.nodeval = node (yypvt[-0].nodeval, Node_expression_list, (NODE *)NULL); } break; -case 81: -# line 495 "awk.y" -{ - yyval.nodeval = append_right(yypvt[-2].nodeval, - node( yypvt[-0].nodeval, Node_expression_list, (NODE *)NULL)); - yyerrok; - } break; -case 82: -# line 501 "awk.y" -{ yyval.nodeval = NULL; } break; -case 83: -# line 503 "awk.y" -{ yyval.nodeval = NULL; } break; -case 84: -# line 505 "awk.y" -{ yyval.nodeval = NULL; } break; -case 85: -# line 507 "awk.y" -{ yyval.nodeval = NULL; } break; -case 86: -# line 512 "awk.y" -{ yyval.nodeval = NULL; } break; -case 87: -# line 514 "awk.y" -{ yyval.nodeval = yypvt[-0].nodeval; } break; -case 88: -# line 519 "awk.y" -{ yyval.nodeval = node (yypvt[-0].nodeval, Node_expression_list, (NODE *)NULL); } break; -case 89: -# line 521 "awk.y" -{ - yyval.nodeval = append_right(yypvt[-2].nodeval, - node( yypvt[-0].nodeval, Node_expression_list, (NODE *)NULL)); - yyerrok; - } break; -case 90: -# line 527 "awk.y" -{ yyval.nodeval = NULL; } break; -case 91: -# line 529 "awk.y" -{ yyval.nodeval = NULL; } break; -case 92: -# line 531 "awk.y" -{ yyval.nodeval = NULL; } break; -case 93: -# line 533 "awk.y" -{ yyval.nodeval = NULL; } break; -case 94: -# line 538 "awk.y" -{ want_assign = 0; } break; -case 95: -# line 540 "awk.y" -{ - if (do_lint && yypvt[-0].nodeval->type == Node_regex) - warning("Regular expression on left of assignment."); - yyval.nodeval = node (yypvt[-3].nodeval, yypvt[-2].nodetypeval, yypvt[-0].nodeval); - } break; -case 96: -# line 546 "awk.y" -{ yyval.nodeval = node (variable(yypvt[-0].sval,1), Node_in_array, yypvt[-3].nodeval); } break; -case 97: -# line 548 "awk.y" -{ - yyval.nodeval = node (yypvt[-0].nodeval, Node_K_getline, - node (yypvt[-3].nodeval, Node_redirect_pipein, (NODE *)NULL)); - } break; -case 98: -# line 553 "awk.y" -{ - if (do_lint && ! io_allowed && yypvt[-0].nodeval == NULL) - warning("non-redirected getline undefined inside BEGIN or END action"); - yyval.nodeval = node (yypvt[-1].nodeval, Node_K_getline, yypvt[-0].nodeval); - } break; -case 99: -# line 559 "awk.y" -{ yyval.nodeval = node (yypvt[-2].nodeval, Node_and, yypvt[-0].nodeval); } break; -case 100: -# line 561 "awk.y" -{ yyval.nodeval = node (yypvt[-2].nodeval, Node_or, yypvt[-0].nodeval); } break; -case 101: -# line 563 "awk.y" -{ - if (yypvt[-2].nodeval->type == Node_regex) - warning("Regular expression on left of MATCH operator."); - yyval.nodeval = node (yypvt[-2].nodeval, yypvt[-1].nodetypeval, mk_rexp(yypvt[-0].nodeval)); - } break; -case 102: -# line 569 "awk.y" -{ yyval.nodeval = yypvt[-0].nodeval; } break; -case 103: -# line 571 "awk.y" -{ - yyval.nodeval = node(node(make_number(0.0), - Node_field_spec, - (NODE *) NULL), - Node_nomatch, - yypvt[-0].nodeval); - } break; -case 104: -# line 579 "awk.y" -{ yyval.nodeval = node (variable(yypvt[-0].sval,1), Node_in_array, yypvt[-2].nodeval); } break; -case 105: -# line 581 "awk.y" -{ - if (do_lint && yypvt[-0].nodeval->type == Node_regex) - warning("Regular expression on left of comparison."); - yyval.nodeval = node (yypvt[-2].nodeval, yypvt[-1].nodetypeval, yypvt[-0].nodeval); - } break; -case 106: -# line 587 "awk.y" -{ yyval.nodeval = node (yypvt[-2].nodeval, Node_less, yypvt[-0].nodeval); } break; -case 107: -# line 589 "awk.y" -{ yyval.nodeval = node (yypvt[-2].nodeval, Node_greater, yypvt[-0].nodeval); } break; -case 108: -# line 591 "awk.y" -{ yyval.nodeval = node(yypvt[-4].nodeval, Node_cond_exp, node(yypvt[-2].nodeval, Node_if_branches, yypvt[-0].nodeval));} break; -case 109: -# line 593 "awk.y" -{ yyval.nodeval = yypvt[-0].nodeval; } break; -case 110: -# line 595 "awk.y" -{ yyval.nodeval = node (yypvt[-1].nodeval, Node_concat, yypvt[-0].nodeval); } break; -case 111: -# line 600 "awk.y" -{ want_assign = 0; } break; -case 112: -# line 602 "awk.y" -{ yyval.nodeval = node (yypvt[-3].nodeval, yypvt[-2].nodetypeval, yypvt[-0].nodeval); } break; -case 113: -# line 604 "awk.y" -{ yyval.nodeval = node (yypvt[-2].nodeval, Node_and, yypvt[-0].nodeval); } break; -case 114: -# line 606 "awk.y" -{ yyval.nodeval = node (yypvt[-2].nodeval, Node_or, yypvt[-0].nodeval); } break; -case 115: -# line 608 "awk.y" -{ - if (do_lint && ! io_allowed && yypvt[-0].nodeval == NULL) - warning("non-redirected getline undefined inside BEGIN or END action"); - yyval.nodeval = node (yypvt[-1].nodeval, Node_K_getline, yypvt[-0].nodeval); - } break; -case 116: -# line 614 "awk.y" -{ yyval.nodeval = yypvt[-0].nodeval; } break; -case 117: -# line 616 "awk.y" -{ yyval.nodeval = node((NODE *) NULL, Node_nomatch, yypvt[-0].nodeval); } break; -case 118: -# line 618 "awk.y" -{ yyval.nodeval = node (yypvt[-2].nodeval, yypvt[-1].nodetypeval, mk_rexp(yypvt[-0].nodeval)); } break; -case 119: -# line 620 "awk.y" -{ yyval.nodeval = node (variable(yypvt[-0].sval,1), Node_in_array, yypvt[-2].nodeval); } break; -case 120: -# line 622 "awk.y" -{ yyval.nodeval = node (yypvt[-2].nodeval, yypvt[-1].nodetypeval, yypvt[-0].nodeval); } break; -case 121: -# line 624 "awk.y" -{ yyval.nodeval = node(yypvt[-4].nodeval, Node_cond_exp, node(yypvt[-2].nodeval, Node_if_branches, yypvt[-0].nodeval));} break; -case 122: -# line 626 "awk.y" -{ yyval.nodeval = yypvt[-0].nodeval; } break; -case 123: -# line 628 "awk.y" -{ yyval.nodeval = node (yypvt[-1].nodeval, Node_concat, yypvt[-0].nodeval); } break; -case 126: -# line 636 "awk.y" -{ yyval.nodeval = node (yypvt[-2].nodeval, Node_exp, yypvt[-0].nodeval); } break; -case 127: -# line 638 "awk.y" -{ yyval.nodeval = node (yypvt[-2].nodeval, Node_times, yypvt[-0].nodeval); } break; -case 128: -# line 640 "awk.y" -{ yyval.nodeval = node (yypvt[-2].nodeval, Node_quotient, yypvt[-0].nodeval); } break; -case 129: -# line 642 "awk.y" -{ yyval.nodeval = node (yypvt[-2].nodeval, Node_mod, yypvt[-0].nodeval); } break; -case 130: -# line 644 "awk.y" -{ yyval.nodeval = node (yypvt[-2].nodeval, Node_plus, yypvt[-0].nodeval); } break; -case 131: -# line 646 "awk.y" -{ yyval.nodeval = node (yypvt[-2].nodeval, Node_minus, yypvt[-0].nodeval); } break; -case 132: -# line 651 "awk.y" -{ yyval.nodeval = node (yypvt[-0].nodeval, Node_not,(NODE *) NULL); } break; -case 133: -# line 653 "awk.y" -{ yyval.nodeval = yypvt[-1].nodeval; } break; -case 134: -# line 655 "awk.y" -{ - if (! io_allowed && strcmp(tokstart, "nextfile") == 0) - yyerror("nextfile() is illegal in BEGIN and END"); - } break; -case 135: -# line 660 "awk.y" -{ yyval.nodeval = snode (yypvt[-1].nodeval, Node_builtin, (int) yypvt[-4].lval); } break; -case 136: -# line 662 "awk.y" -{ yyval.nodeval = snode (yypvt[-1].nodeval, Node_builtin, (int) yypvt[-3].lval); } break; -case 137: -# line 664 "awk.y" -{ - if (do_lint) - warning("call of `length' without parentheses is not portable"); - yyval.nodeval = snode ((NODE *)NULL, Node_builtin, (int) yypvt[-0].lval); - if (do_posix) - warning( "call of `length' without parentheses is deprecated by POSIX"); - } break; -case 138: -# line 672 "awk.y" -{ - yyval.nodeval = node (yypvt[-1].nodeval, Node_func_call, make_string(yypvt[-3].sval, strlen(yypvt[-3].sval))); - } break; -case 139: -# line 676 "awk.y" -{ yyval.nodeval = node (yypvt[-0].nodeval, Node_preincrement, (NODE *)NULL); } break; -case 140: -# line 678 "awk.y" -{ yyval.nodeval = node (yypvt[-0].nodeval, Node_predecrement, (NODE *)NULL); } break; -case 141: -# line 680 "awk.y" -{ yyval.nodeval = yypvt[-0].nodeval; } break; -case 142: -# line 682 "awk.y" -{ yyval.nodeval = yypvt[-0].nodeval; } break; -case 143: -# line 685 "awk.y" -{ if (yypvt[-0].nodeval->type == Node_val) { - yypvt[-0].nodeval->numbr = -(force_number(yypvt[-0].nodeval)); - yyval.nodeval = yypvt[-0].nodeval; - } else - yyval.nodeval = node (yypvt[-0].nodeval, Node_unary_minus, (NODE *)NULL); - } break; -case 144: -# line 692 "awk.y" -{ yyval.nodeval = yypvt[-0].nodeval; } break; -case 145: -# line 697 "awk.y" -{ yyval.nodeval = node (yypvt[-1].nodeval, Node_postincrement, (NODE *)NULL); } break; -case 146: -# line 699 "awk.y" -{ yyval.nodeval = node (yypvt[-1].nodeval, Node_postdecrement, (NODE *)NULL); } break; -case 148: -# line 705 "awk.y" -{ yyval.nodeval = NULL; } break; -case 149: -# line 707 "awk.y" -{ yyval.nodeval = yypvt[-0].nodeval; } break; -case 150: -# line 712 "awk.y" -{ yyval.nodeval = variable(yypvt[-0].sval,1); } break; -case 151: -# line 714 "awk.y" -{ - if (yypvt[-1].nodeval->rnode == NULL) { - yyval.nodeval = node (variable(yypvt[-3].sval,1), Node_subscript, yypvt[-1].nodeval->lnode); - freenode(yypvt[-1].nodeval); - } else - yyval.nodeval = node (variable(yypvt[-3].sval,1), Node_subscript, yypvt[-1].nodeval); - } break; -case 152: -# line 722 "awk.y" -{ yyval.nodeval = node (yypvt[-0].nodeval, Node_field_spec, (NODE *)NULL); } break; -case 153: -# line 724 "awk.y" -{ yyval.nodeval = node (yypvt[-0].nodeval, Node_field_spec, (NODE *)NULL); } break; -case 155: -# line 732 "awk.y" -{ yyerrok; } break; -case 156: -# line 736 "awk.y" -{ yyerrok; } break; -case 159: -# line 745 "awk.y" -{ yyerrok; want_assign = 0; } break; -case 160: -# line 748 "awk.y" -{ yyerrok; } break; - } - goto yystack; /* reset registers in driver code */ -} |