aboutsummaryrefslogtreecommitdiffstats
path: root/awkgram.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2010-07-16 13:22:00 +0300
committerArnold D. Robbins <arnold@skeeve.com>2010-07-16 13:22:00 +0300
commit6cc7d587a710606d3fe52222707739c7cc1b8651 (patch)
tree2b6360852d8f966bd83eeb6efd8af90f8e9b83f9 /awkgram.c
parente888f1834b88270590b7e04d64c03c75863e4565 (diff)
downloadegawk-6cc7d587a710606d3fe52222707739c7cc1b8651.tar.gz
egawk-6cc7d587a710606d3fe52222707739c7cc1b8651.tar.bz2
egawk-6cc7d587a710606d3fe52222707739c7cc1b8651.zip
Move to gawk-3.1.3.
Diffstat (limited to 'awkgram.c')
-rw-r--r--awkgram.c1536
1 files changed, 882 insertions, 654 deletions
diff --git a/awkgram.c b/awkgram.c
index d11b4a54..29464ef0 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -72,28 +72,31 @@
LEX_ELSE = 274,
LEX_RETURN = 275,
LEX_DELETE = 276,
- LEX_WHILE = 277,
- LEX_DO = 278,
- LEX_FOR = 279,
- LEX_BREAK = 280,
- LEX_CONTINUE = 281,
- LEX_PRINT = 282,
- LEX_PRINTF = 283,
- LEX_NEXT = 284,
- LEX_EXIT = 285,
- LEX_FUNCTION = 286,
- LEX_GETLINE = 287,
- LEX_NEXTFILE = 288,
- LEX_IN = 289,
- LEX_AND = 290,
- LEX_OR = 291,
- INCREMENT = 292,
- DECREMENT = 293,
- LEX_BUILTIN = 294,
- LEX_LENGTH = 295,
- NEWLINE = 296,
- SLASH_BEFORE_EQUAL = 297,
- UNARY = 298
+ LEX_SWITCH = 277,
+ LEX_CASE = 278,
+ LEX_DEFAULT = 279,
+ LEX_WHILE = 280,
+ LEX_DO = 281,
+ LEX_FOR = 282,
+ LEX_BREAK = 283,
+ LEX_CONTINUE = 284,
+ LEX_PRINT = 285,
+ LEX_PRINTF = 286,
+ LEX_NEXT = 287,
+ LEX_EXIT = 288,
+ LEX_FUNCTION = 289,
+ LEX_GETLINE = 290,
+ LEX_NEXTFILE = 291,
+ LEX_IN = 292,
+ LEX_AND = 293,
+ LEX_OR = 294,
+ INCREMENT = 295,
+ DECREMENT = 296,
+ LEX_BUILTIN = 297,
+ LEX_LENGTH = 298,
+ NEWLINE = 299,
+ SLASH_BEFORE_EQUAL = 300,
+ UNARY = 301
};
#endif
#define FUNC_CALL 258
@@ -115,28 +118,31 @@
#define LEX_ELSE 274
#define LEX_RETURN 275
#define LEX_DELETE 276
-#define LEX_WHILE 277
-#define LEX_DO 278
-#define LEX_FOR 279
-#define LEX_BREAK 280
-#define LEX_CONTINUE 281
-#define LEX_PRINT 282
-#define LEX_PRINTF 283
-#define LEX_NEXT 284
-#define LEX_EXIT 285
-#define LEX_FUNCTION 286
-#define LEX_GETLINE 287
-#define LEX_NEXTFILE 288
-#define LEX_IN 289
-#define LEX_AND 290
-#define LEX_OR 291
-#define INCREMENT 292
-#define DECREMENT 293
-#define LEX_BUILTIN 294
-#define LEX_LENGTH 295
-#define NEWLINE 296
-#define SLASH_BEFORE_EQUAL 297
-#define UNARY 298
+#define LEX_SWITCH 277
+#define LEX_CASE 278
+#define LEX_DEFAULT 279
+#define LEX_WHILE 280
+#define LEX_DO 281
+#define LEX_FOR 282
+#define LEX_BREAK 283
+#define LEX_CONTINUE 284
+#define LEX_PRINT 285
+#define LEX_PRINTF 286
+#define LEX_NEXT 287
+#define LEX_EXIT 288
+#define LEX_FUNCTION 289
+#define LEX_GETLINE 290
+#define LEX_NEXTFILE 291
+#define LEX_IN 292
+#define LEX_AND 293
+#define LEX_OR 294
+#define INCREMENT 295
+#define DECREMENT 296
+#define LEX_BUILTIN 297
+#define LEX_LENGTH 298
+#define NEWLINE 299
+#define SLASH_BEFORE_EQUAL 300
+#define UNARY 301
@@ -178,6 +184,7 @@ static int isassignable P((NODE *n));
static void dumpintlstr P((const char *str, size_t len));
static void dumpintlstr2 P((const char *str1, size_t len1, const char *str2, size_t len2));
static void count_args P((NODE *n));
+static int isarray P((NODE *n));
enum defref { FUNC_DEFINE, FUNC_USE };
static void func_use P((const char *name, enum defref how));
@@ -240,7 +247,7 @@ static char builtin_func[] = "@builtin";
#endif
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 109 "awkgram.y"
+#line 110 "awkgram.y"
typedef union YYSTYPE {
long lval;
AWKNUM fval;
@@ -250,7 +257,7 @@ typedef union YYSTYPE {
NODE *(*ptrval) P((void));
} YYSTYPE;
/* Line 191 of yacc.c. */
-#line 253 "y.tab.c"
+#line 260 "y.tab.c"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
@@ -262,7 +269,7 @@ typedef union YYSTYPE {
/* Line 214 of yacc.c. */
-#line 265 "y.tab.c"
+#line 272 "y.tab.c"
#if ! defined (yyoverflow) || YYERROR_VERBOSE
@@ -363,20 +370,20 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 5
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 878
+#define YYLAST 1008
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 64
+#define YYNTOKENS 67
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 48
+#define YYNNTS 53
/* YYNRULES -- Number of rules. */
-#define YYNRULES 142
+#define YYNRULES 155
/* YYNRULES -- Number of states. */
-#define YYNSTATES 264
+#define YYNSTATES 293
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 298
+#define YYMAXUTOK 301
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -387,16 +394,16 @@ static const unsigned 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, 53, 2, 2, 56, 52, 2, 2,
- 57, 58, 50, 48, 45, 49, 2, 51, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 44, 63,
- 46, 2, 47, 43, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 56, 2, 2, 59, 55, 2, 2,
+ 60, 61, 53, 51, 48, 52, 2, 54, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 47, 66,
+ 49, 2, 50, 46, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 59, 2, 60, 55, 2, 2, 2, 2, 2,
+ 2, 62, 2, 63, 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, 61, 2, 62, 2, 2, 2, 2,
+ 2, 2, 2, 64, 2, 65, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -413,7 +420,8 @@ static const unsigned char yytranslate[] =
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 54
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 57
};
#if YYDEBUG
@@ -424,89 +432,95 @@ static const unsigned short yyprhs[] =
0, 0, 3, 7, 8, 11, 14, 17, 20, 23,
24, 26, 30, 32, 34, 40, 42, 44, 46, 48,
50, 51, 59, 60, 64, 66, 68, 69, 72, 75,
- 77, 80, 83, 87, 89, 96, 105, 114, 127, 139,
- 142, 145, 148, 151, 155, 156, 161, 164, 165, 170,
- 176, 179, 184, 186, 187, 189, 191, 193, 195, 201,
- 202, 203, 207, 214, 224, 226, 229, 230, 232, 233,
- 236, 237, 239, 241, 245, 247, 250, 254, 255, 257,
- 258, 260, 262, 266, 268, 271, 275, 279, 283, 287,
- 291, 295, 299, 303, 309, 311, 313, 315, 318, 320,
- 322, 324, 326, 328, 331, 337, 339, 342, 344, 348,
- 352, 356, 360, 364, 368, 372, 377, 380, 383, 386,
- 390, 395, 400, 402, 407, 409, 412, 415, 417, 419,
- 422, 425, 426, 428, 430, 435, 438, 441, 444, 446,
- 447, 449, 451
+ 77, 80, 83, 87, 89, 99, 106, 115, 124, 137,
+ 149, 152, 155, 158, 161, 165, 166, 171, 174, 175,
+ 180, 186, 189, 194, 196, 197, 199, 201, 202, 205,
+ 208, 214, 219, 221, 224, 227, 229, 231, 233, 235,
+ 237, 243, 244, 245, 249, 256, 266, 268, 271, 272,
+ 274, 275, 278, 279, 281, 283, 287, 289, 292, 296,
+ 297, 299, 300, 302, 304, 308, 310, 313, 317, 321,
+ 325, 329, 333, 337, 341, 345, 351, 353, 355, 357,
+ 360, 362, 364, 366, 368, 370, 373, 379, 381, 384,
+ 386, 390, 394, 398, 402, 406, 410, 414, 419, 422,
+ 425, 428, 432, 437, 442, 444, 449, 451, 454, 457,
+ 459, 461, 464, 467, 468, 470, 472, 477, 480, 483,
+ 486, 488, 489, 491, 493, 495
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
static const yysigned_char yyrhs[] =
{
- 65, 0, -1, 90, 66, 90, -1, -1, 66, 67,
- -1, 66, 1, -1, 68, 69, -1, 68, 78, -1,
- 72, 69, -1, -1, 97, -1, 97, 45, 97, -1,
- 16, -1, 17, -1, 106, 77, 107, 109, 90, -1,
- 4, -1, 3, -1, 71, -1, 39, -1, 40, -1,
- -1, 31, 73, 70, 57, 92, 108, 90, -1, -1,
- 76, 75, 5, -1, 51, -1, 42, -1, -1, 77,
- 79, -1, 77, 1, -1, 89, -1, 110, 90, -1,
- 110, 90, -1, 106, 77, 107, -1, 88, -1, 22,
- 57, 97, 108, 90, 79, -1, 23, 90, 79, 22,
- 57, 97, 108, 90, -1, 24, 57, 4, 34, 4,
- 108, 90, 79, -1, 24, 57, 83, 110, 90, 97,
- 110, 90, 83, 108, 90, 79, -1, 24, 57, 83,
- 110, 90, 110, 90, 83, 108, 90, 79, -1, 25,
- 78, -1, 26, 78, -1, 29, 78, -1, 33, 78,
- -1, 30, 94, 78, -1, -1, 20, 80, 94, 78,
- -1, 81, 78, -1, -1, 84, 82, 85, 86, -1,
- 21, 4, 59, 96, 60, -1, 21, 4, -1, 21,
- 57, 4, 58, -1, 97, -1, -1, 81, -1, 27,
- -1, 28, -1, 95, -1, 57, 97, 111, 96, 108,
- -1, -1, -1, 10, 87, 101, -1, 18, 57, 97,
- 108, 90, 79, -1, 18, 57, 97, 108, 90, 79,
- 19, 90, 79, -1, 41, -1, 89, 41, -1, -1,
- 89, -1, -1, 46, 102, -1, -1, 93, -1, 4,
- -1, 93, 111, 4, -1, 1, -1, 93, 1, -1,
- 93, 111, 1, -1, -1, 97, -1, -1, 96, -1,
- 97, -1, 96, 111, 97, -1, 1, -1, 96, 1,
- -1, 96, 1, 97, -1, 96, 111, 1, -1, 105,
- 98, 97, -1, 97, 35, 97, -1, 97, 36, 97,
- -1, 97, 14, 97, -1, 97, 34, 4, -1, 97,
- 100, 97, -1, 97, 43, 97, 44, 97, -1, 101,
- -1, 13, -1, 12, -1, 42, 13, -1, 9, -1,
- 46, -1, 99, -1, 47, -1, 74, -1, 53, 74,
- -1, 57, 96, 108, 34, 4, -1, 102, -1, 101,
- 102, -1, 103, -1, 102, 55, 102, -1, 102, 50,
- 102, -1, 102, 51, 102, -1, 102, 52, 102, -1,
- 102, 48, 102, -1, 102, 49, 102, -1, 32, 104,
- 91, -1, 102, 11, 32, 104, -1, 105, 37, -1,
- 105, 38, -1, 53, 102, -1, 57, 97, 108, -1,
- 39, 57, 95, 108, -1, 40, 57, 95, 108, -1,
- 40, -1, 3, 57, 95, 108, -1, 105, -1, 37,
- 105, -1, 38, 105, -1, 7, -1, 8, -1, 49,
- 102, -1, 48, 102, -1, -1, 105, -1, 4, -1,
- 4, 59, 96, 60, -1, 56, 103, -1, 61, 90,
- -1, 62, 90, -1, 58, -1, -1, 110, -1, 63,
- -1, 45, 90, -1
+ 68, 0, -1, 97, 69, 97, -1, -1, 69, 70,
+ -1, 69, 1, -1, 71, 72, -1, 71, 81, -1,
+ 75, 72, -1, -1, 104, -1, 104, 48, 104, -1,
+ 16, -1, 17, -1, 113, 80, 114, 116, 97, -1,
+ 4, -1, 3, -1, 74, -1, 42, -1, 43, -1,
+ -1, 34, 76, 73, 60, 99, 115, 97, -1, -1,
+ 79, 78, 5, -1, 54, -1, 45, -1, -1, 80,
+ 82, -1, 80, 1, -1, 96, -1, 117, 97, -1,
+ 117, 97, -1, 113, 80, 114, -1, 95, -1, 22,
+ 60, 104, 115, 97, 113, 87, 97, 114, -1, 25,
+ 60, 104, 115, 97, 82, -1, 26, 97, 82, 25,
+ 60, 104, 115, 97, -1, 27, 60, 4, 37, 4,
+ 115, 97, 82, -1, 27, 60, 86, 117, 97, 104,
+ 117, 97, 86, 115, 97, 82, -1, 27, 60, 86,
+ 117, 97, 117, 97, 86, 115, 97, 82, -1, 28,
+ 81, -1, 29, 81, -1, 32, 81, -1, 36, 81,
+ -1, 33, 101, 81, -1, -1, 20, 83, 101, 81,
+ -1, 84, 81, -1, -1, 91, 85, 92, 93, -1,
+ 21, 4, 62, 103, 63, -1, 21, 4, -1, 21,
+ 60, 4, 61, -1, 104, -1, -1, 84, -1, 88,
+ -1, -1, 88, 89, -1, 88, 1, -1, 23, 90,
+ 118, 97, 80, -1, 24, 118, 97, 80, -1, 7,
+ -1, 52, 7, -1, 51, 7, -1, 8, -1, 77,
+ -1, 30, -1, 31, -1, 102, -1, 60, 104, 119,
+ 103, 115, -1, -1, -1, 10, 94, 108, -1, 18,
+ 60, 104, 115, 97, 82, -1, 18, 60, 104, 115,
+ 97, 82, 19, 97, 82, -1, 44, -1, 96, 44,
+ -1, -1, 96, -1, -1, 49, 109, -1, -1, 100,
+ -1, 4, -1, 100, 119, 4, -1, 1, -1, 100,
+ 1, -1, 100, 119, 1, -1, -1, 104, -1, -1,
+ 103, -1, 104, -1, 103, 119, 104, -1, 1, -1,
+ 103, 1, -1, 103, 1, 104, -1, 103, 119, 1,
+ -1, 112, 105, 104, -1, 104, 38, 104, -1, 104,
+ 39, 104, -1, 104, 14, 104, -1, 104, 37, 4,
+ -1, 104, 107, 104, -1, 104, 46, 104, 47, 104,
+ -1, 108, -1, 13, -1, 12, -1, 45, 13, -1,
+ 9, -1, 49, -1, 106, -1, 50, -1, 77, -1,
+ 56, 77, -1, 60, 103, 115, 37, 4, -1, 109,
+ -1, 108, 109, -1, 110, -1, 109, 58, 109, -1,
+ 109, 53, 109, -1, 109, 54, 109, -1, 109, 55,
+ 109, -1, 109, 51, 109, -1, 109, 52, 109, -1,
+ 35, 111, 98, -1, 109, 11, 35, 111, -1, 112,
+ 40, -1, 112, 41, -1, 56, 109, -1, 60, 104,
+ 115, -1, 42, 60, 102, 115, -1, 43, 60, 102,
+ 115, -1, 43, -1, 3, 60, 102, 115, -1, 112,
+ -1, 40, 112, -1, 41, 112, -1, 7, -1, 8,
+ -1, 52, 109, -1, 51, 109, -1, -1, 112, -1,
+ 4, -1, 4, 62, 103, 63, -1, 59, 110, -1,
+ 64, 97, -1, 65, 97, -1, 61, -1, -1, 117,
+ -1, 66, -1, 47, -1, 48, 97, -1
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const unsigned short yyrline[] =
{
- 0, 170, 170, 176, 178, 183, 196, 200, 215, 226,
+ 0, 171, 171, 177, 179, 184, 196, 200, 215, 226,
229, 233, 243, 248, 256, 261, 263, 265, 276, 277,
282, 281, 305, 304, 327, 328, 333, 334, 352, 357,
- 358, 362, 364, 366, 368, 370, 372, 412, 416, 421,
- 424, 427, 436, 456, 459, 458, 465, 477, 477, 508,
- 510, 524, 539, 545, 546, 551, 552, 560, 561, 567,
- 572, 572, 583, 588, 595, 596, 599, 601, 606, 607,
- 613, 614, 619, 621, 623, 625, 627, 634, 635, 641,
- 642, 647, 649, 655, 657, 659, 661, 666, 672, 674,
- 676, 682, 684, 690, 692, 697, 699, 701, 706, 708,
- 712, 713, 718, 720, 728, 730, 732, 737, 739, 741,
- 743, 745, 747, 749, 751, 757, 762, 764, 769, 771,
- 773, 776, 778, 786, 794, 795, 797, 799, 801, 804,
- 812, 824, 825, 830, 832, 842, 847, 851, 855, 858,
- 860, 864, 867
+ 358, 362, 364, 366, 368, 370, 372, 374, 416, 420,
+ 425, 428, 431, 440, 460, 463, 462, 469, 481, 481,
+ 512, 514, 528, 543, 549, 550, 555, 608, 609, 626,
+ 631, 633, 638, 640, 645, 647, 649, 654, 655, 663,
+ 664, 670, 675, 675, 686, 691, 698, 699, 702, 704,
+ 709, 710, 716, 717, 722, 724, 726, 728, 730, 737,
+ 738, 744, 745, 750, 752, 758, 760, 762, 764, 769,
+ 775, 777, 779, 785, 787, 793, 795, 800, 802, 804,
+ 809, 811, 815, 816, 821, 823, 831, 833, 835, 840,
+ 842, 844, 846, 848, 850, 852, 854, 860, 865, 867,
+ 872, 874, 876, 879, 881, 889, 897, 898, 900, 902,
+ 904, 907, 915, 927, 928, 933, 935, 949, 954, 958,
+ 962, 965, 967, 971, 975, 978
};
#endif
@@ -518,22 +532,24 @@ static const char *const yytname[] =
"$end", "error", "$undefined", "FUNC_CALL", "NAME", "REGEXP", "ERROR",
"YNUMBER", "YSTRING", "RELOP", "IO_OUT", "IO_IN", "ASSIGNOP", "ASSIGN",
"MATCHOP", "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_NEXTFILE", "LEX_IN",
- "LEX_AND", "LEX_OR", "INCREMENT", "DECREMENT", "LEX_BUILTIN",
- "LEX_LENGTH", "NEWLINE", "SLASH_BEFORE_EQUAL", "'?'", "':'", "','",
- "'<'", "'>'", "'+'", "'-'", "'*'", "'/'", "'%'", "'!'", "UNARY", "'^'",
- "'$'", "'('", "')'", "'['", "']'", "'{'", "'}'", "';'", "$accept",
- "start", "program", "rule", "pattern", "action", "func_name",
- "lex_builtin", "function_prologue", "@1", "regexp", "@2", "a_slash",
- "statements", "statement_term", "statement", "@3", "simple_stmt", "@4",
- "opt_simple_stmt", "print", "print_expression_list", "output_redir",
- "@5", "if_statement", "nls", "opt_nls", "input_redir", "opt_param_list",
- "param_list", "opt_exp", "opt_expression_list", "expression_list",
- "exp", "assign_operator", "relop_or_less", "a_relop", "common_exp",
- "simp_exp", "non_post_simp_exp", "opt_variable", "variable", "l_brace",
- "r_brace", "r_paren", "opt_semi", "semi", "comma", 0
+ "LEX_RETURN", "LEX_DELETE", "LEX_SWITCH", "LEX_CASE", "LEX_DEFAULT",
+ "LEX_WHILE", "LEX_DO", "LEX_FOR", "LEX_BREAK", "LEX_CONTINUE",
+ "LEX_PRINT", "LEX_PRINTF", "LEX_NEXT", "LEX_EXIT", "LEX_FUNCTION",
+ "LEX_GETLINE", "LEX_NEXTFILE", "LEX_IN", "LEX_AND", "LEX_OR",
+ "INCREMENT", "DECREMENT", "LEX_BUILTIN", "LEX_LENGTH", "NEWLINE",
+ "SLASH_BEFORE_EQUAL", "'?'", "':'", "','", "'<'", "'>'", "'+'", "'-'",
+ "'*'", "'/'", "'%'", "'!'", "UNARY", "'^'", "'$'", "'('", "')'", "'['",
+ "']'", "'{'", "'}'", "';'", "$accept", "start", "program", "rule",
+ "pattern", "action", "func_name", "lex_builtin", "function_prologue",
+ "@1", "regexp", "@2", "a_slash", "statements", "statement_term",
+ "statement", "@3", "simple_stmt", "@4", "opt_simple_stmt",
+ "switch_body", "case_statements", "case_statement", "case_value",
+ "print", "print_expression_list", "output_redir", "@5", "if_statement",
+ "nls", "opt_nls", "input_redir", "opt_param_list", "param_list",
+ "opt_exp", "opt_expression_list", "expression_list", "exp",
+ "assign_operator", "relop_or_less", "a_relop", "common_exp", "simp_exp",
+ "non_post_simp_exp", "opt_variable", "variable", "l_brace", "r_brace",
+ "r_paren", "opt_semi", "semi", "colon", "comma", 0
};
#endif
@@ -546,30 +562,31 @@ static const unsigned short yytoknum[] =
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 63, 58, 44, 60, 62, 43, 45,
- 42, 47, 37, 33, 298, 94, 36, 40, 41, 91,
- 93, 123, 125, 59
+ 295, 296, 297, 298, 299, 300, 63, 58, 44, 60,
+ 62, 43, 45, 42, 47, 37, 33, 301, 94, 36,
+ 40, 41, 91, 93, 123, 125, 59
};
# endif
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const unsigned char yyr1[] =
{
- 0, 64, 65, 66, 66, 66, 67, 67, 67, 68,
- 68, 68, 68, 68, 69, 70, 70, 70, 71, 71,
- 73, 72, 75, 74, 76, 76, 77, 77, 77, 78,
- 78, 79, 79, 79, 79, 79, 79, 79, 79, 79,
- 79, 79, 79, 79, 80, 79, 79, 82, 81, 81,
- 81, 81, 81, 83, 83, 84, 84, 85, 85, 86,
- 87, 86, 88, 88, 89, 89, 90, 90, 91, 91,
- 92, 92, 93, 93, 93, 93, 93, 94, 94, 95,
- 95, 96, 96, 96, 96, 96, 96, 97, 97, 97,
- 97, 97, 97, 97, 97, 98, 98, 98, 99, 99,
- 100, 100, 101, 101, 101, 101, 101, 102, 102, 102,
- 102, 102, 102, 102, 102, 102, 102, 102, 103, 103,
- 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
- 103, 104, 104, 105, 105, 105, 106, 107, 108, 109,
- 109, 110, 111
+ 0, 67, 68, 69, 69, 69, 70, 70, 70, 71,
+ 71, 71, 71, 71, 72, 73, 73, 73, 74, 74,
+ 76, 75, 78, 77, 79, 79, 80, 80, 80, 81,
+ 81, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 83, 82, 82, 85, 84,
+ 84, 84, 84, 84, 86, 86, 87, 88, 88, 88,
+ 89, 89, 90, 90, 90, 90, 90, 91, 91, 92,
+ 92, 93, 94, 93, 95, 95, 96, 96, 97, 97,
+ 98, 98, 99, 99, 100, 100, 100, 100, 100, 101,
+ 101, 102, 102, 103, 103, 103, 103, 103, 103, 104,
+ 104, 104, 104, 104, 104, 104, 104, 105, 105, 105,
+ 106, 106, 107, 107, 108, 108, 108, 108, 108, 109,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 111, 111, 112, 112, 112, 113, 114,
+ 115, 116, 116, 117, 118, 119
};
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
@@ -578,18 +595,19 @@ static const unsigned char yyr2[] =
0, 2, 3, 0, 2, 2, 2, 2, 2, 0,
1, 3, 1, 1, 5, 1, 1, 1, 1, 1,
0, 7, 0, 3, 1, 1, 0, 2, 2, 1,
- 2, 2, 3, 1, 6, 8, 8, 12, 11, 2,
- 2, 2, 2, 3, 0, 4, 2, 0, 4, 5,
- 2, 4, 1, 0, 1, 1, 1, 1, 5, 0,
- 0, 3, 6, 9, 1, 2, 0, 1, 0, 2,
- 0, 1, 1, 3, 1, 2, 3, 0, 1, 0,
- 1, 1, 3, 1, 2, 3, 3, 3, 3, 3,
- 3, 3, 3, 5, 1, 1, 1, 2, 1, 1,
- 1, 1, 1, 2, 5, 1, 2, 1, 3, 3,
- 3, 3, 3, 3, 3, 4, 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
+ 2, 2, 3, 1, 9, 6, 8, 8, 12, 11,
+ 2, 2, 2, 2, 3, 0, 4, 2, 0, 4,
+ 5, 2, 4, 1, 0, 1, 1, 0, 2, 2,
+ 5, 4, 1, 2, 2, 1, 1, 1, 1, 1,
+ 5, 0, 0, 3, 6, 9, 1, 2, 0, 1,
+ 0, 2, 0, 1, 1, 3, 1, 2, 3, 0,
+ 1, 0, 1, 1, 3, 1, 2, 3, 3, 3,
+ 3, 3, 3, 3, 3, 5, 1, 1, 1, 2,
+ 1, 1, 1, 1, 1, 2, 5, 1, 2, 1,
+ 3, 3, 3, 3, 3, 3, 3, 4, 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, 1, 2
};
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -597,309 +615,346 @@ static const unsigned char yyr2[] =
means the default is an error. */
static const unsigned char yydefact[] =
{
- 66, 64, 0, 67, 3, 1, 65, 0, 5, 0,
- 133, 127, 128, 12, 13, 20, 131, 0, 0, 0,
- 122, 25, 0, 0, 24, 0, 0, 0, 4, 0,
- 0, 102, 22, 2, 10, 94, 105, 107, 124, 0,
- 0, 0, 68, 132, 125, 126, 0, 0, 0, 0,
- 130, 124, 129, 103, 118, 135, 124, 83, 0, 81,
- 66, 141, 6, 7, 29, 26, 66, 8, 0, 98,
- 0, 0, 0, 0, 0, 0, 99, 101, 100, 0,
- 106, 0, 0, 0, 0, 0, 0, 0, 96, 95,
- 116, 117, 0, 0, 0, 0, 81, 0, 16, 15,
- 18, 19, 0, 17, 0, 114, 0, 0, 0, 84,
- 66, 138, 0, 0, 119, 136, 0, 30, 23, 90,
- 91, 88, 89, 0, 11, 92, 131, 112, 113, 109,
- 110, 111, 108, 97, 87, 123, 134, 0, 69, 120,
- 121, 85, 142, 0, 86, 82, 28, 0, 44, 0,
- 0, 66, 0, 0, 0, 55, 56, 0, 77, 0,
- 66, 27, 0, 47, 33, 52, 26, 139, 66, 0,
- 115, 74, 72, 0, 0, 104, 0, 77, 50, 0,
- 0, 0, 53, 39, 40, 41, 0, 78, 42, 137,
- 46, 0, 0, 66, 140, 31, 93, 66, 75, 0,
- 0, 0, 0, 0, 0, 0, 133, 54, 0, 43,
- 0, 59, 57, 32, 14, 21, 76, 73, 66, 45,
- 0, 51, 66, 0, 0, 66, 81, 60, 48, 0,
- 49, 0, 0, 0, 0, 0, 0, 62, 34, 0,
- 66, 0, 66, 0, 61, 66, 66, 0, 66, 53,
- 58, 0, 35, 36, 53, 0, 63, 0, 66, 66,
- 0, 0, 38, 37
+ 78, 76, 0, 79, 3, 1, 77, 0, 5, 0,
+ 145, 139, 140, 12, 13, 20, 143, 0, 0, 0,
+ 134, 25, 0, 0, 24, 0, 0, 0, 4, 0,
+ 0, 114, 22, 2, 10, 106, 117, 119, 136, 0,
+ 0, 0, 80, 144, 137, 138, 0, 0, 0, 0,
+ 142, 136, 141, 115, 130, 147, 136, 95, 0, 93,
+ 78, 153, 6, 7, 29, 26, 78, 8, 0, 110,
+ 0, 0, 0, 0, 0, 0, 111, 113, 112, 0,
+ 118, 0, 0, 0, 0, 0, 0, 0, 108, 107,
+ 128, 129, 0, 0, 0, 0, 93, 0, 16, 15,
+ 18, 19, 0, 17, 0, 126, 0, 0, 0, 96,
+ 78, 150, 0, 0, 131, 148, 0, 30, 23, 102,
+ 103, 100, 101, 0, 11, 104, 143, 124, 125, 121,
+ 122, 123, 120, 109, 99, 135, 146, 0, 81, 132,
+ 133, 97, 155, 0, 98, 94, 28, 0, 45, 0,
+ 0, 0, 78, 0, 0, 0, 67, 68, 0, 89,
+ 0, 78, 27, 0, 48, 33, 53, 26, 151, 78,
+ 0, 127, 86, 84, 0, 0, 116, 0, 89, 51,
+ 0, 0, 0, 0, 54, 40, 41, 42, 0, 90,
+ 43, 149, 47, 0, 0, 78, 152, 31, 105, 78,
+ 87, 0, 0, 0, 0, 0, 0, 0, 0, 145,
+ 55, 0, 44, 0, 71, 69, 32, 14, 21, 88,
+ 85, 78, 46, 0, 52, 78, 78, 0, 0, 78,
+ 93, 72, 49, 0, 50, 0, 0, 0, 0, 0,
+ 0, 0, 74, 57, 35, 0, 78, 0, 78, 0,
+ 73, 78, 78, 0, 78, 0, 78, 54, 70, 0,
+ 0, 59, 0, 0, 58, 36, 37, 54, 0, 75,
+ 34, 62, 65, 0, 0, 66, 0, 154, 78, 0,
+ 78, 64, 63, 78, 26, 78, 0, 26, 0, 0,
+ 39, 0, 38
};
/* YYDEFGOTO[NTERM-NUM]. */
static const short yydefgoto[] =
{
-1, 2, 7, 28, 29, 62, 102, 103, 30, 41,
- 31, 68, 32, 116, 63, 161, 177, 162, 191, 208,
- 163, 211, 228, 236, 164, 3, 4, 105, 173, 174,
- 186, 94, 95, 165, 93, 78, 79, 35, 36, 37,
- 42, 38, 166, 167, 114, 193, 168, 113
+ 31, 68, 32, 116, 63, 162, 178, 163, 193, 211,
+ 252, 253, 264, 276, 164, 214, 232, 241, 165, 3,
+ 4, 105, 174, 175, 188, 94, 95, 166, 93, 78,
+ 79, 35, 36, 37, 42, 38, 167, 168, 114, 195,
+ 169, 278, 113
};
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
-#define YYPACT_NINF -238
+#define YYPACT_NINF -236
static const short yypact[] =
{
- -26, -238, 1, -19, -238, -238, -238, 262, -238, -33,
- -32, -238, -238, -238, -238, -238, 0, 0, 0, -23,
- -13, -238, 783, 783, -238, 710, 821, 564, -238, -31,
- -24, -238, -238, -238, 737, 783, 145, -238, 369, 506,
- 564, 144, -15, -238, -238, -238, 506, 506, 783, 761,
- -14, 55, -14, -238, -14, -238, -238, -238, 7, 613,
- -26, -238, -238, -238, -19, -238, -26, -238, 41, -238,
- 761, 47, 761, 761, 761, 761, -238, -238, -238, 761,
- 145, 53, 783, 783, 783, 783, 783, 783, -238, -238,
- -238, -238, 75, 761, 36, 37, 465, 19, -238, -238,
- -238, -238, 33, -238, 783, -238, 36, 36, 613, 761,
- -26, -238, 65, 586, -238, -238, 313, -238, -238, 82,
- -238, 155, 358, 664, 465, 225, 0, 116, 116, -14,
- -14, -14, -14, -238, 465, -238, -238, 25, 237, -238,
- -238, 465, -238, 100, -238, 465, -238, 49, -238, 17,
- 50, -26, 51, -30, -30, -238, -238, -30, 761, -30,
- -26, -238, -30, -238, -238, 465, -238, 68, -26, 761,
- -238, -238, -238, 36, 39, -238, 761, 761, 54, 129,
- 761, 433, 637, -238, -238, -238, -30, 465, -238, -238,
- -238, 376, 313, -26, -238, -238, 465, -26, -238, 15,
- 613, -30, 564, 76, 613, 117, -20, -238, 68, -238,
- 564, 135, -238, -238, -238, -238, -238, -238, -26, -238,
- 27, -238, -26, 92, 146, -26, 354, -238, -238, 433,
- -238, 433, 761, 36, 484, 564, 761, 133, -238, 613,
- -26, 210, -26, 7, 783, -26, -26, 433, -26, 688,
- -238, 433, -238, -238, 688, 36, -238, 36, -26, -26,
- 433, 433, -238, -238
+ -15, -236, 31, -3, -236, -236, -236, 292, -236, -8,
+ -2, -236, -236, -236, -236, -236, 26, 26, 26, 4,
+ 6, -236, 934, 934, -236, 876, 262, 717, -236, -16,
+ 3, -236, -236, -236, 769, 934, 480, -236, 554, 656,
+ 717, 33, 49, -236, -236, -236, 656, 656, 934, 905,
+ 41, -1, 41, -236, 41, -236, -236, -236, 117, 695,
+ -15, -236, -236, -236, -3, -236, -15, -236, 101, -236,
+ 905, 103, 905, 905, 905, 905, -236, -236, -236, 905,
+ 480, 74, 934, 934, 934, 934, 934, 934, -236, -236,
+ -236, -236, 100, 905, 54, 17, 958, 32, -236, -236,
+ -236, -236, 56, -236, 934, -236, 54, 54, 695, 905,
+ -15, -236, 86, 739, -236, -236, 454, -236, -236, 133,
+ -236, 184, 166, 823, 958, 7, 26, 136, 136, 41,
+ 41, 41, 41, -236, 958, -236, -236, 43, 538, -236,
+ -236, 958, -236, 121, -236, 958, -236, 68, -236, 2,
+ 69, 70, -15, 71, 61, 61, -236, -236, 61, 905,
+ 61, -15, -236, 61, -236, -236, 958, -236, 73, -15,
+ 905, -236, -236, -236, 54, 123, -236, 905, 905, 81,
+ 131, 905, 905, 580, 793, -236, -236, -236, 61, 958,
+ -236, -236, -236, 520, 454, -15, -236, -236, 958, -15,
+ -236, 45, 695, 61, 717, 83, 695, 695, 130, -11,
+ -236, 73, -236, 717, 147, -236, -236, -236, -236, -236,
+ -236, -15, -236, 34, -236, -15, -15, 108, 169, -15,
+ 508, -236, -236, 580, -236, 3, 580, 905, 54, 634,
+ 717, 905, 155, -236, -236, 695, -15, 502, -15, 117,
+ 934, -15, -15, 19, -15, 580, -15, 847, -236, 580,
+ 111, -236, 201, 132, -236, -236, -236, 847, 54, -236,
+ -236, -236, -236, 178, 179, -236, 132, -236, -15, 54,
+ -15, -236, -236, -15, -236, -15, 580, -236, 346, 580,
+ -236, 400, -236
};
/* YYPGOTO[NTERM-NUM]. */
static const short yypgoto[] =
{
- -238, -238, -238, -238, -238, 125, -238, -238, -238, -238,
- 132, -238, -238, -3, 63, -69, -238, -173, -238, -237,
- -238, -238, -238, -238, -238, -16, -7, -238, -238, -238,
- -2, -40, -22, -4, -238, -238, -238, -57, 38, 173,
- 77, 32, 72, 13, 4, -238, -27, -149
+ -236, -236, -236, -236, -236, 165, -236, -236, -236, -236,
+ -24, -236, -236, -150, 152, -178, -236, -165, -236, -235,
+ -236, -236, -236, -236, -236, -236, -236, -236, -236, -22,
+ -7, -236, -236, -236, 21, -32, -17, 47, -236, -236,
+ -236, -41, 66, 175, 76, -14, -5, -181, 52, -236,
+ 9, -71, -130
};
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule which
number is the opposite. If zero, do what YYDEFACT says.
If YYTABLE_NINF, syntax error. */
-#define YYTABLE_NINF -81
+#define YYTABLE_NINF -93
static const short yytable[] =
{
- 33, 5, 66, 34, 10, 58, 106, 107, 109, 207,
- 1, 1, 255, 64, 224, 1, 216, 257, 97, 217,
- 109, 178, 6, 59, 39, 199, 171, 40, 109, 172,
- 60, 104, 61, 61, 46, 96, 96, 60, 109, 40,
- 198, 87, 96, 96, 47, 108, 118, -80, 43, 44,
- 45, 120, 110, 115, 51, 51, 26, 51, 56, 117,
- 50, 52, 112, 54, 110, 111, 119, 51, 121, 122,
- 123, 124, 110, 80, 179, 125, 207, 235, -80, 136,
- 51, 207, 110, -70, 110, 126, 54, 230, 133, 134,
- 137, 69, 90, 91, 111, -80, -81, -71, 135, 143,
- -80, 65, 65, 142, 175, 141, 176, 180, 182, 145,
- 139, 140, 205, 202, 51, 51, 51, 51, 51, 51,
- 127, 128, 129, 130, 131, 132, 66, 66, 76, 77,
- 66, 61, 66, 203, 221, 66, 51, 64, 64, 223,
- 194, 64, 138, 64, 181, 227, 64, 98, 99, 232,
- 233, 212, 245, 189, 187, 67, 81, 53, 43, 66,
- 237, 195, 238, 192, 69, 196, 84, 85, 86, 70,
- 64, 87, 200, 187, 66, 201, 204, 197, 253, 244,
- 220, 225, 256, 100, 101, 64, 214, 96, 58, 71,
- 215, 262, 263, 82, 83, 84, 85, 86, 96, 55,
- 87, 76, 77, 170, 218, 213, 226, 242, 222, 0,
- 0, 229, 0, 243, 248, 231, 183, 184, 234, 69,
- 185, 0, 188, 0, 70, 190, 0, 0, 239, 0,
- 241, 96, 0, 247, -81, 249, 0, 240, 251, 252,
- 0, 254, 0, 246, 71, 72, 73, 250, -81, 209,
- 0, 260, 261, 74, 0, 0, 76, 77, 0, 258,
- 0, 259, -66, 8, 219, 9, 10, 0, 51, 11,
- 12, -81, -81, 61, 0, 0, 51, 0, 13, 14,
- 0, 0, 80, 0, 0, 82, 83, 84, 85, 86,
- 0, 0, 87, 15, 16, 0, 0, 0, 0, 17,
- 18, 19, 20, 1, 21, 0, 0, 0, 0, 0,
- 22, 23, 0, 24, 146, 25, 9, 10, 26, 27,
- 11, 12, 0, -9, 0, -9, 0, 0, 0, 0,
- 0, 147, 0, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 0, 16, 159, 0, 0, 0,
+ 33, 53, 43, 44, 45, 208, 179, 64, 51, 51,
+ 58, 51, 56, 216, 106, 107, -93, 194, 109, 210,
+ 261, 51, 268, 97, 65, 65, 228, -92, 1, 1,
+ 10, 5, 279, 109, 51, 109, 98, 99, 66, 90,
+ 91, 6, 262, 263, 172, 201, 219, 173, 60, 220,
+ 61, 40, 39, 115, 34, 242, -93, -93, 244, 117,
+ 40, -92, 180, -56, 46, 110, 47, 60, 51, 51,
+ 51, 51, 51, 51, 59, 100, 101, 266, -92, 270,
+ 110, 269, 110, -92, -56, 26, 96, 96, 50, 52,
+ 51, 54, 210, 96, 96, 136, 108, 234, 104, 87,
+ 240, 80, 210, 142, -82, 1, 118, 120, 290, 126,
+ 112, 292, 43, 133, 54, 111, 137, 119, 109, 121,
+ 122, 123, 124, 143, 200, 176, 125, 61, 177, 181,
+ 182, 184, 64, 64, 288, 205, 64, 291, 64, 61,
+ 134, 64, 69, 204, 224, 183, 135, -93, 127, 128,
+ 129, 130, 131, 132, 191, 227, 141, 231, 139, 140,
+ 145, 215, 197, 66, 66, 110, 64, 66, 237, 66,
+ 138, 110, 66, 238, 251, 69, 161, 196, 111, 277,
+ 70, 64, 76, 77, -83, 281, 282, 223, 217, 84,
+ 85, 86, 218, 69, 87, 67, 58, 66, 70, 203,
+ 250, 55, 171, 71, 72, 283, 189, 0, 271, 272,
+ 0, 0, 66, 0, 233, 76, 77, 198, 235, 236,
+ 229, 71, 239, 249, 202, 189, 199, 51, 206, 207,
+ 243, 0, 0, 76, 77, 0, 51, 0, 275, 255,
+ 96, 257, 0, 0, 259, 260, 21, 265, 248, 267,
+ 0, 96, 273, 274, 221, 24, 256, 0, 225, 226,
+ 230, 0, 0, 0, 0, 9, 10, 0, 0, 11,
+ 12, 284, 0, 286, 0, 0, 287, 0, 289, 0,
+ 0, 0, 0, 0, 245, 0, 247, 96, 0, 0,
+ 246, 0, -78, 8, 0, 9, 10, 254, 0, 11,
+ 12, 258, 17, 18, 19, 20, 185, 186, 13, 14,
+ 187, 0, 190, 22, 23, 192, 80, 0, 48, 0,
+ 280, 26, 49, 0, 0, 0, 15, 16, 0, 0,
+ 0, 285, 17, 18, 19, 20, 1, 21, 0, 0,
+ 212, 0, 0, 22, 23, 0, 24, 146, 25, 9,
+ 10, 26, 27, 11, 12, 222, -9, 0, -9, 0,
+ 0, 0, 0, 0, 147, 0, 148, 149, 150, -61,
+ -61, 151, 152, 153, 154, 155, 156, 157, 158, 159,
+ 0, 16, 160, 0, 0, 0, 17, 18, 19, 20,
+ -61, 21, 0, 0, 0, 0, 0, 22, 23, 0,
+ 24, 146, 25, 9, 10, 26, 27, 11, 12, 0,
+ 60, -61, 61, 0, 0, 0, 0, 0, 147, 0,
+ 148, 149, 150, -60, -60, 151, 152, 153, 154, 155,
+ 156, 157, 158, 159, 0, 16, 160, 0, 0, 0,
+ 17, 18, 19, 20, -60, 21, 0, 0, 0, 0,
+ 0, 22, 23, 0, 24, 146, 25, 9, 10, 26,
+ 27, 11, 12, 0, 60, -60, 61, 0, 0, 0,
+ 0, 0, 147, 0, 148, 149, 150, 0, 0, 151,
+ 152, 153, 154, 155, 156, 157, 158, 159, 0, 16,
+ 160, 81, 0, 0, 17, 18, 19, 20, 0, 21,
+ 0, 0, 0, 0, 0, 22, 23, 0, 24, 0,
+ 25, 69, 0, 26, 27, 0, 70, 69, 60, 161,
+ 61, 57, 70, 9, 10, 0, 0, 11, 12, 0,
+ -91, 82, 83, 84, 85, 86, 0, 0, 87, 71,
+ 72, 73, 0, 0, 0, 71, 72, 73, 74, -93,
+ 0, 76, 77, 0, 74, 16, 110, 76, 77, 0,
+ 17, 18, 19, 20, -91, 21, 88, 89, 61, 111,
+ 0, 22, 23, 0, 24, 0, 25, 0, 0, 26,
+ 213, -91, 0, 9, 10, 0, -91, 11, 12, 82,
+ 83, 84, 85, 86, 90, 91, 87, 0, 147, 92,
+ 148, 149, 150, 0, 0, 151, 152, 153, 154, 155,
+ 156, 157, 158, 159, 0, 16, 160, 0, 0, 0,
17, 18, 19, 20, 0, 21, 0, 0, 0, 0,
- 0, 22, 23, 69, 24, 0, 25, 69, 70, 26,
- 27, 0, 70, 0, 60, 160, 61, 57, 0, 9,
- 10, 88, 89, 11, 12, 0, -79, 0, 71, 72,
- 73, 0, 71, 72, 0, 0, 0, 74, 0, 110,
- 76, 77, 0, 0, 76, 77, 90, 91, 16, 0,
- 0, 92, 111, 17, 18, 19, 20, -79, 21, 0,
- 0, 0, 0, 0, 22, 23, 0, 24, 0, 25,
- 0, 0, 26, 210, -79, 0, 9, 10, 0, -79,
- 11, 12, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 147, 0, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 0, 16, 159, 0, 0, 0,
- 17, 18, 19, 20, 69, 21, 0, 0, 0, 70,
0, 22, 23, 0, 24, 0, 25, 9, 10, 26,
- 27, 11, 12, 0, 60, 0, 61, 0, 0, 71,
- 72, 73, 0, 0, 0, 0, 0, 57, 74, 9,
- 10, 76, 77, 11, 12, 0, 16, 0, 0, 0,
- 0, 17, 18, 19, 20, 0, 21, 0, 0, 0,
- 0, 0, 22, 23, 0, 24, 0, 25, 16, 0,
- 26, 27, 0, 17, 18, 19, 20, 61, 21, 0,
- 0, 0, 0, 0, 22, 23, 0, 24, 0, 25,
- 0, 0, 26, 27, -79, 57, 0, 9, 10, 0,
- 0, 11, 12, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 144, 0, 9,
- 10, 0, 0, 11, 12, 0, 16, 0, 0, 0,
- 0, 17, 18, 19, 20, 0, 21, 0, 0, 0,
- 0, 0, 22, 23, 0, 24, 0, 25, 16, 0,
- 26, 27, 69, 17, 18, 19, 20, 70, 21, 0,
- 0, 0, 0, 0, 22, 23, 0, 24, 0, 25,
- 9, 206, 26, 27, 11, 12, 0, 71, 72, 73,
- 0, 0, 0, 0, 0, 0, 74, 0, 149, 76,
- 77, 0, 0, 0, 155, 156, 0, 0, 0, 16,
- 0, 111, 0, 69, 17, 18, 19, 20, 70, 21,
+ 27, 11, 12, 0, 60, 0, 61, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 57, 0, 9,
+ 10, 0, 0, 11, 12, 0, 0, 0, 0, 16,
+ 0, 0, 0, 0, 17, 18, 19, 20, 0, 21,
0, 0, 0, 0, 0, 22, 23, 0, 24, 0,
- 25, 9, 10, 26, 27, 11, 12, 0, 71, 72,
- 73, 0, 0, 0, 0, 0, 0, 74, 169, 149,
- 76, 77, 0, 9, 10, 155, 156, 11, 12, 0,
- 16, 0, 0, 0, 0, 17, 18, 19, 20, 0,
+ 25, 16, 0, 26, 27, 0, 17, 18, 19, 20,
+ 61, 21, 0, 0, 69, 0, 0, 22, 23, 70,
+ 24, 0, 25, 0, 0, 26, 27, -91, 57, 0,
+ 9, 10, 0, 0, 11, 12, 0, 0, 0, 0,
+ 0, 0, 71, 72, 73, 0, 0, 0, 0, 0,
+ 144, 74, 9, 10, 76, 77, 11, 12, 0, 0,
+ 0, 0, 16, 0, 0, 0, 111, 17, 18, 19,
+ 20, 0, 21, 0, 0, 0, 0, 0, 22, 23,
+ 0, 24, 0, 25, 16, 0, 26, 27, 69, 17,
+ 18, 19, 20, 70, 21, 0, 0, 0, 0, 0,
+ 22, 23, 0, 24, 0, 25, 9, 209, 26, 27,
+ 11, 12, 0, 0, 0, 0, 71, 72, 73, 0,
+ 0, 0, 0, 0, 149, 74, 0, 75, 76, 77,
+ 0, 0, 0, 156, 157, 0, 0, 0, 16, 0,
+ 0, 0, 69, 17, 18, 19, 20, 70, 21, 0,
+ 0, 0, 0, 0, 22, 23, 0, 24, 0, 25,
+ 9, 10, 26, 27, 11, 12, 0, 0, 0, 0,
+ 71, 72, 73, 0, 0, 0, 0, 0, 149, 74,
+ 170, 0, 76, 77, 0, 0, 0, 156, 157, 9,
+ 10, 0, 16, 11, 12, 0, 0, 17, 18, 19,
+ 20, 0, 21, 0, 0, 0, 0, 0, 22, 23,
+ 0, 24, 0, 25, 0, 0, 26, 27, 9, 10,
+ 0, 16, 11, 12, 0, 0, 17, 18, 19, 20,
+ 0, 21, 0, 0, 0, 0, 0, 22, 23, 0,
+ 24, 0, 48, 0, 0, 26, 49, 9, 10, 0,
+ 16, 11, 12, 0, 0, 17, 18, 19, 20, 0,
21, 0, 0, 0, 0, 0, 22, 23, 0, 24,
- 0, 25, 16, 0, 26, 27, 69, 17, 18, 19,
- 20, 70, 21, 0, 0, 0, 0, 0, 22, 23,
- 0, 24, 0, 48, 9, 10, 26, 49, 11, 12,
- 0, 71, 72, 73, 0, 0, 0, 0, 0, 0,
- 74, 0, 75, 76, 77, 0, 9, 10, 0, 0,
- 11, 12, 0, 16, 0, 0, 0, 0, 17, 18,
- 19, 20, 0, 21, 0, 0, 0, 0, 0, 22,
- 23, 0, 24, 0, 25, 16, 0, 26, 27, 0,
- 17, 18, 19, 20, 9, 10, 0, 0, 11, 12,
- 0, 22, 23, 0, 0, 0, 48, 0, 0, 26,
- 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 17, 18,
- 19, 20, 0, 0, 0, 0, 0, 0, 0, 22,
- 23, 0, 0, 0, 48, 0, 0, 26, 49
+ 0, 25, 0, 0, 26, 27, 0, 69, 0, 16,
+ 0, 0, 70, 0, 17, 18, 19, 20, 0, 0,
+ 0, 0, 0, 0, 0, 22, 23, 0, 0, 0,
+ 48, 0, 0, 26, 49, 71, 72, 73, 0, 0,
+ 0, 0, 0, 0, 74, 0, 0, 76, 77
};
static const short yycheck[] =
{
- 7, 0, 29, 7, 4, 27, 46, 47, 1, 182,
- 41, 41, 249, 29, 34, 41, 1, 254, 40, 4,
- 1, 4, 41, 27, 57, 174, 1, 59, 1, 4,
- 61, 46, 63, 63, 57, 39, 40, 61, 1, 59,
- 1, 55, 46, 47, 57, 49, 5, 10, 16, 17,
- 18, 4, 45, 60, 22, 23, 56, 25, 26, 66,
- 22, 23, 58, 25, 45, 58, 70, 35, 72, 73,
- 74, 75, 45, 35, 57, 79, 249, 226, 41, 60,
- 48, 254, 45, 58, 45, 32, 48, 60, 13, 93,
- 57, 9, 37, 38, 58, 58, 14, 58, 94, 34,
- 63, 29, 30, 110, 4, 109, 57, 57, 57, 113,
- 106, 107, 181, 59, 82, 83, 84, 85, 86, 87,
- 82, 83, 84, 85, 86, 87, 153, 154, 46, 47,
- 157, 63, 159, 4, 58, 162, 104, 153, 154, 22,
- 167, 157, 104, 159, 151, 10, 162, 3, 4, 57,
- 4, 191, 19, 160, 158, 30, 11, 25, 126, 186,
- 229, 168, 231, 166, 9, 169, 50, 51, 52, 14,
- 186, 55, 176, 177, 201, 177, 180, 173, 247, 236,
- 202, 208, 251, 39, 40, 201, 193, 191, 210, 34,
- 197, 260, 261, 48, 49, 50, 51, 52, 202, 26,
- 55, 46, 47, 126, 200, 192, 210, 234, 204, -1,
- -1, 218, -1, 235, 241, 222, 153, 154, 225, 9,
- 157, -1, 159, -1, 14, 162, -1, -1, 232, -1,
- 234, 235, -1, 240, 9, 242, -1, 233, 245, 246,
- -1, 248, -1, 239, 34, 35, 36, 243, 11, 186,
- -1, 258, 259, 43, -1, -1, 46, 47, -1, 255,
- -1, 257, 0, 1, 201, 3, 4, -1, 236, 7,
- 8, 46, 47, 63, -1, -1, 244, -1, 16, 17,
- -1, -1, 244, -1, -1, 48, 49, 50, 51, 52,
- -1, -1, 55, 31, 32, -1, -1, -1, -1, 37,
- 38, 39, 40, 41, 42, -1, -1, -1, -1, -1,
- 48, 49, -1, 51, 1, 53, 3, 4, 56, 57,
- 7, 8, -1, 61, -1, 63, -1, -1, -1, -1,
- -1, 18, -1, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, -1, 32, 33, -1, -1, -1,
- 37, 38, 39, 40, -1, 42, -1, -1, -1, -1,
- -1, 48, 49, 9, 51, -1, 53, 9, 14, 56,
- 57, -1, 14, -1, 61, 62, 63, 1, -1, 3,
- 4, 12, 13, 7, 8, -1, 10, -1, 34, 35,
- 36, -1, 34, 35, -1, -1, -1, 43, -1, 45,
- 46, 47, -1, -1, 46, 47, 37, 38, 32, -1,
- -1, 42, 58, 37, 38, 39, 40, 41, 42, -1,
- -1, -1, -1, -1, 48, 49, -1, 51, -1, 53,
- -1, -1, 56, 57, 58, -1, 3, 4, -1, 63,
- 7, 8, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 18, -1, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, -1, 32, 33, -1, -1, -1,
- 37, 38, 39, 40, 9, 42, -1, -1, -1, 14,
- -1, 48, 49, -1, 51, -1, 53, 3, 4, 56,
- 57, 7, 8, -1, 61, -1, 63, -1, -1, 34,
- 35, 36, -1, -1, -1, -1, -1, 1, 43, 3,
- 4, 46, 47, 7, 8, -1, 32, -1, -1, -1,
- -1, 37, 38, 39, 40, -1, 42, -1, -1, -1,
- -1, -1, 48, 49, -1, 51, -1, 53, 32, -1,
- 56, 57, -1, 37, 38, 39, 40, 63, 42, -1,
- -1, -1, -1, -1, 48, 49, -1, 51, -1, 53,
- -1, -1, 56, 57, 58, 1, -1, 3, 4, -1,
- -1, 7, 8, -1, -1, -1, -1, -1, -1, -1,
+ 7, 25, 16, 17, 18, 183, 4, 29, 22, 23,
+ 27, 25, 26, 194, 46, 47, 9, 167, 1, 184,
+ 1, 35, 257, 40, 29, 30, 37, 10, 44, 44,
+ 4, 0, 267, 1, 48, 1, 3, 4, 29, 40,
+ 41, 44, 23, 24, 1, 175, 1, 4, 64, 4,
+ 66, 62, 60, 60, 7, 233, 49, 50, 236, 66,
+ 62, 44, 60, 44, 60, 48, 60, 64, 82, 83,
+ 84, 85, 86, 87, 27, 42, 43, 255, 61, 260,
+ 48, 259, 48, 66, 65, 59, 39, 40, 22, 23,
+ 104, 25, 257, 46, 47, 63, 49, 63, 49, 58,
+ 230, 35, 267, 110, 61, 44, 5, 4, 286, 35,
+ 58, 289, 126, 13, 48, 61, 60, 70, 1, 72,
+ 73, 74, 75, 37, 1, 4, 79, 66, 60, 60,
+ 60, 60, 154, 155, 284, 4, 158, 287, 160, 66,
+ 93, 163, 9, 62, 61, 152, 94, 14, 82, 83,
+ 84, 85, 86, 87, 161, 25, 109, 10, 106, 107,
+ 113, 193, 169, 154, 155, 48, 188, 158, 60, 160,
+ 104, 48, 163, 4, 19, 9, 65, 168, 61, 47,
+ 14, 203, 49, 50, 61, 7, 7, 204, 195, 53,
+ 54, 55, 199, 9, 58, 30, 213, 188, 14, 178,
+ 241, 26, 126, 37, 38, 276, 159, -1, 7, 8,
+ -1, -1, 203, -1, 221, 49, 50, 170, 225, 226,
+ 211, 37, 229, 240, 177, 178, 174, 241, 181, 182,
+ 235, -1, -1, 49, 50, -1, 250, -1, 262, 246,
+ 193, 248, -1, -1, 251, 252, 45, 254, 239, 256,
+ -1, 204, 51, 52, 202, 54, 247, -1, 206, 207,
+ 213, -1, -1, -1, -1, 3, 4, -1, -1, 7,
+ 8, 278, -1, 280, -1, -1, 283, -1, 285, -1,
+ -1, -1, -1, -1, 237, -1, 239, 240, -1, -1,
+ 238, -1, 0, 1, -1, 3, 4, 245, -1, 7,
+ 8, 249, 40, 41, 42, 43, 154, 155, 16, 17,
+ 158, -1, 160, 51, 52, 163, 250, -1, 56, -1,
+ 268, 59, 60, -1, -1, -1, 34, 35, -1, -1,
+ -1, 279, 40, 41, 42, 43, 44, 45, -1, -1,
+ 188, -1, -1, 51, 52, -1, 54, 1, 56, 3,
+ 4, 59, 60, 7, 8, 203, 64, -1, 66, -1,
+ -1, -1, -1, -1, 18, -1, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ -1, 35, 36, -1, -1, -1, 40, 41, 42, 43,
+ 44, 45, -1, -1, -1, -1, -1, 51, 52, -1,
+ 54, 1, 56, 3, 4, 59, 60, 7, 8, -1,
+ 64, 65, 66, -1, -1, -1, -1, -1, 18, -1,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, -1, 35, 36, -1, -1, -1,
+ 40, 41, 42, 43, 44, 45, -1, -1, -1, -1,
+ -1, 51, 52, -1, 54, 1, 56, 3, 4, 59,
+ 60, 7, 8, -1, 64, 65, 66, -1, -1, -1,
+ -1, -1, 18, -1, 20, 21, 22, -1, -1, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, -1, 35,
+ 36, 11, -1, -1, 40, 41, 42, 43, -1, 45,
+ -1, -1, -1, -1, -1, 51, 52, -1, 54, -1,
+ 56, 9, -1, 59, 60, -1, 14, 9, 64, 65,
+ 66, 1, 14, 3, 4, -1, -1, 7, 8, -1,
+ 10, 51, 52, 53, 54, 55, -1, -1, 58, 37,
+ 38, 39, -1, -1, -1, 37, 38, 39, 46, 11,
+ -1, 49, 50, -1, 46, 35, 48, 49, 50, -1,
+ 40, 41, 42, 43, 44, 45, 12, 13, 66, 61,
+ -1, 51, 52, -1, 54, -1, 56, -1, -1, 59,
+ 60, 61, -1, 3, 4, -1, 66, 7, 8, 51,
+ 52, 53, 54, 55, 40, 41, 58, -1, 18, 45,
+ 20, 21, 22, -1, -1, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, -1, 35, 36, -1, -1, -1,
+ 40, 41, 42, 43, -1, 45, -1, -1, -1, -1,
+ -1, 51, 52, -1, 54, -1, 56, 3, 4, 59,
+ 60, 7, 8, -1, 64, -1, 66, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 1, -1, 3,
- 4, -1, -1, 7, 8, -1, 32, -1, -1, -1,
- -1, 37, 38, 39, 40, -1, 42, -1, -1, -1,
- -1, -1, 48, 49, -1, 51, -1, 53, 32, -1,
- 56, 57, 9, 37, 38, 39, 40, 14, 42, -1,
- -1, -1, -1, -1, 48, 49, -1, 51, -1, 53,
- 3, 4, 56, 57, 7, 8, -1, 34, 35, 36,
- -1, -1, -1, -1, -1, -1, 43, -1, 21, 46,
- 47, -1, -1, -1, 27, 28, -1, -1, -1, 32,
- -1, 58, -1, 9, 37, 38, 39, 40, 14, 42,
- -1, -1, -1, -1, -1, 48, 49, -1, 51, -1,
- 53, 3, 4, 56, 57, 7, 8, -1, 34, 35,
- 36, -1, -1, -1, -1, -1, -1, 43, 44, 21,
- 46, 47, -1, 3, 4, 27, 28, 7, 8, -1,
- 32, -1, -1, -1, -1, 37, 38, 39, 40, -1,
- 42, -1, -1, -1, -1, -1, 48, 49, -1, 51,
- -1, 53, 32, -1, 56, 57, 9, 37, 38, 39,
- 40, 14, 42, -1, -1, -1, -1, -1, 48, 49,
- -1, 51, -1, 53, 3, 4, 56, 57, 7, 8,
- -1, 34, 35, 36, -1, -1, -1, -1, -1, -1,
- 43, -1, 45, 46, 47, -1, 3, 4, -1, -1,
- 7, 8, -1, 32, -1, -1, -1, -1, 37, 38,
- 39, 40, -1, 42, -1, -1, -1, -1, -1, 48,
- 49, -1, 51, -1, 53, 32, -1, 56, 57, -1,
- 37, 38, 39, 40, 3, 4, -1, -1, 7, 8,
- -1, 48, 49, -1, -1, -1, 53, -1, -1, 56,
- 57, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 37, 38,
- 39, 40, -1, -1, -1, -1, -1, -1, -1, 48,
- 49, -1, -1, -1, 53, -1, -1, 56, 57
+ 4, -1, -1, 7, 8, -1, -1, -1, -1, 35,
+ -1, -1, -1, -1, 40, 41, 42, 43, -1, 45,
+ -1, -1, -1, -1, -1, 51, 52, -1, 54, -1,
+ 56, 35, -1, 59, 60, -1, 40, 41, 42, 43,
+ 66, 45, -1, -1, 9, -1, -1, 51, 52, 14,
+ 54, -1, 56, -1, -1, 59, 60, 61, 1, -1,
+ 3, 4, -1, -1, 7, 8, -1, -1, -1, -1,
+ -1, -1, 37, 38, 39, -1, -1, -1, -1, -1,
+ 1, 46, 3, 4, 49, 50, 7, 8, -1, -1,
+ -1, -1, 35, -1, -1, -1, 61, 40, 41, 42,
+ 43, -1, 45, -1, -1, -1, -1, -1, 51, 52,
+ -1, 54, -1, 56, 35, -1, 59, 60, 9, 40,
+ 41, 42, 43, 14, 45, -1, -1, -1, -1, -1,
+ 51, 52, -1, 54, -1, 56, 3, 4, 59, 60,
+ 7, 8, -1, -1, -1, -1, 37, 38, 39, -1,
+ -1, -1, -1, -1, 21, 46, -1, 48, 49, 50,
+ -1, -1, -1, 30, 31, -1, -1, -1, 35, -1,
+ -1, -1, 9, 40, 41, 42, 43, 14, 45, -1,
+ -1, -1, -1, -1, 51, 52, -1, 54, -1, 56,
+ 3, 4, 59, 60, 7, 8, -1, -1, -1, -1,
+ 37, 38, 39, -1, -1, -1, -1, -1, 21, 46,
+ 47, -1, 49, 50, -1, -1, -1, 30, 31, 3,
+ 4, -1, 35, 7, 8, -1, -1, 40, 41, 42,
+ 43, -1, 45, -1, -1, -1, -1, -1, 51, 52,
+ -1, 54, -1, 56, -1, -1, 59, 60, 3, 4,
+ -1, 35, 7, 8, -1, -1, 40, 41, 42, 43,
+ -1, 45, -1, -1, -1, -1, -1, 51, 52, -1,
+ 54, -1, 56, -1, -1, 59, 60, 3, 4, -1,
+ 35, 7, 8, -1, -1, 40, 41, 42, 43, -1,
+ 45, -1, -1, -1, -1, -1, 51, 52, -1, 54,
+ -1, 56, -1, -1, 59, 60, -1, 9, -1, 35,
+ -1, -1, 14, -1, 40, 41, 42, 43, -1, -1,
+ -1, -1, -1, -1, -1, 51, 52, -1, -1, -1,
+ 56, -1, -1, 59, 60, 37, 38, 39, -1, -1,
+ -1, -1, -1, -1, 46, -1, -1, 49, 50
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const unsigned char yystos[] =
{
- 0, 41, 65, 89, 90, 0, 41, 66, 1, 3,
- 4, 7, 8, 16, 17, 31, 32, 37, 38, 39,
- 40, 42, 48, 49, 51, 53, 56, 57, 67, 68,
- 72, 74, 76, 90, 97, 101, 102, 103, 105, 57,
- 59, 73, 104, 105, 105, 105, 57, 57, 53, 57,
- 102, 105, 102, 74, 102, 103, 105, 1, 96, 97,
- 61, 63, 69, 78, 89, 106, 110, 69, 75, 9,
- 14, 34, 35, 36, 43, 45, 46, 47, 99, 100,
- 102, 11, 48, 49, 50, 51, 52, 55, 12, 13,
- 37, 38, 42, 98, 95, 96, 97, 96, 3, 4,
- 39, 40, 70, 71, 46, 91, 95, 95, 97, 1,
- 45, 58, 108, 111, 108, 90, 77, 90, 5, 97,
- 4, 97, 97, 97, 97, 97, 32, 102, 102, 102,
- 102, 102, 102, 13, 97, 108, 60, 57, 102, 108,
- 108, 97, 90, 34, 1, 97, 1, 18, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 33,
- 62, 79, 81, 84, 88, 97, 106, 107, 110, 44,
- 104, 1, 4, 92, 93, 4, 57, 80, 4, 57,
- 57, 90, 57, 78, 78, 78, 94, 97, 78, 90,
- 78, 82, 77, 109, 110, 90, 97, 108, 1, 111,
- 97, 94, 59, 4, 97, 79, 4, 81, 83, 78,
- 57, 85, 95, 107, 90, 90, 1, 4, 108, 78,
- 96, 58, 108, 22, 34, 110, 97, 10, 86, 90,
- 60, 90, 57, 4, 90, 111, 87, 79, 79, 97,
- 108, 97, 110, 96, 101, 19, 108, 90, 110, 90,
- 108, 90, 90, 79, 90, 83, 79, 83, 108, 108,
- 90, 90, 79, 79
+ 0, 44, 68, 96, 97, 0, 44, 69, 1, 3,
+ 4, 7, 8, 16, 17, 34, 35, 40, 41, 42,
+ 43, 45, 51, 52, 54, 56, 59, 60, 70, 71,
+ 75, 77, 79, 97, 104, 108, 109, 110, 112, 60,
+ 62, 76, 111, 112, 112, 112, 60, 60, 56, 60,
+ 109, 112, 109, 77, 109, 110, 112, 1, 103, 104,
+ 64, 66, 72, 81, 96, 113, 117, 72, 78, 9,
+ 14, 37, 38, 39, 46, 48, 49, 50, 106, 107,
+ 109, 11, 51, 52, 53, 54, 55, 58, 12, 13,
+ 40, 41, 45, 105, 102, 103, 104, 103, 3, 4,
+ 42, 43, 73, 74, 49, 98, 102, 102, 104, 1,
+ 48, 61, 115, 119, 115, 97, 80, 97, 5, 104,
+ 4, 104, 104, 104, 104, 104, 35, 109, 109, 109,
+ 109, 109, 109, 13, 104, 115, 63, 60, 109, 115,
+ 115, 104, 97, 37, 1, 104, 1, 18, 20, 21,
+ 22, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 36, 65, 82, 84, 91, 95, 104, 113, 114, 117,
+ 47, 111, 1, 4, 99, 100, 4, 60, 83, 4,
+ 60, 60, 60, 97, 60, 81, 81, 81, 101, 104,
+ 81, 97, 81, 85, 80, 116, 117, 97, 104, 115,
+ 1, 119, 104, 101, 62, 4, 104, 104, 82, 4,
+ 84, 86, 81, 60, 92, 102, 114, 97, 97, 1,
+ 4, 115, 81, 103, 61, 115, 115, 25, 37, 117,
+ 104, 10, 93, 97, 63, 97, 97, 60, 4, 97,
+ 119, 94, 82, 113, 82, 104, 115, 104, 117, 103,
+ 108, 19, 87, 88, 115, 97, 117, 97, 115, 97,
+ 97, 1, 23, 24, 89, 97, 82, 97, 86, 82,
+ 114, 7, 8, 51, 52, 77, 90, 47, 118, 86,
+ 115, 7, 7, 118, 97, 115, 97, 97, 80, 97,
+ 82, 80, 82
};
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
@@ -1509,14 +1564,14 @@ yyreduce:
switch (yyn)
{
case 2:
-#line 171 "awkgram.y"
+#line 172 "awkgram.y"
{
check_funcs();
}
break;
case 4:
-#line 179 "awkgram.y"
+#line 180 "awkgram.y"
{
begin_or_end_rule = parsing_end_rule = FALSE;
yyerrok;
@@ -1524,15 +1579,14 @@ yyreduce:
break;
case 5:
-#line 184 "awkgram.y"
+#line 185 "awkgram.y"
{
begin_or_end_rule = parsing_end_rule = FALSE;
- yyerrok;
/*
* If errors, give up, don't produce an infinite
- * stream of syntax error message.
+ * stream of syntax error messages.
*/
- return;
+ /* yyerrok; */
}
break;
@@ -1736,16 +1790,21 @@ yyreduce:
case 34:
#line 369 "awkgram.y"
- { yyval.nodeval = node(yyvsp[-3].nodeval, Node_K_while, yyvsp[0].nodeval); }
+ { yyval.nodeval = node(yyvsp[-6].nodeval, Node_K_switch, yyvsp[-2].nodeval); }
break;
case 35:
#line 371 "awkgram.y"
- { yyval.nodeval = node(yyvsp[-2].nodeval, Node_K_do, yyvsp[-5].nodeval); }
+ { yyval.nodeval = node(yyvsp[-3].nodeval, Node_K_while, yyvsp[0].nodeval); }
break;
case 36:
#line 373 "awkgram.y"
+ { yyval.nodeval = node(yyvsp[-2].nodeval, Node_K_do, yyvsp[-5].nodeval); }
+ break;
+
+ case 37:
+#line 375 "awkgram.y"
{
/*
* Efficiency hack. Recognize the special case of
@@ -1767,10 +1826,12 @@ yyreduce:
arr = yyvsp[0].nodeval->lnode; /* array var */
sub = yyvsp[0].nodeval->rnode->lnode; /* index var */
- if ( (arr->type == Node_var
+ if ( (arr->type == Node_var_new
|| arr->type == Node_var_array
|| arr->type == Node_param_list)
- && (sub->type == Node_var || sub->type == Node_param_list)
+ && (sub->type == Node_var_new
+ || sub->type == Node_var
+ || sub->type == Node_param_list)
&& strcmp(yyvsp[-5].sval, sub->vname) == 0
&& strcmp(yyvsp[-3].sval, arr->vname) == 0) {
yyvsp[0].nodeval->type = Node_K_delete_loop;
@@ -1787,33 +1848,33 @@ yyreduce:
}
break;
- case 37:
-#line 413 "awkgram.y"
+ case 38:
+#line 417 "awkgram.y"
{
yyval.nodeval = node(yyvsp[0].nodeval, Node_K_for, (NODE *) make_for_loop(yyvsp[-9].nodeval, yyvsp[-6].nodeval, yyvsp[-3].nodeval));
}
break;
- case 38:
-#line 417 "awkgram.y"
+ case 39:
+#line 421 "awkgram.y"
{
yyval.nodeval = node(yyvsp[0].nodeval, Node_K_for,
(NODE *) make_for_loop(yyvsp[-8].nodeval, (NODE *) NULL, yyvsp[-3].nodeval));
}
break;
- case 39:
-#line 423 "awkgram.y"
+ case 40:
+#line 427 "awkgram.y"
{ yyval.nodeval = node((NODE *) NULL, Node_K_break, (NODE *) NULL); }
break;
- case 40:
-#line 426 "awkgram.y"
+ case 41:
+#line 430 "awkgram.y"
{ yyval.nodeval = node((NODE *) NULL, Node_K_continue, (NODE *) NULL); }
break;
- case 41:
-#line 428 "awkgram.y"
+ case 42:
+#line 432 "awkgram.y"
{ NODETYPE type;
if (begin_or_end_rule)
@@ -1824,8 +1885,8 @@ yyreduce:
}
break;
- case 42:
-#line 437 "awkgram.y"
+ case 43:
+#line 441 "awkgram.y"
{
if (do_traditional) {
/*
@@ -1847,31 +1908,31 @@ yyreduce:
}
break;
- case 43:
-#line 457 "awkgram.y"
+ case 44:
+#line 461 "awkgram.y"
{ yyval.nodeval = node(yyvsp[-1].nodeval, Node_K_exit, (NODE *) NULL); }
break;
- case 44:
-#line 459 "awkgram.y"
+ case 45:
+#line 463 "awkgram.y"
{
if (! can_return)
yyerror(_("`return' used outside function context"));
}
break;
- case 45:
-#line 464 "awkgram.y"
+ case 46:
+#line 468 "awkgram.y"
{ yyval.nodeval = node(yyvsp[-1].nodeval, Node_K_return, (NODE *) NULL); }
break;
- case 47:
-#line 477 "awkgram.y"
+ case 48:
+#line 481 "awkgram.y"
{ in_print = TRUE; in_parens = 0; }
break;
- case 48:
-#line 478 "awkgram.y"
+ case 49:
+#line 482 "awkgram.y"
{
/*
* Optimization: plain `print' has no expression list, so $3 is null.
@@ -1904,13 +1965,13 @@ yyreduce:
}
break;
- case 49:
-#line 509 "awkgram.y"
+ case 50:
+#line 513 "awkgram.y"
{ yyval.nodeval = node(variable(yyvsp[-3].sval, CAN_FREE, Node_var_array), Node_K_delete, yyvsp[-1].nodeval); }
break;
- case 50:
-#line 511 "awkgram.y"
+ case 51:
+#line 515 "awkgram.y"
{
if (do_lint)
lintwarn(_("`delete array' is a gawk extension"));
@@ -1926,8 +1987,8 @@ yyreduce:
}
break;
- case 51:
-#line 525 "awkgram.y"
+ case 52:
+#line 529 "awkgram.y"
{
/* this is for tawk compatibility. maybe the warnings should always be done. */
if (do_lint)
@@ -1944,28 +2005,148 @@ yyreduce:
}
break;
- case 52:
-#line 540 "awkgram.y"
+ case 53:
+#line 544 "awkgram.y"
{ yyval.nodeval = yyvsp[0].nodeval; }
break;
- case 53:
-#line 545 "awkgram.y"
+ case 54:
+#line 549 "awkgram.y"
{ yyval.nodeval = NULL; }
break;
- case 54:
-#line 547 "awkgram.y"
+ case 55:
+#line 551 "awkgram.y"
{ yyval.nodeval = yyvsp[0].nodeval; }
break;
+ case 56:
+#line 556 "awkgram.y"
+ {
+ if (yyvsp[0].nodeval == NULL) {
+ yyval.nodeval = NULL;
+ } else {
+ NODE *dflt = NULL;
+ NODE *head = yyvsp[0].nodeval;
+ NODE *curr;
+
+ const char **case_values = NULL;
+
+ int maxcount = 128;
+ int case_count = 0;
+ int i;
+
+ emalloc(case_values, const char **, sizeof(char*) * maxcount, "switch_body");
+ for (curr = yyvsp[0].nodeval; curr != NULL; curr = curr->rnode) {
+ /* Assure that case statement values are unique. */
+ if (curr->lnode->type == Node_K_case) {
+ char *caseval;
+
+ if (curr->lnode->lnode->type == Node_regex)
+ caseval = curr->lnode->lnode->re_exp->stptr;
+ else
+ caseval = force_string(tree_eval(curr->lnode->lnode))->stptr;
+
+ for (i = 0; i < case_count; i++)
+ if (strcmp(caseval, case_values[i]) == 0)
+ yyerror(_("duplicate case values in switch body: %s"), caseval);
+
+ if (case_count >= maxcount) {
+ maxcount += 128;
+ erealloc(case_values, const char **, sizeof(char*) * maxcount, "switch_body");
+ }
+ case_values[case_count++] = caseval;
+ } else {
+ /* Otherwise save a pointer to the default node. */
+ if (dflt != NULL)
+ yyerror(_("Duplicate `default' detected in switch body"));
+ dflt = curr;
+ }
+ }
+
+ free(case_values);
+
+ /* Create the switch body. */
+ yyval.nodeval = node(head, Node_switch_body, dflt);
+ }
+ }
+ break;
+
+ case 57:
+#line 608 "awkgram.y"
+ { yyval.nodeval = NULL; }
+ break;
+
case 58:
-#line 562 "awkgram.y"
- { yyval.nodeval = node(yyvsp[-3].nodeval, Node_expression_list, yyvsp[-1].nodeval); }
+#line 610 "awkgram.y"
+ {
+ if (yyvsp[0].nodeval == NULL)
+ yyval.nodeval = yyvsp[-1].nodeval;
+ else {
+ if (do_lint && isnoeffect(yyvsp[0].nodeval->type))
+ lintwarn(_("statement may have no effect"));
+ if (yyvsp[-1].nodeval == NULL)
+ yyval.nodeval = node(yyvsp[0].nodeval, Node_case_list, (NODE *) NULL);
+ else
+ yyval.nodeval = append_right(
+ (yyvsp[-1].nodeval->type == Node_case_list ? yyvsp[-1].nodeval : node(yyvsp[-1].nodeval, Node_case_list, (NODE *) NULL)),
+ (yyvsp[0].nodeval->type == Node_case_list ? yyvsp[0].nodeval : node(yyvsp[0].nodeval, Node_case_list, (NODE *) NULL))
+ );
+ }
+ yyerrok;
+ }
break;
case 59:
-#line 567 "awkgram.y"
+#line 627 "awkgram.y"
+ { yyval.nodeval = NULL; }
+ break;
+
+ case 60:
+#line 632 "awkgram.y"
+ { yyval.nodeval = node(yyvsp[-3].nodeval, Node_K_case, yyvsp[0].nodeval); }
+ break;
+
+ case 61:
+#line 634 "awkgram.y"
+ { yyval.nodeval = node((NODE *) NULL, Node_K_default, yyvsp[0].nodeval); }
+ break;
+
+ case 62:
+#line 639 "awkgram.y"
+ { yyval.nodeval = yyvsp[0].nodeval; }
+ break;
+
+ case 63:
+#line 641 "awkgram.y"
+ {
+ yyvsp[0].nodeval->numbr = -(force_number(yyvsp[0].nodeval));
+ yyval.nodeval = yyvsp[0].nodeval;
+ }
+ break;
+
+ case 64:
+#line 646 "awkgram.y"
+ { yyval.nodeval = yyvsp[0].nodeval; }
+ break;
+
+ case 65:
+#line 648 "awkgram.y"
+ { yyval.nodeval = yyvsp[0].nodeval; }
+ break;
+
+ case 66:
+#line 650 "awkgram.y"
+ { yyval.nodeval = yyvsp[0].nodeval; }
+ break;
+
+ case 70:
+#line 665 "awkgram.y"
+ { yyval.nodeval = node(yyvsp[-3].nodeval, Node_expression_list, yyvsp[-1].nodeval); }
+ break;
+
+ case 71:
+#line 670 "awkgram.y"
{
in_print = FALSE;
in_parens = 0;
@@ -1973,13 +2154,13 @@ yyreduce:
}
break;
- case 60:
-#line 572 "awkgram.y"
+ case 72:
+#line 675 "awkgram.y"
{ in_print = FALSE; in_parens = 0; }
break;
- case 61:
-#line 573 "awkgram.y"
+ case 73:
+#line 676 "awkgram.y"
{
yyval.nodeval = node(yyvsp[0].nodeval, yyvsp[-2].nodetypeval, (NODE *) NULL);
if (yyvsp[-2].nodetypeval == Node_redirect_twoway
@@ -1989,92 +2170,92 @@ yyreduce:
}
break;
- case 62:
-#line 584 "awkgram.y"
+ case 74:
+#line 687 "awkgram.y"
{
yyval.nodeval = node(yyvsp[-3].nodeval, Node_K_if,
node(yyvsp[0].nodeval, Node_if_branches, (NODE *) NULL));
}
break;
- case 63:
-#line 590 "awkgram.y"
+ case 75:
+#line 693 "awkgram.y"
{ yyval.nodeval = node(yyvsp[-6].nodeval, Node_K_if,
node(yyvsp[-3].nodeval, Node_if_branches, yyvsp[0].nodeval)); }
break;
- case 68:
-#line 606 "awkgram.y"
+ case 80:
+#line 709 "awkgram.y"
{ yyval.nodeval = NULL; }
break;
- case 69:
-#line 608 "awkgram.y"
+ case 81:
+#line 711 "awkgram.y"
{ yyval.nodeval = node(yyvsp[0].nodeval, Node_redirect_input, (NODE *) NULL); }
break;
- case 70:
-#line 613 "awkgram.y"
+ case 82:
+#line 716 "awkgram.y"
{ yyval.nodeval = NULL; }
break;
- case 71:
-#line 615 "awkgram.y"
+ case 83:
+#line 718 "awkgram.y"
{ yyval.nodeval = yyvsp[0].nodeval; }
break;
- case 72:
-#line 620 "awkgram.y"
+ case 84:
+#line 723 "awkgram.y"
{ yyval.nodeval = make_param(yyvsp[0].sval); }
break;
- case 73:
-#line 622 "awkgram.y"
+ case 85:
+#line 725 "awkgram.y"
{ yyval.nodeval = append_right(yyvsp[-2].nodeval, make_param(yyvsp[0].sval)); yyerrok; }
break;
- case 74:
-#line 624 "awkgram.y"
+ case 86:
+#line 727 "awkgram.y"
{ yyval.nodeval = NULL; }
break;
- case 75:
-#line 626 "awkgram.y"
+ case 87:
+#line 729 "awkgram.y"
{ yyval.nodeval = NULL; }
break;
- case 76:
-#line 628 "awkgram.y"
+ case 88:
+#line 731 "awkgram.y"
{ yyval.nodeval = NULL; }
break;
- case 77:
-#line 634 "awkgram.y"
+ case 89:
+#line 737 "awkgram.y"
{ yyval.nodeval = NULL; }
break;
- case 78:
-#line 636 "awkgram.y"
+ case 90:
+#line 739 "awkgram.y"
{ yyval.nodeval = yyvsp[0].nodeval; }
break;
- case 79:
-#line 641 "awkgram.y"
+ case 91:
+#line 744 "awkgram.y"
{ yyval.nodeval = NULL; }
break;
- case 80:
-#line 643 "awkgram.y"
+ case 92:
+#line 746 "awkgram.y"
{ yyval.nodeval = yyvsp[0].nodeval; }
break;
- case 81:
-#line 648 "awkgram.y"
+ case 93:
+#line 751 "awkgram.y"
{ yyval.nodeval = node(yyvsp[0].nodeval, Node_expression_list, (NODE *) NULL); }
break;
- case 82:
-#line 650 "awkgram.y"
+ case 94:
+#line 753 "awkgram.y"
{
yyval.nodeval = append_right(yyvsp[-2].nodeval,
node(yyvsp[0].nodeval, Node_expression_list, (NODE *) NULL));
@@ -2082,28 +2263,28 @@ yyreduce:
}
break;
- case 83:
-#line 656 "awkgram.y"
+ case 95:
+#line 759 "awkgram.y"
{ yyval.nodeval = NULL; }
break;
- case 84:
-#line 658 "awkgram.y"
+ case 96:
+#line 761 "awkgram.y"
{ yyval.nodeval = NULL; }
break;
- case 85:
-#line 660 "awkgram.y"
+ case 97:
+#line 763 "awkgram.y"
{ yyval.nodeval = NULL; }
break;
- case 86:
-#line 662 "awkgram.y"
+ case 98:
+#line 765 "awkgram.y"
{ yyval.nodeval = NULL; }
break;
- case 87:
-#line 667 "awkgram.y"
+ case 99:
+#line 770 "awkgram.y"
{
if (do_lint && yyvsp[0].nodeval->type == Node_regex)
lintwarn(_("regular expression on right of assignment"));
@@ -2111,18 +2292,18 @@ yyreduce:
}
break;
- case 88:
-#line 673 "awkgram.y"
+ case 100:
+#line 776 "awkgram.y"
{ yyval.nodeval = node(yyvsp[-2].nodeval, Node_and, yyvsp[0].nodeval); }
break;
- case 89:
-#line 675 "awkgram.y"
+ case 101:
+#line 778 "awkgram.y"
{ yyval.nodeval = node(yyvsp[-2].nodeval, Node_or, yyvsp[0].nodeval); }
break;
- case 90:
-#line 677 "awkgram.y"
+ case 102:
+#line 780 "awkgram.y"
{
if (yyvsp[-2].nodeval->type == Node_regex)
warning(_("regular expression on left of `~' or `!~' operator"));
@@ -2130,13 +2311,13 @@ yyreduce:
}
break;
- case 91:
-#line 683 "awkgram.y"
+ case 103:
+#line 786 "awkgram.y"
{ yyval.nodeval = node(variable(yyvsp[0].sval, CAN_FREE, Node_var_array), Node_in_array, yyvsp[-2].nodeval); }
break;
- case 92:
-#line 685 "awkgram.y"
+ case 104:
+#line 788 "awkgram.y"
{
if (do_lint && yyvsp[0].nodeval->type == Node_regex)
lintwarn(_("regular expression on right of comparison"));
@@ -2144,53 +2325,53 @@ yyreduce:
}
break;
- case 93:
-#line 691 "awkgram.y"
+ case 105:
+#line 794 "awkgram.y"
{ yyval.nodeval = node(yyvsp[-4].nodeval, Node_cond_exp, node(yyvsp[-2].nodeval, Node_if_branches, yyvsp[0].nodeval));}
break;
- case 94:
-#line 693 "awkgram.y"
+ case 106:
+#line 796 "awkgram.y"
{ yyval.nodeval = yyvsp[0].nodeval; }
break;
- case 95:
-#line 698 "awkgram.y"
+ case 107:
+#line 801 "awkgram.y"
{ yyval.nodetypeval = yyvsp[0].nodetypeval; }
break;
- case 96:
-#line 700 "awkgram.y"
+ case 108:
+#line 803 "awkgram.y"
{ yyval.nodetypeval = yyvsp[0].nodetypeval; }
break;
- case 97:
-#line 702 "awkgram.y"
+ case 109:
+#line 805 "awkgram.y"
{ yyval.nodetypeval = Node_assign_quotient; }
break;
- case 98:
-#line 707 "awkgram.y"
+ case 110:
+#line 810 "awkgram.y"
{ yyval.nodetypeval = yyvsp[0].nodetypeval; }
break;
- case 99:
-#line 709 "awkgram.y"
+ case 111:
+#line 812 "awkgram.y"
{ yyval.nodetypeval = Node_less; }
break;
- case 101:
-#line 714 "awkgram.y"
+ case 113:
+#line 817 "awkgram.y"
{ yyval.nodetypeval = Node_greater; }
break;
- case 102:
-#line 719 "awkgram.y"
+ case 114:
+#line 822 "awkgram.y"
{ yyval.nodeval = yyvsp[0].nodeval; }
break;
- case 103:
-#line 721 "awkgram.y"
+ case 115:
+#line 824 "awkgram.y"
{
yyval.nodeval = node(node(make_number(0.0),
Node_field_spec,
@@ -2200,53 +2381,53 @@ yyreduce:
}
break;
- case 104:
-#line 729 "awkgram.y"
+ case 116:
+#line 832 "awkgram.y"
{ yyval.nodeval = node(variable(yyvsp[0].sval, CAN_FREE, Node_var_array), Node_in_array, yyvsp[-3].nodeval); }
break;
- case 105:
-#line 731 "awkgram.y"
+ case 117:
+#line 834 "awkgram.y"
{ yyval.nodeval = yyvsp[0].nodeval; }
break;
- case 106:
-#line 733 "awkgram.y"
+ case 118:
+#line 836 "awkgram.y"
{ yyval.nodeval = node(yyvsp[-1].nodeval, Node_concat, yyvsp[0].nodeval); }
break;
- case 108:
-#line 740 "awkgram.y"
+ case 120:
+#line 843 "awkgram.y"
{ yyval.nodeval = node(yyvsp[-2].nodeval, Node_exp, yyvsp[0].nodeval); }
break;
- case 109:
-#line 742 "awkgram.y"
+ case 121:
+#line 845 "awkgram.y"
{ yyval.nodeval = node(yyvsp[-2].nodeval, Node_times, yyvsp[0].nodeval); }
break;
- case 110:
-#line 744 "awkgram.y"
+ case 122:
+#line 847 "awkgram.y"
{ yyval.nodeval = node(yyvsp[-2].nodeval, Node_quotient, yyvsp[0].nodeval); }
break;
- case 111:
-#line 746 "awkgram.y"
+ case 123:
+#line 849 "awkgram.y"
{ yyval.nodeval = node(yyvsp[-2].nodeval, Node_mod, yyvsp[0].nodeval); }
break;
- case 112:
-#line 748 "awkgram.y"
+ case 124:
+#line 851 "awkgram.y"
{ yyval.nodeval = node(yyvsp[-2].nodeval, Node_plus, yyvsp[0].nodeval); }
break;
- case 113:
-#line 750 "awkgram.y"
+ case 125:
+#line 853 "awkgram.y"
{ yyval.nodeval = node(yyvsp[-2].nodeval, Node_minus, yyvsp[0].nodeval); }
break;
- case 114:
-#line 752 "awkgram.y"
+ case 126:
+#line 855 "awkgram.y"
{
if (do_lint && parsing_end_rule && yyvsp[0].nodeval == NULL)
lintwarn(_("non-redirected `getline' undefined inside END action"));
@@ -2254,46 +2435,46 @@ yyreduce:
}
break;
- case 115:
-#line 758 "awkgram.y"
+ case 127:
+#line 861 "awkgram.y"
{
yyval.nodeval = node(yyvsp[0].nodeval, Node_K_getline,
node(yyvsp[-3].nodeval, yyvsp[-2].nodetypeval, (NODE *) NULL));
}
break;
- case 116:
-#line 763 "awkgram.y"
+ case 128:
+#line 866 "awkgram.y"
{ yyval.nodeval = node(yyvsp[-1].nodeval, Node_postincrement, (NODE *) NULL); }
break;
- case 117:
-#line 765 "awkgram.y"
+ case 129:
+#line 868 "awkgram.y"
{ yyval.nodeval = node(yyvsp[-1].nodeval, Node_postdecrement, (NODE *) NULL); }
break;
- case 118:
-#line 770 "awkgram.y"
+ case 130:
+#line 873 "awkgram.y"
{ yyval.nodeval = node(yyvsp[0].nodeval, Node_not, (NODE *) NULL); }
break;
- case 119:
-#line 772 "awkgram.y"
+ case 131:
+#line 875 "awkgram.y"
{ yyval.nodeval = yyvsp[-1].nodeval; }
break;
- case 120:
-#line 775 "awkgram.y"
+ case 132:
+#line 878 "awkgram.y"
{ yyval.nodeval = snode(yyvsp[-1].nodeval, Node_builtin, (int) yyvsp[-3].lval); }
break;
- case 121:
-#line 777 "awkgram.y"
+ case 133:
+#line 880 "awkgram.y"
{ yyval.nodeval = snode(yyvsp[-1].nodeval, Node_builtin, (int) yyvsp[-3].lval); }
break;
- case 122:
-#line 779 "awkgram.y"
+ case 134:
+#line 882 "awkgram.y"
{
if (do_lint)
lintwarn(_("call of `length' without parentheses is not portable"));
@@ -2303,8 +2484,8 @@ yyreduce:
}
break;
- case 123:
-#line 787 "awkgram.y"
+ case 135:
+#line 890 "awkgram.y"
{
yyval.nodeval = node(yyvsp[-1].nodeval, Node_func_call, make_string(yyvsp[-3].sval, strlen(yyvsp[-3].sval)));
yyval.nodeval->funcbody = NULL;
@@ -2314,28 +2495,28 @@ yyreduce:
}
break;
- case 125:
-#line 796 "awkgram.y"
+ case 137:
+#line 899 "awkgram.y"
{ yyval.nodeval = node(yyvsp[0].nodeval, Node_preincrement, (NODE *) NULL); }
break;
- case 126:
-#line 798 "awkgram.y"
+ case 138:
+#line 901 "awkgram.y"
{ yyval.nodeval = node(yyvsp[0].nodeval, Node_predecrement, (NODE *) NULL); }
break;
- case 127:
-#line 800 "awkgram.y"
+ case 139:
+#line 903 "awkgram.y"
{ yyval.nodeval = yyvsp[0].nodeval; }
break;
- case 128:
-#line 802 "awkgram.y"
+ case 140:
+#line 905 "awkgram.y"
{ yyval.nodeval = yyvsp[0].nodeval; }
break;
- case 129:
-#line 805 "awkgram.y"
+ case 141:
+#line 908 "awkgram.y"
{
if (yyvsp[0].nodeval->type == Node_val && (yyvsp[0].nodeval->flags & (STRCUR|STRING)) == 0) {
yyvsp[0].nodeval->numbr = -(force_number(yyvsp[0].nodeval));
@@ -2345,8 +2526,8 @@ yyreduce:
}
break;
- case 130:
-#line 813 "awkgram.y"
+ case 142:
+#line 916 "awkgram.y"
{
/*
* was: $$ = $2
@@ -2356,56 +2537,65 @@ yyreduce:
}
break;
- case 131:
-#line 824 "awkgram.y"
+ case 143:
+#line 927 "awkgram.y"
{ yyval.nodeval = NULL; }
break;
- case 132:
-#line 826 "awkgram.y"
+ case 144:
+#line 929 "awkgram.y"
{ yyval.nodeval = yyvsp[0].nodeval; }
break;
- case 133:
-#line 831 "awkgram.y"
- { yyval.nodeval = variable(yyvsp[0].sval, CAN_FREE, Node_var); }
+ case 145:
+#line 934 "awkgram.y"
+ { yyval.nodeval = variable(yyvsp[0].sval, CAN_FREE, Node_var_new); }
break;
- case 134:
-#line 833 "awkgram.y"
+ case 146:
+#line 936 "awkgram.y"
{
- if (yyvsp[-1].nodeval == NULL) {
+ NODE *n;
+
+ if ((n = lookup(yyvsp[-3].sval)) != NULL && ! isarray(n))
+ yyerror(_("use of non-array as array"));
+ else if (yyvsp[-1].nodeval == NULL) {
fatal(_("invalid subscript expression"));
} else if (yyvsp[-1].nodeval->rnode == NULL) {
yyval.nodeval = node(variable(yyvsp[-3].sval, CAN_FREE, Node_var_array), Node_subscript, yyvsp[-1].nodeval->lnode);
freenode(yyvsp[-1].nodeval);
} else
yyval.nodeval = node(variable(yyvsp[-3].sval, CAN_FREE, Node_var_array), Node_subscript, yyvsp[-1].nodeval);
- }
+ }
break;
- case 135:
-#line 843 "awkgram.y"
+ case 147:
+#line 950 "awkgram.y"
{ yyval.nodeval = node(yyvsp[0].nodeval, Node_field_spec, (NODE *) NULL); }
break;
- case 137:
-#line 851 "awkgram.y"
+ case 149:
+#line 958 "awkgram.y"
{ yyerrok; }
break;
- case 138:
-#line 855 "awkgram.y"
+ case 150:
+#line 962 "awkgram.y"
{ yyerrok; }
break;
- case 141:
-#line 864 "awkgram.y"
+ case 153:
+#line 971 "awkgram.y"
{ yyerrok; }
break;
- case 142:
-#line 867 "awkgram.y"
+ case 154:
+#line 975 "awkgram.y"
+ { yyerrok; }
+ break;
+
+ case 155:
+#line 978 "awkgram.y"
{ yyerrok; }
break;
@@ -2413,7 +2603,7 @@ yyreduce:
}
/* Line 991 of yacc.c. */
-#line 2414 "y.tab.c"
+#line 2604 "y.tab.c"
yyvsp -= yylen;
yyssp -= yylen;
@@ -2622,7 +2812,7 @@ yyreturn:
}
-#line 870 "awkgram.y"
+#line 981 "awkgram.y"
struct token {
@@ -2655,12 +2845,18 @@ static const struct token tokentab[] = {
{"atan2", Node_builtin, LEX_BUILTIN, NOT_OLD|A(2), do_atan2},
{"bindtextdomain", Node_builtin, LEX_BUILTIN, GAWKX|A(1)|A(2), do_bindtextdomain},
{"break", Node_K_break, LEX_BREAK, 0, 0},
+#ifdef ALLOW_SWITCH
+{"case", Node_K_case, LEX_CASE, GAWKX, 0},
+#endif
{"close", Node_builtin, LEX_BUILTIN, NOT_OLD|A(1)|A(2), do_close},
{"compl", Node_builtin, LEX_BUILTIN, GAWKX|A(1), do_compl},
{"continue", Node_K_continue, LEX_CONTINUE, 0, 0},
{"cos", Node_builtin, LEX_BUILTIN, NOT_OLD|A(1), do_cos},
{"dcgettext", Node_builtin, LEX_BUILTIN, GAWKX|A(1)|A(2)|A(3), do_dcgettext},
{"dcngettext", Node_builtin, LEX_BUILTIN, GAWKX|A(1)|A(2)|A(3)|A(4)|A(5), do_dcngettext},
+#ifdef ALLOW_SWITCH
+{"default", Node_K_default, LEX_DEFAULT, GAWKX, 0},
+#endif
{"delete", Node_K_delete, LEX_DELETE, NOT_OLD, 0},
{"do", Node_K_do, LEX_DO, NOT_OLD, 0},
{"else", Node_illegal, LEX_ELSE, 0, 0},
@@ -2703,6 +2899,9 @@ static const struct token tokentab[] = {
{"strtonum", Node_builtin, LEX_BUILTIN, GAWKX|A(1), do_strtonum},
{"sub", Node_builtin, LEX_BUILTIN, NOT_OLD|A(2)|A(3), do_sub},
{"substr", Node_builtin, LEX_BUILTIN, A(2)|A(3), do_substr},
+#ifdef ALLOW_SWITCH
+{"switch", Node_K_switch, LEX_SWITCH, GAWKX, 0},
+#endif
{"system", Node_builtin, LEX_BUILTIN, NOT_OLD|A(1), do_system},
{"systime", Node_builtin, LEX_BUILTIN, GAWKX|A(0), do_systime},
{"tolower", Node_builtin, LEX_BUILTIN, NOT_OLD|A(1), do_tolower},
@@ -3235,7 +3434,7 @@ yylex(void)
case '\\':
if ((c = nextc()) == EOF) {
yyerror(_("unterminated regexp ends with `\\' at end of file"));
- return lasttok = REGEXP; /* kludge */
+ goto end_regexp; /* kludge */
} else if (c == '\n') {
sourceline++;
continue;
@@ -3248,17 +3447,17 @@ yylex(void)
case '/': /* end of the regexp */
if (in_brack > 0)
break;
-
+end_regexp:
tokadd('\0');
yylval.sval = tokstart;
return lasttok = REGEXP;
case '\n':
pushback();
yyerror(_("unterminated regexp"));
- return lasttok = REGEXP; /* kludge */
+ goto end_regexp; /* kludge */
case EOF:
yyerror(_("unterminated regexp at end of file"));
- return lasttok = REGEXP; /* kludge */
+ goto end_regexp; /* kludge */
}
tokadd(c);
}
@@ -3807,8 +4006,6 @@ node_common(NODETYPE op)
getnode(r);
r->type = op;
r->flags = MALLOC;
- if (r->type == Node_var)
- r->flags |= UNINITIALIZED;
/* if lookahead is NL, lineno is 1 too high */
if (lexeme && *lexeme == '\n')
r->source_line = sourceline - 1;
@@ -3938,7 +4135,7 @@ snode(NODE *subn, NODETYPE op, int idx)
else
dumpintlstr(str->stptr, str->stlen);
} else if (do_intl /* --gen-po */
- && r->builtin == do_dcngettext /* dcngettext(...) */
+ && r->builtin == do_dcngettext /* dcngettext(...) */
&& subn->lnode->type == Node_val /* 1st arg is constant */
&& (subn->lnode->flags & STRCUR) != 0 /* it's a string constant */
&& subn->rnode->lnode->type == Node_val /* 2nd arg is constant too */
@@ -4185,6 +4382,8 @@ dump_vars(const char *fname)
fprintf(fp, "%.*s: ", (int) p->hlength, p->hname);
if (p->hvalue->type == Node_var_array)
fprintf(fp, "array, %ld elements\n", p->hvalue->table_size);
+ else if (p->hvalue->type == Node_var_new)
+ fprintf(fp, "unused variable\n");
else if (p->hvalue->type == Node_var)
valinfo(p->hvalue->var_value, fp);
else {
@@ -4216,12 +4415,10 @@ release_all_vars()
continue;
else if (p->hvalue->type == Node_var_array)
assoc_clear(p->hvalue);
- else if (p->hvalue->type == Node_var)
- unref(p->hvalue->var_value);
- else {
+ else if (p->hvalue->type != Node_var_new) {
NODE **lhs = get_lhs(p->hvalue, NULL, FALSE);
- unref((*lhs)->var_value);
+ unref(*lhs);
}
unref(p);
}
@@ -4365,11 +4562,11 @@ append_right(NODE *list, NODE *new)
return list;
oldlist = list;
- if (savefront == oldlist) {
- savetail = savetail->rnode = new;
- return oldlist;
- } else
+ if (savefront == oldlist)
+ list = savetail; /* Be careful: maybe list->rnode != NULL */
+ else
savefront = oldlist;
+
while (list->rnode != NULL)
list = list->rnode;
savetail = list->rnode = new;
@@ -4642,7 +4839,14 @@ variable(char *name, int can_free, NODETYPE type)
/*
* This is the only case in which we may not free the string.
*/
- return install(name, node(Nnull_string, type, (NODE *) NULL));
+ NODE *n;
+
+ if (type == Node_var)
+ n = node(Nnull_string, type, (NODE *) NULL);
+ else
+ n = node((NODE *) NULL, type, (NODE *) NULL);
+
+ return install(name, n);
}
}
if (can_free)
@@ -4718,6 +4922,7 @@ isnoeffect(NODETYPE type)
case Node_CONVFMT:
case Node_BINMODE:
case Node_LINT:
+ case Node_TEXTDOMAIN:
return TRUE;
default:
break; /* keeps gcc -Wall happy */
@@ -4732,6 +4937,7 @@ static int
isassignable(register NODE *n)
{
switch (n->type) {
+ case Node_var_new:
case Node_var:
case Node_FIELDWIDTHS:
case Node_RS:
@@ -4746,6 +4952,7 @@ isassignable(register NODE *n)
case Node_OFS:
case Node_LINT:
case Node_BINMODE:
+ case Node_TEXTDOMAIN:
case Node_field_spec:
case Node_subscript:
return TRUE;
@@ -4834,4 +5041,25 @@ count_args(NODE *tree)
save_tree->printf_count = count;
}
+/* isarray --- can this type be subscripted? */
+
+static int
+isarray(NODE *n)
+{
+ switch (n->type) {
+ case Node_var_new:
+ case Node_var_array:
+ return TRUE;
+ case Node_param_list:
+ return ((n->flags & FUNC) == 0);
+ case Node_array_ref:
+ cant_happen();
+ break;
+ default:
+ break; /* keeps gcc -Wall happy */
+ }
+
+ return FALSE;
+}
+