summaryrefslogtreecommitdiff
path: root/y.tab.c
diff options
context:
space:
mode:
Diffstat (limited to 'y.tab.c')
-rw-r--r--y.tab.c3703
1 files changed, 1797 insertions, 1906 deletions
diff --git a/y.tab.c b/y.tab.c
index dd66aa92..03f1af9d 100644
--- a/y.tab.c
+++ b/y.tab.c
@@ -1,57 +1,26 @@
-
-/* A Bison parser, made from /usr/homes/chet/src/bash/src/parse.y
- by GNU Bison version 1.25
- */
-
-#define YYBISON 1 /* Identify Bison output. */
-
-#define IF 258
-#define THEN 259
-#define ELSE 260
-#define ELIF 261
-#define FI 262
-#define CASE 263
-#define ESAC 264
-#define FOR 265
-#define SELECT 266
-#define WHILE 267
-#define UNTIL 268
-#define DO 269
-#define DONE 270
-#define FUNCTION 271
-#define COND_START 272
-#define COND_END 273
-#define COND_ERROR 274
-#define IN 275
-#define BANG 276
-#define TIME 277
-#define TIMEOPT 278
-#define WORD 279
-#define ASSIGNMENT_WORD 280
-#define NUMBER 281
-#define ARITH_CMD 282
-#define ARITH_FOR_EXPRS 283
-#define COND_CMD 284
-#define AND_AND 285
-#define OR_OR 286
-#define GREATER_GREATER 287
-#define LESS_LESS 288
-#define LESS_AND 289
-#define GREATER_AND 290
-#define SEMI_SEMI 291
-#define LESS_LESS_MINUS 292
-#define AND_GREATER 293
-#define LESS_GREATER 294
-#define GREATER_BAR 295
-#define yacc_EOF 296
-
-#line 21 "/usr/homes/chet/src/bash/src/parse.y"
-
+#ifndef lint
+static char const
+yyrcsid[] = "$FreeBSD: src/usr.bin/yacc/skeleton.c,v 1.28 2000/01/17 02:04:06 bde Exp $";
+#endif
+#include <stdlib.h>
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYLEX yylex()
+#define YYEMPTY -1
+#define yyclearin (yychar=(YYEMPTY))
+#define yyerrok (yyerrflag=0)
+#define YYRECOVERING() (yyerrflag!=0)
+static int yygrowstack();
+#define YYPREFIX "yy"
+#line 22 "/usr/homes/chet/src/bash/src/parse.y"
#include "config.h"
#include "bashtypes.h"
#include "bashansi.h"
+#include "filecntl.h"
+
#if defined (HAVE_UNISTD_H)
# include <unistd.h>
#endif
@@ -105,9 +74,6 @@
#define YYDEBUG 0
#if defined (EXTENDED_GLOB)
-#define PATTERN_CHAR(c) \
- ((c) == '@' || (c) == '*' || (c) == '+' || (c) == '?' || (c) == '!')
-
extern int extended_glob;
#endif
@@ -155,6 +121,10 @@ static void reset_readline_prompt ();
#endif
static void print_prompt ();
+#if defined (HISTORY)
+char *history_delimiting_chars ();
+#endif
+
extern int yyerror ();
/* Default prompt strings */
@@ -210,8 +180,7 @@ static int function_bstart;
static int arith_for_lineno;
static REDIRECTEE redir;
-
-#line 187 "/usr/homes/chet/src/bash/src/parse.y"
+#line 190 "/usr/homes/chet/src/bash/src/parse.y"
typedef union {
WORD_DESC *word; /* the word that we read. */
int number; /* the number that we read. */
@@ -221,1797 +190,669 @@ typedef union {
ELEMENT element;
PATTERN_LIST *pattern;
} YYSTYPE;
-#include <stdio.h>
-
-#ifndef __cplusplus
-#ifndef __STDC__
-#define const
-#endif
-#endif
-
-
-
-#define YYFINAL 279
-#define YYFLAG -32768
-#define YYNTBASE 53
-
-#define YYTRANSLATE(x) ((unsigned)(x) <= 296 ? yytranslate[x] : 87)
-
-static const char yytranslate[] = { 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 43,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 41, 2, 51,
- 52, 2, 2, 2, 48, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 42, 47,
- 2, 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, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 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, 45, 50, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 1, 2, 3, 4, 5,
- 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
- 36, 37, 38, 39, 40, 44
+#line 194 "y.tab.c"
+#define YYERRCODE 256
+#define IF 257
+#define THEN 258
+#define ELSE 259
+#define ELIF 260
+#define FI 261
+#define CASE 262
+#define ESAC 263
+#define FOR 264
+#define SELECT 265
+#define WHILE 266
+#define UNTIL 267
+#define DO 268
+#define DONE 269
+#define FUNCTION 270
+#define COND_START 271
+#define COND_END 272
+#define COND_ERROR 273
+#define IN 274
+#define BANG 275
+#define TIME 276
+#define TIMEOPT 277
+#define WORD 278
+#define ASSIGNMENT_WORD 279
+#define NUMBER 280
+#define ARITH_CMD 281
+#define ARITH_FOR_EXPRS 282
+#define COND_CMD 283
+#define AND_AND 284
+#define OR_OR 285
+#define GREATER_GREATER 286
+#define LESS_LESS 287
+#define LESS_AND 288
+#define GREATER_AND 289
+#define SEMI_SEMI 290
+#define LESS_LESS_MINUS 291
+#define AND_GREATER 292
+#define LESS_GREATER 293
+#define GREATER_BAR 294
+#define yacc_EOF 295
+const short yylhs[] = { -1,
+ 0, 0, 0, 0, 27, 27, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 26, 26, 26, 25, 25, 10, 10,
+ 1, 1, 1, 1, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 12, 12, 12, 12, 12,
+ 12, 18, 18, 18, 18, 13, 13, 13, 13, 13,
+ 13, 14, 14, 14, 19, 19, 19, 20, 20, 23,
+ 21, 21, 21, 15, 16, 17, 22, 22, 22, 31,
+ 31, 29, 29, 29, 29, 30, 30, 28, 28, 4,
+ 7, 7, 5, 5, 5, 6, 6, 6, 6, 6,
+ 6, 34, 34, 34, 33, 33, 8, 8, 8, 9,
+ 9, 9, 9, 9, 3, 3, 3, 3, 3, 2,
+ 2, 32, 32,
};
-
-#if YYDEBUG != 0
-static const short yyprhs[] = { 0,
- 0, 3, 5, 8, 10, 12, 15, 18, 21, 25,
- 29, 32, 36, 39, 43, 46, 50, 53, 57, 60,
- 64, 67, 71, 74, 78, 81, 85, 88, 92, 95,
- 99, 102, 105, 109, 111, 113, 115, 117, 120, 122,
- 125, 127, 129, 132, 134, 136, 142, 148, 150, 152,
- 154, 156, 158, 160, 162, 164, 171, 178, 186, 194,
- 205, 216, 224, 232, 239, 246, 254, 262, 273, 284,
- 291, 299, 306, 312, 319, 324, 328, 334, 342, 349,
- 353, 355, 359, 364, 371, 377, 379, 382, 387, 392,
- 398, 404, 407, 411, 413, 417, 420, 422, 425, 429,
- 433, 437, 442, 447, 452, 457, 462, 464, 466, 468,
- 470, 471, 474, 476, 479, 482, 487, 492, 496, 500,
- 502, 504, 507, 510, 514, 518, 523, 525, 527
+const short yylen[] = { 2,
+ 2, 1, 2, 1, 1, 2, 2, 2, 3, 3,
+ 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
+ 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
+ 2, 2, 3, 1, 1, 1, 1, 2, 1, 2,
+ 1, 1, 2, 1, 1, 1, 5, 5, 1, 1,
+ 1, 1, 1, 1, 1, 6, 6, 7, 7, 10,
+ 10, 7, 7, 5, 5, 6, 6, 7, 7, 10,
+ 10, 6, 7, 6, 5, 6, 4, 1, 2, 3,
+ 5, 7, 6, 3, 1, 3, 4, 6, 5, 1,
+ 2, 4, 4, 5, 5, 2, 3, 1, 3, 2,
+ 1, 2, 3, 3, 3, 4, 4, 4, 4, 4,
+ 1, 1, 1, 1, 0, 2, 1, 2, 2, 4,
+ 4, 3, 3, 1, 1, 2, 2, 3, 3, 4,
+ 1, 1, 2,
};
-
-static const short yyrhs[] = { 82,
- 43, 0, 43, 0, 1, 43, 0, 44, 0, 24,
- 0, 54, 24, 0, 46, 24, 0, 47, 24, 0,
- 26, 46, 24, 0, 26, 47, 24, 0, 32, 24,
- 0, 26, 32, 24, 0, 33, 24, 0, 26, 33,
- 24, 0, 34, 26, 0, 26, 34, 26, 0, 35,
- 26, 0, 26, 35, 26, 0, 34, 24, 0, 26,
- 34, 24, 0, 35, 24, 0, 26, 35, 24, 0,
- 37, 24, 0, 26, 37, 24, 0, 35, 48, 0,
- 26, 35, 48, 0, 34, 48, 0, 26, 34, 48,
- 0, 38, 24, 0, 26, 39, 24, 0, 39, 24,
- 0, 40, 24, 0, 26, 40, 24, 0, 24, 0,
- 25, 0, 55, 0, 55, 0, 57, 55, 0, 56,
- 0, 58, 56, 0, 58, 0, 60, 0, 60, 57,
- 0, 61, 0, 64, 0, 12, 77, 14, 77, 15,
- 0, 13, 77, 14, 77, 15, 0, 63, 0, 67,
- 0, 66, 0, 68, 0, 69, 0, 70, 0, 62,
- 0, 65, 0, 10, 24, 81, 14, 77, 15, 0,
- 10, 24, 81, 49, 77, 50, 0, 10, 24, 42,
- 81, 14, 77, 15, 0, 10, 24, 42, 81, 49,
- 77, 50, 0, 10, 24, 81, 20, 54, 80, 81,
- 14, 77, 15, 0, 10, 24, 81, 20, 54, 80,
- 81, 49, 77, 50, 0, 10, 28, 80, 81, 14,
- 77, 15, 0, 10, 28, 80, 81, 49, 77, 50,
- 0, 11, 24, 81, 14, 76, 15, 0, 11, 24,
- 81, 49, 76, 50, 0, 11, 24, 42, 81, 14,
- 76, 15, 0, 11, 24, 42, 81, 49, 76, 50,
- 0, 11, 24, 81, 20, 54, 80, 81, 14, 76,
- 15, 0, 11, 24, 81, 20, 54, 80, 81, 49,
- 76, 50, 0, 8, 24, 81, 20, 81, 9, 0,
- 8, 24, 81, 20, 74, 81, 9, 0, 8, 24,
- 81, 20, 72, 9, 0, 24, 51, 52, 81, 68,
- 0, 16, 24, 51, 52, 81, 68, 0, 16, 24,
- 81, 68, 0, 51, 77, 52, 0, 3, 77, 4,
- 77, 7, 0, 3, 77, 4, 77, 5, 77, 7,
- 0, 3, 77, 4, 77, 71, 7, 0, 49, 76,
- 50, 0, 27, 0, 17, 29, 18, 0, 6, 77,
- 4, 77, 0, 6, 77, 4, 77, 5, 77, 0,
- 6, 77, 4, 77, 71, 0, 73, 0, 74, 73,
- 0, 81, 75, 52, 77, 0, 81, 75, 52, 81,
- 0, 81, 51, 75, 52, 77, 0, 81, 51, 75,
- 52, 81, 0, 73, 36, 0, 74, 73, 36, 0,
- 24, 0, 75, 45, 24, 0, 81, 78, 0, 76,
- 0, 81, 79, 0, 79, 43, 81, 0, 79, 41,
- 81, 0, 79, 42, 81, 0, 79, 30, 81, 79,
- 0, 79, 31, 81, 79, 0, 79, 41, 81, 79,
- 0, 79, 42, 81, 79, 0, 79, 43, 81, 79,
- 0, 84, 0, 43, 0, 42, 0, 44, 0, 0,
- 81, 43, 0, 83, 0, 83, 41, 0, 83, 42,
- 0, 83, 30, 81, 83, 0, 83, 31, 81, 83,
- 0, 83, 41, 83, 0, 83, 42, 83, 0, 84,
- 0, 85, 0, 21, 85, 0, 86, 85, 0, 86,
- 21, 85, 0, 21, 86, 85, 0, 85, 45, 81,
- 85, 0, 59, 0, 22, 0, 22, 23, 0
+const short yydefred[] = { 0,
+ 0, 115, 0, 0, 0, 115, 115, 0, 0, 0,
+ 0, 0, 35, 0, 85, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 4, 0, 0, 115, 115, 0,
+ 131, 0, 124, 0, 0, 0, 0, 45, 49, 46,
+ 52, 53, 54, 55, 44, 50, 51, 36, 39, 0,
+ 3, 101, 0, 0, 115, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 133, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 11, 13, 19, 15, 27,
+ 21, 17, 25, 23, 29, 31, 32, 7, 8, 0,
+ 0, 115, 1, 115, 115, 0, 0, 34, 40, 37,
+ 0, 0, 0, 115, 116, 111, 100, 0, 0, 115,
+ 0, 115, 113, 112, 114, 115, 115, 115, 0, 115,
+ 115, 0, 0, 86, 0, 115, 12, 14, 20, 16,
+ 28, 22, 18, 26, 24, 30, 33, 9, 10, 84,
+ 80, 0, 0, 0, 0, 0, 38, 0, 0, 115,
+ 115, 115, 115, 115, 115, 0, 115, 0, 115, 0,
+ 0, 0, 0, 115, 0, 115, 0, 0, 115, 0,
+ 77, 0, 0, 120, 121, 0, 0, 115, 115, 81,
+ 0, 0, 0, 0, 0, 0, 0, 115, 0, 0,
+ 115, 115, 0, 5, 0, 0, 64, 65, 115, 115,
+ 115, 115, 0, 0, 0, 0, 47, 48, 0, 0,
+ 75, 0, 0, 83, 106, 107, 0, 0, 0, 96,
+ 0, 0, 74, 72, 98, 0, 0, 0, 0, 56,
+ 6, 115, 57, 0, 0, 0, 0, 66, 0, 115,
+ 67, 76, 82, 115, 115, 115, 115, 97, 73, 0,
+ 0, 115, 58, 59, 0, 62, 63, 68, 69, 0,
+ 0, 0, 0, 0, 115, 99, 92, 0, 115, 115,
+ 115, 115, 115, 89, 94, 0, 0, 0, 0, 0,
+ 88, 60, 61, 70, 71,
};
-
-#endif
-
-#if YYDEBUG != 0
-static const short yyrline[] = { 0,
- 237, 246, 253, 268, 278, 280, 284, 289, 294, 299,
- 304, 309, 314, 320, 326, 331, 336, 341, 346, 351,
- 356, 361, 366, 373, 380, 385, 390, 395, 400, 405,
- 410, 415, 420, 427, 429, 431, 435, 439, 450, 452,
- 456, 458, 460, 497, 499, 501, 503, 505, 507, 509,
- 511, 513, 515, 517, 519, 523, 525, 527, 529, 531,
- 533, 537, 539, 542, 546, 550, 554, 558, 562, 568,
- 570, 572, 576, 580, 583, 587, 594, 596, 598, 603,
- 607, 611, 615, 617, 619, 623, 624, 628, 630, 632,
- 634, 638, 639, 643, 645, 654, 662, 663, 669, 670,
- 677, 681, 683, 685, 692, 694, 696, 700, 701, 702,
- 705, 706, 715, 721, 730, 738, 740, 742, 749, 752,
- 756, 758, 763, 768, 773, 780, 783, 787, 789
+const short yydgoto[] = { 30,
+ 31, 32, 106, 52, 107, 108, 53, 34, 145, 36,
+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 171,
+ 46, 181, 47, 48, 101, 49, 195, 227, 187, 188,
+ 189, 50, 54, 117,
};
-#endif
-
-
-#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
-
-static const char * const yytname[] = { "$","error","$undefined.","IF","THEN",
-"ELSE","ELIF","FI","CASE","ESAC","FOR","SELECT","WHILE","UNTIL","DO","DONE",
-"FUNCTION","COND_START","COND_END","COND_ERROR","IN","BANG","TIME","TIMEOPT",
-"WORD","ASSIGNMENT_WORD","NUMBER","ARITH_CMD","ARITH_FOR_EXPRS","COND_CMD","AND_AND",
-"OR_OR","GREATER_GREATER","LESS_LESS","LESS_AND","GREATER_AND","SEMI_SEMI","LESS_LESS_MINUS",
-"AND_GREATER","LESS_GREATER","GREATER_BAR","'&'","';'","'\\n'","yacc_EOF","'|'",
-"'>'","'<'","'-'","'{'","'}'","'('","')'","inputunit","word_list","redirection",
-"simple_command_element","redirection_list","simple_command","command","shell_command",
-"for_command","arith_for_command","select_command","case_command","function_def",
-"subshell","if_command","group_command","arith_command","cond_command","elif_clause",
-"case_clause","pattern_list","case_clause_sequence","pattern","list","compound_list",
-"list0","list1","list_terminator","newline_list","simple_list","simple_list1",
-"pipeline_command","pipeline","timespec", NULL
+const short yysindex[] = { -10,
+ 2, 0, -258, -255, -246, 0, 0, -237, -249, 846,
+ -226, 15, 0, 123, 0, -211, -203, -44, -43, -199,
+ -198, -194, -193, 0, 0, -192, -191, 0, 0, 0,
+ 0, -41, 0, 78, 23, 956, 975, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 721,
+ 0, 0, -169, 71, 0, 35, -6, 39, -177, -172,
+ 61, -168, -41, 933, 0, 62, -176, -173, -30, -27,
+ -166, -163, -162, -160, -159, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, -17,
+ 69, 0, 0, 0, 0, 813, 813, 0, 0, 0,
+ 975, 933, -41, 0, 0, 0, 0, 19, -7, 0,
+ 66, 0, 0, 0, 0, 0, 0, 0, 99, 0,
+ 0, 79, 305, 0, -41, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 104, 71, 71, -247, -247, 0, -41, -195, 0,
+ 0, 0, 0, 0, 0, 4, 0, -156, 0, -145,
+ 1, 7, 12, 0, -156, 0, -144, -140, 0, 975,
+ 0, 305, -41, 0, 0, 813, 813, 0, 0, 0,
+ -138, 71, 71, 71, 71, 71, -158, 0, -129, -4,
+ 0, 0, -132, 0, -5, 16, 0, 0, 0, 0,
+ 0, 0, -126, 71, -5, 20, 0, 0, 305, 975,
+ 0, -115, -111, 0, 0, 0, -240, -240, -240, 0,
+ -142, 32, 0, 0, 0, -128, -34, -120, 26, 0,
+ 0, 0, 0, -114, 36, -107, 38, 0, 19, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, -25,
+ -113, 0, 0, 0, 29, 0, 0, 0, 0, 37,
+ -201, 71, 71, 71, 0, 0, 0, 71, 0, 0,
+ 0, 0, 0, 0, 0, 71, -100, 45, -98, 48,
+ 0, 0, 0, 0, 0,
};
-#endif
-
-static const short yyr1[] = { 0,
- 53, 53, 53, 53, 54, 54, 55, 55, 55, 55,
- 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
- 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
- 55, 55, 55, 56, 56, 56, 57, 57, 58, 58,
- 59, 59, 59, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 61, 61, 61, 61, 61,
- 61, 62, 62, 63, 63, 63, 63, 63, 63, 64,
- 64, 64, 65, 65, 65, 66, 67, 67, 67, 68,
- 69, 70, 71, 71, 71, 72, 72, 73, 73, 73,
- 73, 74, 74, 75, 75, 76, 77, 77, 78, 78,
- 78, 79, 79, 79, 79, 79, 79, 80, 80, 80,
- 81, 81, 82, 82, 82, 83, 83, 83, 83, 83,
- 84, 84, 84, 84, 84, 85, 85, 86, 86
-};
-
-static const short yyr2[] = { 0,
- 2, 1, 2, 1, 1, 2, 2, 2, 3, 3,
- 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
- 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
- 2, 2, 3, 1, 1, 1, 1, 2, 1, 2,
- 1, 1, 2, 1, 1, 5, 5, 1, 1, 1,
- 1, 1, 1, 1, 1, 6, 6, 7, 7, 10,
- 10, 7, 7, 6, 6, 7, 7, 10, 10, 6,
- 7, 6, 5, 6, 4, 3, 5, 7, 6, 3,
- 1, 3, 4, 6, 5, 1, 2, 4, 4, 5,
- 5, 2, 3, 1, 3, 2, 1, 2, 3, 3,
- 3, 4, 4, 4, 4, 4, 1, 1, 1, 1,
- 0, 2, 1, 2, 2, 4, 4, 3, 3, 1,
- 1, 2, 2, 3, 3, 4, 1, 1, 2
-};
-
-static const short yydefact[] = { 0,
- 0, 111, 0, 0, 0, 111, 111, 0, 0, 0,
- 128, 34, 35, 0, 81, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 4, 0, 0, 111, 111, 36,
- 39, 41, 127, 42, 44, 54, 48, 45, 55, 50,
- 49, 51, 52, 53, 0, 113, 120, 121, 0, 3,
- 97, 0, 0, 111, 111, 0, 111, 0, 0, 111,
- 0, 122, 0, 129, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 11, 13, 19, 15, 27, 21,
- 17, 25, 23, 29, 31, 32, 7, 8, 0, 0,
- 0, 34, 40, 37, 43, 1, 111, 111, 114, 115,
- 111, 0, 123, 111, 112, 96, 98, 107, 0, 111,
- 0, 109, 108, 110, 111, 111, 0, 111, 111, 0,
- 0, 82, 125, 111, 12, 14, 20, 16, 28, 22,
- 18, 26, 24, 30, 33, 9, 10, 80, 0, 76,
- 38, 0, 0, 118, 119, 0, 124, 0, 111, 111,
- 111, 111, 111, 111, 0, 111, 0, 111, 0, 0,
- 111, 0, 111, 0, 0, 111, 75, 0, 116, 117,
- 0, 0, 126, 111, 111, 77, 0, 0, 0, 100,
- 101, 99, 0, 86, 111, 0, 111, 111, 0, 5,
- 0, 0, 111, 111, 111, 111, 0, 0, 0, 46,
- 47, 0, 73, 0, 0, 79, 102, 103, 104, 105,
- 106, 72, 92, 87, 0, 70, 94, 0, 0, 0,
- 0, 56, 6, 111, 57, 0, 0, 0, 0, 64,
- 111, 65, 74, 78, 111, 111, 111, 111, 93, 71,
- 0, 0, 111, 58, 59, 0, 62, 63, 66, 67,
- 0, 83, 0, 0, 0, 111, 95, 88, 89, 111,
- 111, 111, 111, 111, 85, 90, 91, 0, 0, 0,
- 0, 84, 60, 61, 68, 69, 0, 0, 0
-};
-
-static const short yydefgoto[] = { 277,
- 191, 30, 31, 95, 32, 33, 34, 35, 36, 37,
- 38, 39, 40, 41, 42, 43, 44, 177, 183, 184,
- 185, 219, 51, 52, 106, 107, 115, 53, 45, 144,
- 108, 48, 49
+const short yyrindex[] = { 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 888, 33, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 450, 0, 0, 164, 118, 162, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 126, 0, 126, 0, 0,
+ 216, 0, 462, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 165, 166, 0, 0, 0,
+ 174, 0, 495, 0, 0, 0, 0, 436, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 507, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 11, 18, 0, 540, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 403,
+ 0, 0, 553, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 573, 662, 765, -85, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 416,
+ 0, 0, 0, 0, 0, 0, 587, 599, 611, 0,
+ -84, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -81, 0, 0, 0, 0, 0, 0, -250, 0, 0,
+ 0, 0, 0, 0, 0, -244, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
};
-
-static const short yypact[] = { 256,
- -9,-32768, 28, 54, 31,-32768,-32768, 38, -14, 382,
- 49, 24,-32768, 188,-32768, 41, 56, 35, 42, 61,
- 73, 75, 100,-32768,-32768, 111, 112,-32768,-32768,-32768,
--32768, 171,-32768, 530,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768, 95, 124,-32768, 59, 424,-32768,
--32768, 136, 298,-32768, 104, 64, 107, 137, 142, 106,
- 140, 59, 508,-32768, 108, 135, 138, 45, 55, 139,
- 143, 146, 154, 155,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 114, 298,
- 131,-32768,-32768,-32768, 530,-32768,-32768,-32768, 340, 340,
--32768, 508, 59,-32768,-32768,-32768, 80,-32768, -8,-32768,
- -4,-32768,-32768,-32768,-32768,-32768, -1,-32768,-32768, 132,
- -11,-32768, 59,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 80,-32768,
--32768, 298, 298, 89, 89, 466, 59, 82,-32768,-32768,
--32768,-32768,-32768,-32768, -3,-32768, 156,-32768, 4, 11,
--32768, 156,-32768, 170, 177,-32768,-32768, -11,-32768,-32768,
- 340, 340, 59,-32768,-32768,-32768, 179, 298, 298, 298,
- 298, 298, 184, 158,-32768, -2,-32768,-32768, 183,-32768,
- 52, 149,-32768,-32768,-32768,-32768, 186, 52, 152,-32768,
--32768, -11,-32768, 208, 212,-32768,-32768,-32768, 101, 101,
- 101,-32768,-32768, 190, 0,-32768,-32768, 200, -31, 215,
- 181,-32768,-32768,-32768,-32768, 218, 191, 221, 194,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
- -25, 216,-32768,-32768,-32768, 14,-32768,-32768,-32768,-32768,
- 15, 128, 298, 298, 298,-32768,-32768,-32768, 298,-32768,
--32768,-32768,-32768,-32768,-32768,-32768, 298, 230, 196, 232,
- 198,-32768,-32768,-32768,-32768,-32768, 249, 251,-32768
+const short yygindex[] = { 0,
+ 0, -2, 10, -133, 0, 340, 798, 0, 24, 0,
+ -112, 0, 0, 0, 0, 0, 0, 0, 0, -146,
+ 0, -80, 0, -28, 21, 152, 25, -33, 8, 0,
+ 0, 182, 1196, -170,
};
-
-static const short yypgoto[] = {-32768,
- 90, -28, 224,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768, -118,-32768,-32768, 1,-32768, 76,
--32768, 44, -20, -6,-32768, -64, -154, -24,-32768, 5,
- 2, 7, 250
+#define YYTABLESIZE 1468
+const short yytable[] = { 24,
+ 80, 83, 105, 114, 114, 105, 252, 63, 100, 33,
+ 170, 51, 93, 105, 131, 265, 105, 134, 95, 55,
+ 122, 105, 56, 35, 232, 211, 57, 123, 154, 29,
+ 203, 58, 206, 62, 240, 226, 94, 95, 105, 93,
+ 61, 105, 34, 150, 151, 95, 105, 103, 122, 27,
+ 65, 26, 113, 113, 66, 123, 152, 273, 179, 170,
+ 96, 125, 242, 178, 179, 180, 76, 236, 237, 122,
+ 34, 226, 147, 34, 77, 105, 123, 153, 84, 85,
+ 105, 97, 92, 86, 87, 88, 89, 93, 104, 251,
+ 120, 34, 34, 110, 34, 121, 170, 118, 251, 148,
+ 122, 127, 126, 124, 128, 33, 33, 140, 105, 141,
+ 29, 135, 28, 105, 136, 137, 116, 138, 139, 169,
+ 146, 194, 214, 197, 207, 198, 192, 41, 208, 200,
+ 27, 220, 26, 223, 202, 115, 230, 279, 280, 173,
+ 233, 100, 238, 29, 241, 243, 244, 248, 253, 225,
+ 254, 270, 33, 33, 256, 41, 34, 34, 41, 272,
+ 257, 258, 259, 27, 266, 26, 174, 175, 282, 283,
+ 284, 42, 285, 117, 118, 119, 41, 90, 91, 87,
+ 274, 147, 75, 43, 74, 33, 33, 99, 159, 205,
+ 210, 64, 250, 28, 0, 221, 0, 0, 0, 42,
+ 146, 0, 42, 0, 0, 0, 0, 0, 0, 0,
+ 0, 43, 0, 0, 43, 0, 0, 0, 0, 0,
+ 42, 166, 0, 0, 0, 115, 28, 0, 0, 0,
+ 0, 0, 43, 78, 81, 79, 82, 0, 0, 0,
+ 0, 41, 41, 0, 0, 1, 2, 129, 115, 130,
+ 132, 3, 133, 4, 5, 6, 7, 0, 224, 8,
+ 9, 112, 0, 0, 10, 11, 155, 12, 13, 14,
+ 15, 191, 231, 225, 199, 16, 17, 18, 19, 201,
+ 20, 21, 22, 23, 25, 42, 42, 0, 115, 115,
+ 34, 34, 34, 34, 249, 34, 269, 43, 43, 0,
+ 34, 34, 150, 151, 271, 0, 94, 95, 0, 225,
+ 34, 34, 34, 0, 105, 0, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 2, 0, 0,
+ 0, 0, 3, 157, 4, 5, 6, 7, 115, 158,
+ 8, 9, 0, 0, 29, 10, 11, 0, 12, 13,
+ 14, 15, 0, 0, 0, 0, 16, 17, 18, 19,
+ 2, 20, 21, 22, 23, 3, 164, 4, 5, 6,
+ 7, 0, 165, 8, 9, 41, 41, 41, 41, 0,
+ 41, 12, 13, 14, 15, 41, 41, 0, 0, 16,
+ 17, 18, 19, 115, 20, 21, 22, 23, 0, 115,
+ 0, 41, 41, 0, 0, 0, 0, 41, 67, 68,
+ 69, 70, 78, 71, 0, 72, 73, 0, 0, 42,
+ 42, 42, 42, 0, 42, 79, 0, 28, 0, 42,
+ 42, 43, 43, 43, 43, 0, 43, 0, 0, 0,
+ 78, 43, 43, 78, 0, 42, 42, 0, 0, 0,
+ 0, 42, 0, 79, 0, 0, 79, 43, 43, 125,
+ 0, 78, 0, 43, 0, 0, 0, 0, 0, 0,
+ 0, 126, 115, 0, 79, 0, 102, 115, 0, 115,
+ 115, 115, 115, 0, 0, 0, 115, 125, 0, 0,
+ 125, 0, 0, 0, 0, 0, 115, 0, 0, 126,
+ 0, 0, 126, 0, 127, 0, 0, 0, 125, 0,
+ 0, 0, 0, 0, 0, 0, 129, 0, 0, 0,
+ 126, 215, 216, 217, 218, 219, 78, 78, 0, 0,
+ 0, 0, 127, 0, 0, 127, 0, 0, 0, 79,
+ 79, 0, 0, 239, 129, 0, 0, 129, 0, 128,
+ 0, 0, 0, 127, 0, 0, 0, 0, 0, 0,
+ 102, 2, 130, 0, 0, 129, 3, 0, 4, 5,
+ 6, 7, 0, 0, 125, 9, 0, 128, 0, 0,
+ 128, 0, 0, 0, 0, 15, 126, 0, 0, 0,
+ 130, 0, 0, 130, 0, 0, 108, 0, 128, 0,
+ 0, 217, 218, 219, 0, 0, 0, 0, 109, 0,
+ 0, 130, 0, 104, 0, 0, 0, 0, 0, 127,
+ 110, 0, 0, 0, 108, 0, 0, 108, 0, 0,
+ 0, 129, 0, 0, 0, 0, 109, 0, 0, 109,
+ 0, 0, 0, 0, 0, 108, 0, 0, 110, 0,
+ 0, 110, 0, 0, 0, 0, 0, 109, 0, 0,
+ 78, 78, 78, 78, 128, 78, 0, 0, 0, 110,
+ 78, 78, 0, 79, 79, 79, 79, 130, 79, 0,
+ 0, 0, 0, 79, 79, 0, 78, 78, 0, 0,
+ 0, 0, 78, 102, 102, 102, 102, 104, 102, 79,
+ 79, 0, 105, 102, 102, 79, 0, 125, 125, 125,
+ 125, 108, 125, 0, 0, 0, 0, 125, 125, 126,
+ 126, 126, 126, 109, 126, 102, 0, 0, 0, 126,
+ 126, 0, 0, 125, 125, 110, 0, 0, 0, 125,
+ 0, 0, 0, 0, 0, 126, 126, 0, 0, 0,
+ 0, 126, 127, 127, 127, 127, 0, 127, 0, 0,
+ 29, 0, 127, 127, 129, 129, 129, 129, 0, 129,
+ 0, 0, 0, 0, 129, 129, 0, 0, 127, 127,
+ 27, 0, 26, 0, 127, 0, 105, 0, 0, 0,
+ 129, 129, 0, 0, 0, 0, 129, 128, 128, 128,
+ 128, 0, 128, 59, 60, 103, 0, 128, 128, 0,
+ 130, 130, 130, 130, 0, 130, 0, 0, 0, 0,
+ 130, 130, 0, 128, 128, 90, 91, 0, 0, 128,
+ 104, 104, 104, 104, 0, 104, 130, 130, 0, 0,
+ 104, 104, 130, 28, 108, 108, 108, 108, 0, 108,
+ 0, 0, 29, 0, 108, 108, 109, 109, 109, 109,
+ 0, 109, 104, 0, 0, 0, 109, 109, 110, 110,
+ 110, 110, 27, 110, 26, 0, 108, 0, 110, 110,
+ 0, 0, 0, 0, 0, 29, 0, 0, 109, 103,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 110, 149, 0, 0, 0, 27, 0, 26, 0, 160,
+ 0, 0, 0, 161, 0, 0, 0, 167, 168, 105,
+ 105, 105, 105, 0, 105, 0, 0, 132, 0, 105,
+ 105, 0, 0, 0, 0, 28, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 132, 0, 132,
+ 0, 105, 0, 0, 193, 0, 196, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 28, 0,
+ 0, 0, 29, 0, 0, 212, 213, 2, 0, 0,
+ 0, 0, 3, 0, 4, 5, 6, 7, 228, 229,
+ 8, 9, 27, 0, 26, 102, 234, 235, 12, 13,
+ 14, 15, 0, 0, 0, 0, 16, 17, 18, 19,
+ 132, 20, 21, 22, 23, 27, 0, 26, 0, 0,
+ 0, 0, 103, 103, 103, 103, 0, 103, 0, 0,
+ 0, 0, 103, 103, 27, 0, 26, 0, 0, 0,
+ 0, 261, 0, 0, 0, 0, 0, 0, 0, 267,
+ 0, 0, 0, 0, 103, 28, 0, 0, 0, 0,
+ 0, 0, 275, 0, 0, 0, 277, 278, 0, 2,
+ 281, 0, 0, 0, 3, 0, 4, 5, 6, 7,
+ 0, 0, 8, 9, 0, 0, 0, 10, 11, 0,
+ 12, 13, 14, 15, 0, 0, 0, 0, 16, 17,
+ 18, 19, 2, 20, 21, 22, 23, 3, 0, 4,
+ 5, 6, 7, 0, 0, 8, 9, 0, 0, 0,
+ 0, 11, 0, 12, 13, 14, 15, 0, 0, 0,
+ 0, 16, 17, 18, 19, 0, 20, 21, 22, 23,
+ 0, 0, 0, 0, 132, 0, 0, 0, 0, 132,
+ 0, 132, 132, 132, 132, 0, 0, 132, 132, 0,
+ 0, 0, 132, 0, 0, 132, 132, 132, 132, 0,
+ 0, 0, 0, 132, 132, 132, 132, 0, 132, 132,
+ 132, 132, 0, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 3, 0, 4, 5, 6, 7,
+ 0, 0, 8, 9, 0, 0, 0, 0, 0, 0,
+ 12, 13, 14, 15, 0, 0, 0, 0, 16, 17,
+ 18, 19, 0, 20, 21, 22, 23, 0, 0, 0,
+ 0, 0, 0, 98, 13, 14, 0, 0, 0, 0,
+ 0, 16, 17, 18, 19, 0, 20, 21, 22, 23,
+ 109, 111, 0, 119, 14, 0, 123, 0, 0, 0,
+ 16, 17, 18, 19, 0, 20, 21, 22, 23, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 142, 0, 143,
+ 144, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 156, 0, 0, 0, 0,
+ 0, 0, 162, 163, 0, 0, 0, 0, 0, 0,
+ 0, 172, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 182, 183, 184, 185, 186,
+ 190, 0, 0, 0, 0, 0, 0, 0, 0, 204,
+ 0, 204, 0, 0, 209, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 222, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 204, 204, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 255, 0, 0,
+ 0, 0, 0, 0, 0, 260, 0, 0, 0, 0,
+ 262, 263, 264, 0, 0, 0, 0, 268, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 276, 0, 0, 0, 0, 0, 204, 204,
};
-
-
-#define YYLAST 577
-
-
-static const short yytable[] = { 58,
- 59, 47, 167, 90, 46, 94, 216, 89, 240, 156,
- 187, 154, 161, 242, 61, 157, 62, 193, 162, 242,
- 243, 217, 91, 217, 195, 139, 256, 260, 262, 109,
- 111, 105, 117, 50, 105, 121, 224, 28, 105, 105,
- 105, 105, 105, 231, 158, 188, 105, 163, 218, 203,
- 218, 54, 194, 105, 57, 103, 105, 105, 77, 196,
- 78, 60, 261, 263, 75, 80, 141, 81, 127, 123,
- 128, 64, 142, 143, 65, 223, 146, 55, 130, 76,
- 131, 56, 79, 233, 83, 155, 174, 175, 176, 82,
- 159, 160, 129, 112, 113, 114, 84, 148, 85, 168,
- 47, 47, 132, 101, 145, 112, 113, 114, 147, 149,
- 150, 164, 165, 207, 208, 209, 210, 211, 97, 98,
- 151, 152, 153, 86, 178, 179, 180, 181, 182, 186,
- 149, 150, 264, 175, 87, 88, 90, 96, 90, 104,
- 197, 202, 199, 47, 47, 110, 169, 170, 116, 189,
- 118, 192, 173, 97, 98, 119, 120, 122, 125, 124,
- 215, 126, 133, 138, 99, 100, 134, 204, 205, 135,
- 90, 90, 47, 47, 228, 229, 145, 136, 137, 190,
- 220, 221, 140, 166, 200, 206, 226, 227, 209, 210,
- 211, 201, 212, 213, 92, 13, 14, 222, 225, 246,
- 230, 232, 16, 17, 18, 19, 251, 20, 21, 22,
- 23, 253, 254, 255, 234, 235, 26, 27, 259, 66,
- 67, 68, 69, 217, 70, 239, 71, 72, 252, 244,
- 245, 267, 247, 73, 74, 249, 258, 90, 90, 257,
- 248, 270, 271, 250, 273, 274, 275, 276, 278, 266,
- 279, 198, 265, 268, 269, 93, 1, 272, 2, 63,
- 214, 241, 0, 3, 0, 4, 5, 6, 7, 0,
- 0, 8, 9, 0, 0, 0, 10, 11, 0, 12,
- 13, 14, 15, 0, 0, 0, 0, 16, 17, 18,
- 19, 0, 20, 21, 22, 23, 0, 0, 24, 25,
- 2, 26, 27, 0, 28, 3, 29, 4, 5, 6,
- 7, 0, 0, 8, 9, 0, 0, 0, 10, 11,
- 0, 12, 13, 14, 15, 0, 0, 0, 0, 16,
- 17, 18, 19, 0, 20, 21, 22, 23, 0, 0,
- 105, 0, 2, 26, 27, 0, 28, 3, 29, 4,
- 5, 6, 7, 0, 0, 8, 9, 0, 0, 0,
- 10, 11, 0, 12, 13, 14, 15, 0, 0, 0,
- 0, 16, 17, 18, 19, 0, 20, 21, 22, 23,
- 0, 0, 0, 0, 2, 26, 27, 0, 28, 3,
- 29, 4, 5, 6, 7, 0, 0, 8, 9, 0,
- 0, 0, 0, 11, 0, 12, 13, 14, 15, 0,
- 0, 0, 0, 16, 17, 18, 19, 0, 20, 21,
- 22, 23, 0, 0, 0, 0, 2, 26, 27, 0,
- 28, 3, 29, 4, 5, 6, 7, 0, 0, 8,
- 9, 0, 0, 0, 102, 0, 0, 12, 13, 14,
- 15, 0, 0, 0, 0, 16, 17, 18, 19, 0,
- 20, 21, 22, 23, 0, 0, 0, 0, 2, 26,
- 27, 0, 28, 3, 29, 4, 5, 6, 7, 0,
- 0, 8, 9, 0, 0, 0, 0, 0, 0, 12,
- 13, 14, 15, 0, 0, 0, 0, 16, 17, 18,
- 19, 0, 20, 21, 22, 23, 0, 0, 105, 0,
- 2, 26, 27, 0, 28, 3, 29, 4, 5, 6,
- 7, 0, 0, 8, 9, 0, 0, 0, 0, 0,
- 0, 12, 13, 14, 15, 0, 0, 0, 0, 16,
- 17, 18, 19, 0, 20, 21, 22, 23, 0, 0,
- 0, 0, 0, 26, 27, 14, 28, 0, 29, 0,
- 0, 16, 17, 18, 19, 0, 20, 21, 22, 23,
- 0, 0, 0, 0, 0, 26, 27
+const short yycheck[] = { 10,
+ 45, 45, 10, 10, 10, 10, 41, 10, 37, 0,
+ 123, 10, 263, 10, 45, 41, 10, 45, 263, 278,
+ 10, 10, 278, 0, 195, 172, 282, 10, 10, 40,
+ 164, 278, 166, 283, 205, 40, 284, 285, 10, 290,
+ 278, 10, 10, 284, 285, 290, 10, 50, 38, 60,
+ 277, 62, 59, 59, 40, 38, 38, 259, 260, 172,
+ 38, 64, 209, 259, 260, 261, 278, 201, 202, 59,
+ 38, 40, 101, 41, 278, 10, 59, 59, 278, 278,
+ 10, 59, 124, 278, 278, 278, 278, 10, 258, 124,
+ 268, 59, 60, 59, 62, 268, 209, 59, 124, 102,
+ 40, 278, 41, 272, 278, 96, 97, 125, 10, 41,
+ 40, 278, 123, 10, 278, 278, 123, 278, 278, 41,
+ 97, 278, 261, 269, 269, 125, 123, 10, 269, 123,
+ 60, 290, 62, 263, 123, 10, 269, 271, 272, 142,
+ 125, 170, 269, 40, 125, 261, 258, 290, 269, 278,
+ 125, 123, 143, 144, 269, 38, 124, 125, 41, 123,
+ 125, 269, 125, 60, 278, 62, 143, 144, 269, 125,
+ 269, 10, 125, 10, 10, 10, 59, 263, 263, 261,
+ 261, 210, 60, 10, 62, 176, 177, 36, 123, 165,
+ 170, 10, 226, 123, -1, 188, -1, -1, -1, 38,
+ 177, -1, 41, -1, -1, -1, -1, -1, -1, -1,
+ -1, 38, -1, -1, 41, -1, -1, -1, -1, -1,
+ 59, 123, -1, -1, -1, 10, 123, -1, -1, -1,
+ -1, -1, 59, 278, 278, 280, 280, -1, -1, -1,
+ -1, 124, 125, -1, -1, 256, 257, 278, 123, 280,
+ 278, 262, 280, 264, 265, 266, 267, -1, 263, 270,
+ 271, 268, -1, -1, 275, 276, 274, 278, 279, 280,
+ 281, 268, 278, 278, 268, 286, 287, 288, 289, 268,
+ 291, 292, 293, 294, 295, 124, 125, -1, 295, 295,
+ 258, 259, 260, 261, 263, 263, 268, 124, 125, -1,
+ 268, 269, 284, 285, 268, -1, 284, 285, -1, 278,
+ 278, 279, 280, -1, 10, -1, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, 257, -1, -1,
+ -1, -1, 262, 268, 264, 265, 266, 267, 123, 274,
+ 270, 271, -1, -1, 40, 275, 276, -1, 278, 279,
+ 280, 281, -1, -1, -1, -1, 286, 287, 288, 289,
+ 257, 291, 292, 293, 294, 262, 268, 264, 265, 266,
+ 267, -1, 274, 270, 271, 258, 259, 260, 261, -1,
+ 263, 278, 279, 280, 281, 268, 269, -1, -1, 286,
+ 287, 288, 289, 268, 291, 292, 293, 294, -1, 274,
+ -1, 284, 285, -1, -1, -1, -1, 290, 286, 287,
+ 288, 289, 10, 291, -1, 293, 294, -1, -1, 258,
+ 259, 260, 261, -1, 263, 10, -1, 123, -1, 268,
+ 269, 258, 259, 260, 261, -1, 263, -1, -1, -1,
+ 38, 268, 269, 41, -1, 284, 285, -1, -1, -1,
+ -1, 290, -1, 38, -1, -1, 41, 284, 285, 10,
+ -1, 59, -1, 290, -1, -1, -1, -1, -1, -1,
+ -1, 10, 257, -1, 59, -1, 41, 262, -1, 264,
+ 265, 266, 267, -1, -1, -1, 271, 38, -1, -1,
+ 41, -1, -1, -1, -1, -1, 281, -1, -1, 38,
+ -1, -1, 41, -1, 10, -1, -1, -1, 59, -1,
+ -1, -1, -1, -1, -1, -1, 10, -1, -1, -1,
+ 59, 182, 183, 184, 185, 186, 124, 125, -1, -1,
+ -1, -1, 38, -1, -1, 41, -1, -1, -1, 124,
+ 125, -1, -1, 204, 38, -1, -1, 41, -1, 10,
+ -1, -1, -1, 59, -1, -1, -1, -1, -1, -1,
+ 125, 257, 10, -1, -1, 59, 262, -1, 264, 265,
+ 266, 267, -1, -1, 125, 271, -1, 38, -1, -1,
+ 41, -1, -1, -1, -1, 281, 125, -1, -1, -1,
+ 38, -1, -1, 41, -1, -1, 10, -1, 59, -1,
+ -1, 262, 263, 264, -1, -1, -1, -1, 10, -1,
+ -1, 59, -1, 41, -1, -1, -1, -1, -1, 125,
+ 10, -1, -1, -1, 38, -1, -1, 41, -1, -1,
+ -1, 125, -1, -1, -1, -1, 38, -1, -1, 41,
+ -1, -1, -1, -1, -1, 59, -1, -1, 38, -1,
+ -1, 41, -1, -1, -1, -1, -1, 59, -1, -1,
+ 258, 259, 260, 261, 125, 263, -1, -1, -1, 59,
+ 268, 269, -1, 258, 259, 260, 261, 125, 263, -1,
+ -1, -1, -1, 268, 269, -1, 284, 285, -1, -1,
+ -1, -1, 290, 258, 259, 260, 261, 125, 263, 284,
+ 285, -1, 41, 268, 269, 290, -1, 258, 259, 260,
+ 261, 125, 263, -1, -1, -1, -1, 268, 269, 258,
+ 259, 260, 261, 125, 263, 290, -1, -1, -1, 268,
+ 269, -1, -1, 284, 285, 125, -1, -1, -1, 290,
+ -1, -1, -1, -1, -1, 284, 285, -1, -1, -1,
+ -1, 290, 258, 259, 260, 261, -1, 263, -1, -1,
+ 40, -1, 268, 269, 258, 259, 260, 261, -1, 263,
+ -1, -1, -1, -1, 268, 269, -1, -1, 284, 285,
+ 60, -1, 62, -1, 290, -1, 125, -1, -1, -1,
+ 284, 285, -1, -1, -1, -1, 290, 258, 259, 260,
+ 261, -1, 263, 6, 7, 41, -1, 268, 269, -1,
+ 258, 259, 260, 261, -1, 263, -1, -1, -1, -1,
+ 268, 269, -1, 284, 285, 28, 29, -1, -1, 290,
+ 258, 259, 260, 261, -1, 263, 284, 285, -1, -1,
+ 268, 269, 290, 123, 258, 259, 260, 261, -1, 263,
+ -1, -1, 40, -1, 268, 269, 258, 259, 260, 261,
+ -1, 263, 290, -1, -1, -1, 268, 269, 258, 259,
+ 260, 261, 60, 263, 62, -1, 290, -1, 268, 269,
+ -1, -1, -1, -1, -1, 40, -1, -1, 290, 125,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 290, 104, -1, -1, -1, 60, -1, 62, -1, 112,
+ -1, -1, -1, 116, -1, -1, -1, 120, 121, 258,
+ 259, 260, 261, -1, 263, -1, -1, 40, -1, 268,
+ 269, -1, -1, -1, -1, 123, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 60, -1, 62,
+ -1, 290, -1, -1, 157, -1, 159, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 123, -1,
+ -1, -1, 40, -1, -1, 178, 179, 257, -1, -1,
+ -1, -1, 262, -1, 264, 265, 266, 267, 191, 192,
+ 270, 271, 60, -1, 62, 275, 199, 200, 278, 279,
+ 280, 281, -1, -1, -1, -1, 286, 287, 288, 289,
+ 123, 291, 292, 293, 294, 60, -1, 62, -1, -1,
+ -1, -1, 258, 259, 260, 261, -1, 263, -1, -1,
+ -1, -1, 268, 269, 60, -1, 62, -1, -1, -1,
+ -1, 244, -1, -1, -1, -1, -1, -1, -1, 252,
+ -1, -1, -1, -1, 290, 123, -1, -1, -1, -1,
+ -1, -1, 265, -1, -1, -1, 269, 270, -1, 257,
+ 273, -1, -1, -1, 262, -1, 264, 265, 266, 267,
+ -1, -1, 270, 271, -1, -1, -1, 275, 276, -1,
+ 278, 279, 280, 281, -1, -1, -1, -1, 286, 287,
+ 288, 289, 257, 291, 292, 293, 294, 262, -1, 264,
+ 265, 266, 267, -1, -1, 270, 271, -1, -1, -1,
+ -1, 276, -1, 278, 279, 280, 281, -1, -1, -1,
+ -1, 286, 287, 288, 289, -1, 291, 292, 293, 294,
+ -1, -1, -1, -1, 257, -1, -1, -1, -1, 262,
+ -1, 264, 265, 266, 267, -1, -1, 270, 271, -1,
+ -1, -1, 275, -1, -1, 278, 279, 280, 281, -1,
+ -1, -1, -1, 286, 287, 288, 289, -1, 291, 292,
+ 293, 294, -1, -1, -1, -1, -1, -1, -1, 257,
+ -1, -1, -1, -1, 262, -1, 264, 265, 266, 267,
+ -1, -1, 270, 271, -1, -1, -1, -1, -1, -1,
+ 278, 279, 280, 281, -1, -1, -1, -1, 286, 287,
+ 288, 289, -1, 291, 292, 293, 294, -1, -1, -1,
+ -1, -1, -1, 278, 279, 280, -1, -1, -1, -1,
+ -1, 286, 287, 288, 289, -1, 291, 292, 293, 294,
+ 55, 56, -1, 58, 280, -1, 61, -1, -1, -1,
+ 286, 287, 288, 289, -1, 291, 292, 293, 294, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 92, -1, 94,
+ 95, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 110, -1, -1, -1, -1,
+ -1, -1, 117, 118, -1, -1, -1, -1, -1, -1,
+ -1, 126, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 150, 151, 152, 153, 154,
+ 155, -1, -1, -1, -1, -1, -1, -1, -1, 164,
+ -1, 166, -1, -1, 169, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 188, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 201, 202, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 232, -1, -1,
+ -1, -1, -1, -1, -1, 240, -1, -1, -1, -1,
+ 245, 246, 247, -1, -1, -1, -1, 252, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 265, -1, -1, -1, -1, -1, 271, 272,
};
-
-static const short yycheck[] = { 6,
- 7, 0, 121, 28, 0, 34, 9, 28, 9, 14,
- 14, 20, 14, 45, 29, 20, 10, 14, 20, 45,
- 52, 24, 29, 24, 14, 90, 52, 14, 14, 54,
- 55, 43, 57, 43, 43, 60, 191, 49, 43, 43,
- 43, 43, 43, 198, 49, 49, 43, 49, 51, 168,
- 51, 24, 49, 43, 24, 49, 43, 43, 24, 49,
- 26, 24, 49, 49, 24, 24, 95, 26, 24, 63,
- 26, 23, 97, 98, 51, 24, 101, 24, 24, 24,
- 26, 28, 48, 202, 24, 110, 5, 6, 7, 48,
- 115, 116, 48, 42, 43, 44, 24, 104, 24, 124,
- 99, 100, 48, 45, 100, 42, 43, 44, 102, 30,
- 31, 118, 119, 178, 179, 180, 181, 182, 30, 31,
- 41, 42, 43, 24, 149, 150, 151, 152, 153, 154,
- 30, 31, 5, 6, 24, 24, 161, 43, 163, 4,
- 161, 166, 163, 142, 143, 42, 142, 143, 42, 156,
- 14, 158, 146, 30, 31, 14, 51, 18, 24, 52,
- 185, 24, 24, 50, 41, 42, 24, 174, 175, 24,
- 195, 196, 171, 172, 195, 196, 172, 24, 24, 24,
- 187, 188, 52, 52, 15, 7, 193, 194, 253, 254,
- 255, 15, 9, 36, 24, 25, 26, 15, 50, 224,
- 15, 50, 32, 33, 34, 35, 231, 37, 38, 39,
- 40, 236, 237, 238, 7, 4, 46, 47, 243, 32,
- 33, 34, 35, 24, 37, 36, 39, 40, 235, 15,
- 50, 256, 15, 46, 47, 15, 243, 262, 263, 24,
- 50, 262, 263, 50, 15, 50, 15, 50, 0, 256,
- 0, 162, 252, 260, 261, 32, 1, 264, 3, 10,
- 185, 218, -1, 8, -1, 10, 11, 12, 13, -1,
- -1, 16, 17, -1, -1, -1, 21, 22, -1, 24,
- 25, 26, 27, -1, -1, -1, -1, 32, 33, 34,
- 35, -1, 37, 38, 39, 40, -1, -1, 43, 44,
- 3, 46, 47, -1, 49, 8, 51, 10, 11, 12,
- 13, -1, -1, 16, 17, -1, -1, -1, 21, 22,
- -1, 24, 25, 26, 27, -1, -1, -1, -1, 32,
- 33, 34, 35, -1, 37, 38, 39, 40, -1, -1,
- 43, -1, 3, 46, 47, -1, 49, 8, 51, 10,
- 11, 12, 13, -1, -1, 16, 17, -1, -1, -1,
- 21, 22, -1, 24, 25, 26, 27, -1, -1, -1,
- -1, 32, 33, 34, 35, -1, 37, 38, 39, 40,
- -1, -1, -1, -1, 3, 46, 47, -1, 49, 8,
- 51, 10, 11, 12, 13, -1, -1, 16, 17, -1,
- -1, -1, -1, 22, -1, 24, 25, 26, 27, -1,
- -1, -1, -1, 32, 33, 34, 35, -1, 37, 38,
- 39, 40, -1, -1, -1, -1, 3, 46, 47, -1,
- 49, 8, 51, 10, 11, 12, 13, -1, -1, 16,
- 17, -1, -1, -1, 21, -1, -1, 24, 25, 26,
- 27, -1, -1, -1, -1, 32, 33, 34, 35, -1,
- 37, 38, 39, 40, -1, -1, -1, -1, 3, 46,
- 47, -1, 49, 8, 51, 10, 11, 12, 13, -1,
- -1, 16, 17, -1, -1, -1, -1, -1, -1, 24,
- 25, 26, 27, -1, -1, -1, -1, 32, 33, 34,
- 35, -1, 37, 38, 39, 40, -1, -1, 43, -1,
- 3, 46, 47, -1, 49, 8, 51, 10, 11, 12,
- 13, -1, -1, 16, 17, -1, -1, -1, -1, -1,
- -1, 24, 25, 26, 27, -1, -1, -1, -1, 32,
- 33, 34, 35, -1, 37, 38, 39, 40, -1, -1,
- -1, -1, -1, 46, 47, 26, 49, -1, 51, -1,
- -1, 32, 33, 34, 35, -1, 37, 38, 39, 40,
- -1, -1, -1, -1, -1, 46, 47
+#define YYFINAL 30
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 295
+#if YYDEBUG
+const char * const yyname[] = {
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,"'&'",0,"'('","')'",0,0,0,"'-'",0,0,0,0,0,0,0,0,0,0,0,0,0,"';'",
+"'<'",0,"'>'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'","'|'","'}'",0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,"IF","THEN","ELSE","ELIF","FI","CASE","ESAC","FOR","SELECT",
+"WHILE","UNTIL","DO","DONE","FUNCTION","COND_START","COND_END","COND_ERROR",
+"IN","BANG","TIME","TIMEOPT","WORD","ASSIGNMENT_WORD","NUMBER","ARITH_CMD",
+"ARITH_FOR_EXPRS","COND_CMD","AND_AND","OR_OR","GREATER_GREATER","LESS_LESS",
+"LESS_AND","GREATER_AND","SEMI_SEMI","LESS_LESS_MINUS","AND_GREATER",
+"LESS_GREATER","GREATER_BAR","yacc_EOF",
};
-/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
-#line 3 "/usr/share/misc/bison.simple"
-
-/* Skeleton output parser for bison,
- Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
-
- 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 2, 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. */
-
-/* As a special exception, when this file is copied by Bison into a
- Bison output file, you may use that output file without restriction.
- This special exception was added by the Free Software Foundation
- in version 1.24 of Bison. */
-
-#ifndef alloca
-#ifdef __GNUC__
-#define alloca __builtin_alloca
-#else /* not GNU C. */
-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
-#include <alloca.h>
-#else /* not sparc */
-#if defined (MSDOS) && !defined (__TURBOC__)
-#include <malloc.h>
-#else /* not MSDOS, or __TURBOC__ */
-#if defined(_AIX)
-#include <malloc.h>
- #pragma alloca
-#else /* not MSDOS, __TURBOC__, or _AIX */
-#ifdef __hpux
-#ifdef __cplusplus
-extern "C" {
-void *alloca (unsigned int);
+const char * const yyrule[] = {
+"$accept : inputunit",
+"inputunit : simple_list '\\n'",
+"inputunit : '\\n'",
+"inputunit : error '\\n'",
+"inputunit : yacc_EOF",
+"word_list : WORD",
+"word_list : word_list WORD",
+"redirection : '>' WORD",
+"redirection : '<' WORD",
+"redirection : NUMBER '>' WORD",
+"redirection : NUMBER '<' WORD",
+"redirection : GREATER_GREATER WORD",
+"redirection : NUMBER GREATER_GREATER WORD",
+"redirection : LESS_LESS WORD",
+"redirection : NUMBER LESS_LESS WORD",
+"redirection : LESS_AND NUMBER",
+"redirection : NUMBER LESS_AND NUMBER",
+"redirection : GREATER_AND NUMBER",
+"redirection : NUMBER GREATER_AND NUMBER",
+"redirection : LESS_AND WORD",
+"redirection : NUMBER LESS_AND WORD",
+"redirection : GREATER_AND WORD",
+"redirection : NUMBER GREATER_AND WORD",
+"redirection : LESS_LESS_MINUS WORD",
+"redirection : NUMBER LESS_LESS_MINUS WORD",
+"redirection : GREATER_AND '-'",
+"redirection : NUMBER GREATER_AND '-'",
+"redirection : LESS_AND '-'",
+"redirection : NUMBER LESS_AND '-'",
+"redirection : AND_GREATER WORD",
+"redirection : NUMBER LESS_GREATER WORD",
+"redirection : LESS_GREATER WORD",
+"redirection : GREATER_BAR WORD",
+"redirection : NUMBER GREATER_BAR WORD",
+"simple_command_element : WORD",
+"simple_command_element : ASSIGNMENT_WORD",
+"simple_command_element : redirection",
+"redirection_list : redirection",
+"redirection_list : redirection_list redirection",
+"simple_command : simple_command_element",
+"simple_command : simple_command simple_command_element",
+"command : simple_command",
+"command : shell_command",
+"command : shell_command redirection_list",
+"command : function_def",
+"shell_command : for_command",
+"shell_command : case_command",
+"shell_command : WHILE compound_list DO compound_list DONE",
+"shell_command : UNTIL compound_list DO compound_list DONE",
+"shell_command : select_command",
+"shell_command : if_command",
+"shell_command : subshell",
+"shell_command : group_command",
+"shell_command : arith_command",
+"shell_command : cond_command",
+"shell_command : arith_for_command",
+"for_command : FOR WORD newline_list DO compound_list DONE",
+"for_command : FOR WORD newline_list '{' compound_list '}'",
+"for_command : FOR WORD ';' newline_list DO compound_list DONE",
+"for_command : FOR WORD ';' newline_list '{' compound_list '}'",
+"for_command : FOR WORD newline_list IN word_list list_terminator newline_list DO compound_list DONE",
+"for_command : FOR WORD newline_list IN word_list list_terminator newline_list '{' compound_list '}'",
+"arith_for_command : FOR ARITH_FOR_EXPRS list_terminator newline_list DO compound_list DONE",
+"arith_for_command : FOR ARITH_FOR_EXPRS list_terminator newline_list '{' compound_list '}'",
+"arith_for_command : FOR ARITH_FOR_EXPRS DO compound_list DONE",
+"arith_for_command : FOR ARITH_FOR_EXPRS '{' compound_list '}'",
+"select_command : SELECT WORD newline_list DO list DONE",
+"select_command : SELECT WORD newline_list '{' list '}'",
+"select_command : SELECT WORD ';' newline_list DO list DONE",
+"select_command : SELECT WORD ';' newline_list '{' list '}'",
+"select_command : SELECT WORD newline_list IN word_list list_terminator newline_list DO list DONE",
+"select_command : SELECT WORD newline_list IN word_list list_terminator newline_list '{' list '}'",
+"case_command : CASE WORD newline_list IN newline_list ESAC",
+"case_command : CASE WORD newline_list IN case_clause_sequence newline_list ESAC",
+"case_command : CASE WORD newline_list IN case_clause ESAC",
+"function_def : WORD '(' ')' newline_list function_body",
+"function_def : FUNCTION WORD '(' ')' newline_list function_body",
+"function_def : FUNCTION WORD newline_list function_body",
+"function_body : shell_command",
+"function_body : shell_command redirection_list",
+"subshell : '(' compound_list ')'",
+"if_command : IF compound_list THEN compound_list FI",
+"if_command : IF compound_list THEN compound_list ELSE compound_list FI",
+"if_command : IF compound_list THEN compound_list elif_clause FI",
+"group_command : '{' compound_list '}'",
+"arith_command : ARITH_CMD",
+"cond_command : COND_START COND_CMD COND_END",
+"elif_clause : ELIF compound_list THEN compound_list",
+"elif_clause : ELIF compound_list THEN compound_list ELSE compound_list",
+"elif_clause : ELIF compound_list THEN compound_list elif_clause",
+"case_clause : pattern_list",
+"case_clause : case_clause_sequence pattern_list",
+"pattern_list : newline_list pattern ')' compound_list",
+"pattern_list : newline_list pattern ')' newline_list",
+"pattern_list : newline_list '(' pattern ')' compound_list",
+"pattern_list : newline_list '(' pattern ')' newline_list",
+"case_clause_sequence : pattern_list SEMI_SEMI",
+"case_clause_sequence : case_clause_sequence pattern_list SEMI_SEMI",
+"pattern : WORD",
+"pattern : pattern '|' WORD",
+"list : newline_list list0",
+"compound_list : list",
+"compound_list : newline_list list1",
+"list0 : list1 '\\n' newline_list",
+"list0 : list1 '&' newline_list",
+"list0 : list1 ';' newline_list",
+"list1 : list1 AND_AND newline_list list1",
+"list1 : list1 OR_OR newline_list list1",
+"list1 : list1 '&' newline_list list1",
+"list1 : list1 ';' newline_list list1",
+"list1 : list1 '\\n' newline_list list1",
+"list1 : pipeline_command",
+"list_terminator : '\\n'",
+"list_terminator : ';'",
+"list_terminator : yacc_EOF",
+"newline_list :",
+"newline_list : newline_list '\\n'",
+"simple_list : simple_list1",
+"simple_list : simple_list1 '&'",
+"simple_list : simple_list1 ';'",
+"simple_list1 : simple_list1 AND_AND newline_list simple_list1",
+"simple_list1 : simple_list1 OR_OR newline_list simple_list1",
+"simple_list1 : simple_list1 '&' simple_list1",
+"simple_list1 : simple_list1 ';' simple_list1",
+"simple_list1 : pipeline_command",
+"pipeline_command : pipeline",
+"pipeline_command : BANG pipeline",
+"pipeline_command : timespec pipeline",
+"pipeline_command : timespec BANG pipeline",
+"pipeline_command : BANG timespec pipeline",
+"pipeline : pipeline '|' newline_list pipeline",
+"pipeline : command",
+"timespec : TIME",
+"timespec : TIME TIMEOPT",
};
-#else /* not __cplusplus */
-void *alloca ();
-#endif /* not __cplusplus */
-#endif /* __hpux */
-#endif /* not _AIX */
-#endif /* not MSDOS, or __TURBOC__ */
-#endif /* not sparc. */
-#endif /* not GNU C. */
-#endif /* alloca not defined. */
-
-/* This is the parser code that is written into each bison parser
- when the %semantic_parser declaration is not specified in the grammar.
- It was written by Richard Stallman by simplifying the hairy parser
- used when %semantic_parser is specified. */
-
-/* Note: there must be only one dollar sign in this file.
- It is replaced by the list of actions, each action
- as one case of the switch. */
-
-#define yyerrok (yyerrstatus = 0)
-#define yyclearin (yychar = YYEMPTY)
-#define YYEMPTY -2
-#define YYEOF 0
-#define YYACCEPT return(0)
-#define YYABORT return(1)
-#define YYERROR goto yyerrlab1
-/* Like YYERROR except do call yyerror.
- This remains here temporarily to ease the
- transition to the new meaning of YYERROR, for GCC.
- Once GCC version 2 has supplanted version 1, this can go. */
-#define YYFAIL goto yyerrlab
-#define YYRECOVERING() (!!yyerrstatus)
-#define YYBACKUP(token, value) \
-do \
- if (yychar == YYEMPTY && yylen == 1) \
- { yychar = (token), yylval = (value); \
- yychar1 = YYTRANSLATE (yychar); \
- YYPOPSTACK; \
- goto yybackup; \
- } \
- else \
- { yyerror ("syntax error: cannot back up"); YYERROR; } \
-while (0)
-
-#define YYTERROR 1
-#define YYERRCODE 256
-
-#ifndef YYPURE
-#define YYLEX yylex()
-#endif
-
-#ifdef YYPURE
-#ifdef YYLSP_NEEDED
-#ifdef YYLEX_PARAM
-#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
-#else
-#define YYLEX yylex(&yylval, &yylloc)
#endif
-#else /* not YYLSP_NEEDED */
-#ifdef YYLEX_PARAM
-#define YYLEX yylex(&yylval, YYLEX_PARAM)
-#else
-#define YYLEX yylex(&yylval)
-#endif
-#endif /* not YYLSP_NEEDED */
-#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
+#if YYDEBUG
+#include <stdio.h>
#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
+#ifdef YYSTACKSIZE
#undef YYMAXDEPTH
-#endif
-
-#ifndef YYMAXDEPTH
-#define YYMAXDEPTH 10000
-#endif
-
-/* Prevent warning if -Wstrict-prototypes. */
-#ifdef __GNUC__
-int yyparse (void);
-#endif
-
-#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
-#define __yy_memcpy(TO,FROM,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_memcpy (to, from, count)
- char *to;
- char *from;
- 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_memcpy (char *to, char *from, int count)
-{
- register char *f = from;
- register char *t = to;
- register int i = count;
-
- while (i-- > 0)
- *t++ = *f++;
-}
-
-#endif
-#endif
-
-#line 196 "/usr/share/misc/bison.simple"
-
-/* The user can define YYPARSE_PARAM as the name of an argument to be passed
- into yyparse. The argument should have type void *.
- It should actually point to an object.
- Grammar actions can access the variable by casting it
- to the proper pointer type. */
-
-#ifdef YYPARSE_PARAM
-#ifdef __cplusplus
-#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL
-#else /* not __cplusplus */
-#define YYPARSE_PARAM_ARG YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
-#endif /* not __cplusplus */
-#else /* not YYPARSE_PARAM */
-#define YYPARSE_PARAM_ARG
-#define YYPARSE_PARAM_DECL
-#endif /* not YYPARSE_PARAM */
-
-int
-yyparse(YYPARSE_PARAM_ARG)
- YYPARSE_PARAM_DECL
-{
- register int yystate;
- register int yyn;
- register short *yyssp;
- register YYSTYPE *yyvsp;
- int yyerrstatus; /* number of tokens to shift before error messages enabled */
- int yychar1 = 0; /* lookahead token as an internal (translated) token number */
-
- short yyssa[YYINITDEPTH]; /* the state stack */
- YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
-
- short *yyss = yyssa; /* refer to the stacks thru separate pointers */
- YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
-
-#ifdef YYLSP_NEEDED
- YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
- YYLTYPE *yyls = yylsa;
- YYLTYPE *yylsp;
-
-#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
+#define YYMAXDEPTH YYSTACKSIZE
#else
-#define YYPOPSTACK (yyvsp--, yyssp--)
-#endif
-
- int yystacksize = YYINITDEPTH;
-
-#ifdef YYPURE
- int yychar;
- YYSTYPE yylval;
- int yynerrs;
-#ifdef YYLSP_NEEDED
- YYLTYPE yylloc;
-#endif
-#endif
-
- YYSTYPE yyval; /* the variable used to return */
- /* semantic values from the action */
- /* routines */
-
- int yylen;
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Starting parse\n");
-#endif
-
- yystate = 0;
- yyerrstatus = 0;
- yynerrs = 0;
- yychar = YYEMPTY; /* Cause a token to be read. */
-
- /* Initialize stack pointers.
- Waste one element of value and location stack
- so that they stay on the same level as the state stack.
- The wasted elements are never initialized. */
-
- yyssp = yyss - 1;
- yyvsp = yyvs;
-#ifdef YYLSP_NEEDED
- yylsp = yyls;
-#endif
-
-/* Push a new state, which is found in yystate . */
-/* In all cases, when you get here, the value and location stacks
- have just been pushed. so pushing a state here evens the stacks. */
-yynewstate:
-
- *++yyssp = yystate;
-
- if (yyssp >= yyss + yystacksize - 1)
- {
- /* Give user a chance to reallocate the stack */
- /* Use copies of these so that the &'s don't force the real ones into memory. */
- YYSTYPE *yyvs1 = yyvs;
- short *yyss1 = yyss;
-#ifdef YYLSP_NEEDED
- YYLTYPE *yyls1 = yyls;
-#endif
-
- /* Get the current used size of the three stacks, in elements. */
- int size = yyssp - yyss + 1;
-
-#ifdef yyoverflow
- /* Each stack pointer address is followed by the size of
- the data in use in that stack, in bytes. */
-#ifdef YYLSP_NEEDED
- /* This used to be a conditional around just the two extra args,
- but that might be undefined if yyoverflow is a macro. */
- yyoverflow("parser stack overflow",
- &yyss1, size * sizeof (*yyssp),
- &yyvs1, size * sizeof (*yyvsp),
- &yyls1, size * sizeof (*yylsp),
- &yystacksize);
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
#else
- yyoverflow("parser stack overflow",
- &yyss1, size * sizeof (*yyssp),
- &yyvs1, size * sizeof (*yyvsp),
- &yystacksize);
-#endif
-
- yyss = yyss1; yyvs = yyvs1;
-#ifdef YYLSP_NEEDED
- yyls = yyls1;
-#endif
-#else /* no yyoverflow */
- /* Extend the stack our own way. */
- if (yystacksize >= YYMAXDEPTH)
- {
- yyerror("parser stack overflow");
- return 2;
- }
- yystacksize *= 2;
- if (yystacksize > YYMAXDEPTH)
- yystacksize = YYMAXDEPTH;
- yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
- __yy_memcpy ((char *)yyss, (char *)yyss1, size * sizeof (*yyssp));
- yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
- __yy_memcpy ((char *)yyvs, (char *)yyvs1, size * sizeof (*yyvsp));
-#ifdef YYLSP_NEEDED
- yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
- __yy_memcpy ((char *)yyls, (char *)yyls1, size * sizeof (*yylsp));
-#endif
-#endif /* no yyoverflow */
-
- yyssp = yyss + size - 1;
- yyvsp = yyvs + size - 1;
-#ifdef YYLSP_NEEDED
- yylsp = yyls + size - 1;
-#endif
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Stack size increased to %d\n", yystacksize);
-#endif
-
- if (yyssp >= yyss + yystacksize - 1)
- YYABORT;
- }
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Entering state %d\n", yystate);
-#endif
-
- goto yybackup;
- yybackup:
-
-/* Do appropriate processing given the current state. */
-/* Read a lookahead token if we need one and don't already have one. */
-/* yyresume: */
-
- /* First try to decide what to do without reference to lookahead token. */
-
- yyn = yypact[yystate];
- if (yyn == YYFLAG)
- goto yydefault;
-
- /* Not known => get a lookahead token if don't already have one. */
-
- /* yychar is either YYEMPTY or YYEOF
- or a valid token in external form. */
-
- if (yychar == YYEMPTY)
- {
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Reading a token: ");
-#endif
- yychar = YYLEX;
- }
-
- /* Convert token to internal form (in yychar1) for indexing tables with */
-
- if (yychar <= 0) /* This means end of input. */
- {
- yychar1 = 0;
- yychar = YYEOF; /* Don't call YYLEX any more */
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Now at end of input.\n");
-#endif
- }
- else
- {
- yychar1 = YYTRANSLATE(yychar);
-
-#if YYDEBUG != 0
- if (yydebug)
- {
- fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
- /* Give the individual parser a way to print the precise meaning
- of a token, for further debugging info. */
-#ifdef YYPRINT
- YYPRINT (stderr, yychar, yylval);
-#endif
- fprintf (stderr, ")\n");
- }
-#endif
- }
-
- yyn += yychar1;
- if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
- goto yydefault;
-
- yyn = yytable[yyn];
-
- /* yyn is what to do for this token type in this state.
- Negative => reduce, -yyn is rule number.
- Positive => shift, yyn is new state.
- New state is final state => don't bother to shift,
- just return success.
- 0, or most negative number => error. */
-
- if (yyn < 0)
- {
- if (yyn == YYFLAG)
- goto yyerrlab;
- yyn = -yyn;
- goto yyreduce;
- }
- else if (yyn == 0)
- goto yyerrlab;
-
- if (yyn == YYFINAL)
- YYACCEPT;
-
- /* Shift the lookahead token. */
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
-#endif
-
- /* Discard the token being shifted unless it is eof. */
- if (yychar != YYEOF)
- yychar = YYEMPTY;
-
- *++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
- *++yylsp = yylloc;
-#endif
-
- /* count tokens shifted since error; after three, turn off error status. */
- if (yyerrstatus) yyerrstatus--;
-
- yystate = yyn;
- goto yynewstate;
-
-/* Do the default action for the current state. */
-yydefault:
-
- yyn = yydefact[yystate];
- if (yyn == 0)
- goto yyerrlab;
-
-/* Do a reduction. yyn is the number of a rule to reduce with. */
-yyreduce:
- yylen = yyr2[yyn];
- if (yylen > 0)
- yyval = yyvsp[1-yylen]; /* implement default value of the action */
-
-#if YYDEBUG != 0
- if (yydebug)
- {
- int i;
-
- fprintf (stderr, "Reducing via rule %d (line %d), ",
- yyn, yyrline[yyn]);
-
- /* Print the symbols being reduced, and their result. */
- for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
- fprintf (stderr, "%s ", yytname[yyrhs[i]]);
- fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
- }
-#endif
-
-
- switch (yyn) {
-
-case 1:
-#line 238 "/usr/homes/chet/src/bash/src/parse.y"
-{
- /* Case of regular command. Discard the error
- safety net,and return the command just parsed. */
- global_command = yyvsp[-1].command;
- eof_encountered = 0;
- discard_parser_constructs (0);
- YYACCEPT;
- ;
- break;}
-case 2:
-#line 247 "/usr/homes/chet/src/bash/src/parse.y"
-{
- /* Case of regular command, but not a very
- interesting one. Return a NULL command. */
- global_command = (COMMAND *)NULL;
- YYACCEPT;
- ;
- break;}
-case 3:
-#line 254 "/usr/homes/chet/src/bash/src/parse.y"
-{
- /* Error during parsing. Return NULL command. */
- global_command = (COMMAND *)NULL;
- eof_encountered = 0;
- discard_parser_constructs (1);
- if (interactive)
- {
- YYACCEPT;
- }
- else
- {
- YYABORT;
- }
- ;
- break;}
-case 4:
-#line 269 "/usr/homes/chet/src/bash/src/parse.y"
-{
- /* Case of EOF seen by itself. Do ignoreeof or
- not. */
- global_command = (COMMAND *)NULL;
- handle_eof_input_unit ();
- YYACCEPT;
- ;
- break;}
-case 5:
-#line 279 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.word_list = make_word_list (yyvsp[0].word, (WORD_LIST *)NULL); ;
- break;}
-case 6:
-#line 281 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.word_list = make_word_list (yyvsp[0].word, yyvsp[-1].word_list); ;
- break;}
-case 7:
-#line 285 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.filename = yyvsp[0].word;
- yyval.redirect = make_redirection (1, r_output_direction, redir);
- ;
- break;}
-case 8:
-#line 290 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.filename = yyvsp[0].word;
- yyval.redirect = make_redirection (0, r_input_direction, redir);
- ;
- break;}
-case 9:
-#line 295 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.filename = yyvsp[0].word;
- yyval.redirect = make_redirection (yyvsp[-2].number, r_output_direction, redir);
- ;
- break;}
-case 10:
-#line 300 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.filename = yyvsp[0].word;
- yyval.redirect = make_redirection (yyvsp[-2].number, r_input_direction, redir);
- ;
- break;}
-case 11:
-#line 305 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.filename = yyvsp[0].word;
- yyval.redirect = make_redirection (1, r_appending_to, redir);
- ;
- break;}
-case 12:
-#line 310 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.filename = yyvsp[0].word;
- yyval.redirect = make_redirection (yyvsp[-2].number, r_appending_to, redir);
- ;
- break;}
-case 13:
-#line 315 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.filename = yyvsp[0].word;
- yyval.redirect = make_redirection (0, r_reading_until, redir);
- redir_stack[need_here_doc++] = yyval.redirect;
- ;
- break;}
-case 14:
-#line 321 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.filename = yyvsp[0].word;
- yyval.redirect = make_redirection (yyvsp[-2].number, r_reading_until, redir);
- redir_stack[need_here_doc++] = yyval.redirect;
- ;
- break;}
-case 15:
-#line 327 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.dest = yyvsp[0].number;
- yyval.redirect = make_redirection (0, r_duplicating_input, redir);
- ;
- break;}
-case 16:
-#line 332 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.dest = yyvsp[0].number;
- yyval.redirect = make_redirection (yyvsp[-2].number, r_duplicating_input, redir);
- ;
- break;}
-case 17:
-#line 337 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.dest = yyvsp[0].number;
- yyval.redirect = make_redirection (1, r_duplicating_output, redir);
- ;
- break;}
-case 18:
-#line 342 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.dest = yyvsp[0].number;
- yyval.redirect = make_redirection (yyvsp[-2].number, r_duplicating_output, redir);
- ;
- break;}
-case 19:
-#line 347 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.filename = yyvsp[0].word;
- yyval.redirect = make_redirection (0, r_duplicating_input_word, redir);
- ;
- break;}
-case 20:
-#line 352 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.filename = yyvsp[0].word;
- yyval.redirect = make_redirection (yyvsp[-2].number, r_duplicating_input_word, redir);
- ;
- break;}
-case 21:
-#line 357 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.filename = yyvsp[0].word;
- yyval.redirect = make_redirection (1, r_duplicating_output_word, redir);
- ;
- break;}
-case 22:
-#line 362 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.filename = yyvsp[0].word;
- yyval.redirect = make_redirection (yyvsp[-2].number, r_duplicating_output_word, redir);
- ;
- break;}
-case 23:
-#line 367 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.filename = yyvsp[0].word;
- yyval.redirect = make_redirection
- (0, r_deblank_reading_until, redir);
- redir_stack[need_here_doc++] = yyval.redirect;
- ;
- break;}
-case 24:
-#line 374 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.filename = yyvsp[0].word;
- yyval.redirect = make_redirection
- (yyvsp[-2].number, r_deblank_reading_until, redir);
- redir_stack[need_here_doc++] = yyval.redirect;
- ;
- break;}
-case 25:
-#line 381 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.dest = 0L;
- yyval.redirect = make_redirection (1, r_close_this, redir);
- ;
- break;}
-case 26:
-#line 386 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.dest = 0L;
- yyval.redirect = make_redirection (yyvsp[-2].number, r_close_this, redir);
- ;
- break;}
-case 27:
-#line 391 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.dest = 0L;
- yyval.redirect = make_redirection (0, r_close_this, redir);
- ;
- break;}
-case 28:
-#line 396 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.dest = 0L;
- yyval.redirect = make_redirection (yyvsp[-2].number, r_close_this, redir);
- ;
- break;}
-case 29:
-#line 401 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.filename = yyvsp[0].word;
- yyval.redirect = make_redirection (1, r_err_and_out, redir);
- ;
- break;}
-case 30:
-#line 406 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.filename = yyvsp[0].word;
- yyval.redirect = make_redirection (yyvsp[-2].number, r_input_output, redir);
- ;
- break;}
-case 31:
-#line 411 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.filename = yyvsp[0].word;
- yyval.redirect = make_redirection (0, r_input_output, redir);
- ;
- break;}
-case 32:
-#line 416 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.filename = yyvsp[0].word;
- yyval.redirect = make_redirection (1, r_output_force, redir);
- ;
- break;}
-case 33:
-#line 421 "/usr/homes/chet/src/bash/src/parse.y"
-{
- redir.filename = yyvsp[0].word;
- yyval.redirect = make_redirection (yyvsp[-2].number, r_output_force, redir);
- ;
- break;}
-case 34:
-#line 428 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.element.word = yyvsp[0].word; yyval.element.redirect = 0; ;
- break;}
-case 35:
-#line 430 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.element.word = yyvsp[0].word; yyval.element.redirect = 0; ;
- break;}
-case 36:
-#line 432 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.element.redirect = yyvsp[0].redirect; yyval.element.word = 0; ;
- break;}
-case 37:
-#line 436 "/usr/homes/chet/src/bash/src/parse.y"
-{
- yyval.redirect = yyvsp[0].redirect;
- ;
- break;}
-case 38:
-#line 440 "/usr/homes/chet/src/bash/src/parse.y"
-{
- register REDIRECT *t;
-
- for (t = yyvsp[-1].redirect; t->next; t = t->next)
- ;
- t->next = yyvsp[0].redirect;
- yyval.redirect = yyvsp[-1].redirect;
- ;
- break;}
-case 39:
-#line 451 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_simple_command (yyvsp[0].element, (COMMAND *)NULL); ;
- break;}
-case 40:
-#line 453 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_simple_command (yyvsp[0].element, yyvsp[-1].command); ;
- break;}
-case 41:
-#line 457 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = clean_simple_command (yyvsp[0].command); ;
- break;}
-case 42:
-#line 459 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = yyvsp[0].command; ;
- break;}
-case 43:
-#line 461 "/usr/homes/chet/src/bash/src/parse.y"
-{
- COMMAND *tc;
-
- tc = yyvsp[-1].command;
- /* According to Posix.2 3.9.5, redirections
- specified after the body of a function should
- be attached to the function and performed when
- the function is executed, not as part of the
- function definition command. */
- /* XXX - I don't think it matters, but we might
- want to change this in the future to avoid
- problems differentiating between a function
- definition with a redirection and a function
- definition containing a single command with a
- redirection. The two are semantically equivalent,
- though -- the only difference is in how the
- command printing code displays the redirections. */
- if (tc->type == cm_function_def)
- {
- tc = tc->value.Function_def->command;
- if (tc->type == cm_group)
- tc = tc->value.Group->command;
- }
- if (tc->redirects)
- {
- register REDIRECT *t;
- for (t = tc->redirects; t->next; t = t->next)
- ;
- t->next = yyvsp[0].redirect;
- }
- else
- tc->redirects = yyvsp[0].redirect;
- yyval.command = yyvsp[-1].command;
- ;
- break;}
-case 44:
-#line 498 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = yyvsp[0].command; ;
- break;}
-case 45:
-#line 500 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = yyvsp[0].command; ;
- break;}
-case 46:
-#line 502 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_while_command (yyvsp[-3].command, yyvsp[-1].command); ;
- break;}
-case 47:
-#line 504 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_until_command (yyvsp[-3].command, yyvsp[-1].command); ;
- break;}
-case 48:
-#line 506 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = yyvsp[0].command; ;
- break;}
-case 49:
-#line 508 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = yyvsp[0].command; ;
- break;}
-case 50:
-#line 510 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = yyvsp[0].command; ;
- break;}
-case 51:
-#line 512 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = yyvsp[0].command; ;
- break;}
-case 52:
-#line 514 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = yyvsp[0].command; ;
- break;}
-case 53:
-#line 516 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = yyvsp[0].command; ;
- break;}
-case 54:
-#line 518 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = yyvsp[0].command; ;
- break;}
-case 55:
-#line 520 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = yyvsp[0].command; ;
- break;}
-case 56:
-#line 524 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_for_command (yyvsp[-4].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command); ;
- break;}
-case 57:
-#line 526 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_for_command (yyvsp[-4].word, add_string_to_list ("$@", (WORD_LIST *)NULL), yyvsp[-1].command); ;
- break;}
-case 58:
-#line 528 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_for_command (yyvsp[-5].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command); ;
- break;}
-case 59:
-#line 530 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_for_command (yyvsp[-5].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command); ;
- break;}
-case 60:
-#line 532 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_for_command (yyvsp[-8].word, REVERSE_LIST (yyvsp[-5].word_list, WORD_LIST *), yyvsp[-1].command); ;
- break;}
-case 61:
-#line 534 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_for_command (yyvsp[-8].word, REVERSE_LIST (yyvsp[-5].word_list, WORD_LIST *), yyvsp[-1].command); ;
- break;}
-case 62:
-#line 538 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_arith_for_command (yyvsp[-5].word_list, yyvsp[-1].command, arith_for_lineno); ;
- break;}
-case 63:
-#line 540 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_arith_for_command (yyvsp[-5].word_list, yyvsp[-1].command, arith_for_lineno); ;
- break;}
-case 64:
-#line 543 "/usr/homes/chet/src/bash/src/parse.y"
-{
- yyval.command = make_select_command (yyvsp[-4].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command);
- ;
- break;}
-case 65:
-#line 547 "/usr/homes/chet/src/bash/src/parse.y"
-{
- yyval.command = make_select_command (yyvsp[-4].word, add_string_to_list ("$@", (WORD_LIST *)NULL), yyvsp[-1].command);
- ;
- break;}
-case 66:
-#line 551 "/usr/homes/chet/src/bash/src/parse.y"
-{
- yyval.command = make_select_command (yyvsp[-5].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command);
- ;
- break;}
-case 67:
-#line 555 "/usr/homes/chet/src/bash/src/parse.y"
-{
- yyval.command = make_select_command (yyvsp[-5].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command);
- ;
- break;}
-case 68:
-#line 559 "/usr/homes/chet/src/bash/src/parse.y"
-{
- yyval.command = make_select_command (yyvsp[-8].word, (WORD_LIST *)reverse_list (yyvsp[-5].word_list), yyvsp[-1].command);
- ;
- break;}
-case 69:
-#line 563 "/usr/homes/chet/src/bash/src/parse.y"
-{
- yyval.command = make_select_command (yyvsp[-8].word, (WORD_LIST *)reverse_list (yyvsp[-5].word_list), yyvsp[-1].command);
- ;
- break;}
-case 70:
-#line 569 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_case_command (yyvsp[-4].word, (PATTERN_LIST *)NULL); ;
- break;}
-case 71:
-#line 571 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_case_command (yyvsp[-5].word, yyvsp[-2].pattern); ;
- break;}
-case 72:
-#line 573 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_case_command (yyvsp[-4].word, yyvsp[-1].pattern); ;
- break;}
-case 73:
-#line 577 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_function_def (yyvsp[-4].word, yyvsp[0].command, function_dstart, function_bstart); ;
- break;}
-case 74:
-#line 581 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_function_def (yyvsp[-4].word, yyvsp[0].command, function_dstart, function_bstart); ;
- break;}
-case 75:
-#line 584 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_function_def (yyvsp[-2].word, yyvsp[0].command, function_dstart, function_bstart); ;
- break;}
-case 76:
-#line 588 "/usr/homes/chet/src/bash/src/parse.y"
-{
- yyval.command = make_subshell_command (yyvsp[-1].command);
- yyval.command->flags |= CMD_WANT_SUBSHELL;
- ;
- break;}
-case 77:
-#line 595 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_if_command (yyvsp[-3].command, yyvsp[-1].command, (COMMAND *)NULL); ;
- break;}
-case 78:
-#line 597 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_if_command (yyvsp[-5].command, yyvsp[-3].command, yyvsp[-1].command); ;
- break;}
-case 79:
-#line 599 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_if_command (yyvsp[-4].command, yyvsp[-2].command, yyvsp[-1].command); ;
- break;}
-case 80:
-#line 604 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_group_command (yyvsp[-1].command); ;
- break;}
-case 81:
-#line 608 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_arith_command (yyvsp[0].word_list); ;
- break;}
-case 82:
-#line 612 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = yyvsp[-1].command; ;
- break;}
-case 83:
-#line 616 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_if_command (yyvsp[-2].command, yyvsp[0].command, (COMMAND *)NULL); ;
- break;}
-case 84:
-#line 618 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_if_command (yyvsp[-4].command, yyvsp[-2].command, yyvsp[0].command); ;
- break;}
-case 85:
-#line 620 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = make_if_command (yyvsp[-3].command, yyvsp[-1].command, yyvsp[0].command); ;
- break;}
-case 87:
-#line 625 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyvsp[0].pattern->next = yyvsp[-1].pattern; yyval.pattern = yyvsp[0].pattern; ;
- break;}
-case 88:
-#line 629 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.pattern = make_pattern_list (yyvsp[-2].word_list, yyvsp[0].command); ;
- break;}
-case 89:
-#line 631 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.pattern = make_pattern_list (yyvsp[-2].word_list, (COMMAND *)NULL); ;
- break;}
-case 90:
-#line 633 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.pattern = make_pattern_list (yyvsp[-2].word_list, yyvsp[0].command); ;
- break;}
-case 91:
-#line 635 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.pattern = make_pattern_list (yyvsp[-2].word_list, (COMMAND *)NULL); ;
- break;}
-case 93:
-#line 640 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyvsp[-1].pattern->next = yyvsp[-2].pattern; yyval.pattern = yyvsp[-1].pattern; ;
- break;}
-case 94:
-#line 644 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.word_list = make_word_list (yyvsp[0].word, (WORD_LIST *)NULL); ;
- break;}
-case 95:
-#line 646 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.word_list = make_word_list (yyvsp[0].word, yyvsp[-2].word_list); ;
- break;}
-case 96:
-#line 655 "/usr/homes/chet/src/bash/src/parse.y"
-{
- yyval.command = yyvsp[0].command;
- if (need_here_doc)
- gather_here_documents ();
- ;
- break;}
-case 98:
-#line 664 "/usr/homes/chet/src/bash/src/parse.y"
-{
- yyval.command = yyvsp[0].command;
- ;
- break;}
-case 100:
-#line 671 "/usr/homes/chet/src/bash/src/parse.y"
-{
- if (yyvsp[-2].command->type == cm_connection)
- yyval.command = connect_async_list (yyvsp[-2].command, (COMMAND *)NULL, '&');
- else
- yyval.command = command_connect (yyvsp[-2].command, (COMMAND *)NULL, '&');
- ;
- break;}
-case 102:
-#line 682 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, AND_AND); ;
- break;}
-case 103:
-#line 684 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, OR_OR); ;
- break;}
-case 104:
-#line 686 "/usr/homes/chet/src/bash/src/parse.y"
-{
- if (yyvsp[-3].command->type == cm_connection)
- yyval.command = connect_async_list (yyvsp[-3].command, yyvsp[0].command, '&');
- else
- yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, '&');
- ;
- break;}
-case 105:
-#line 693 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, ';'); ;
- break;}
-case 106:
-#line 695 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, ';'); ;
- break;}
-case 107:
-#line 697 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = yyvsp[0].command; ;
- break;}
-case 113:
-#line 716 "/usr/homes/chet/src/bash/src/parse.y"
-{
- yyval.command = yyvsp[0].command;
- if (need_here_doc)
- gather_here_documents ();
- ;
- break;}
-case 114:
-#line 722 "/usr/homes/chet/src/bash/src/parse.y"
-{
- if (yyvsp[-1].command->type == cm_connection)
- yyval.command = connect_async_list (yyvsp[-1].command, (COMMAND *)NULL, '&');
- else
- yyval.command = command_connect (yyvsp[-1].command, (COMMAND *)NULL, '&');
- if (need_here_doc)
- gather_here_documents ();
- ;
- break;}
-case 115:
-#line 731 "/usr/homes/chet/src/bash/src/parse.y"
-{
- yyval.command = yyvsp[-1].command;
- if (need_here_doc)
- gather_here_documents ();
- ;
- break;}
-case 116:
-#line 739 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, AND_AND); ;
- break;}
-case 117:
-#line 741 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, OR_OR); ;
- break;}
-case 118:
-#line 743 "/usr/homes/chet/src/bash/src/parse.y"
-{
- if (yyvsp[-2].command->type == cm_connection)
- yyval.command = connect_async_list (yyvsp[-2].command, yyvsp[0].command, '&');
- else
- yyval.command = command_connect (yyvsp[-2].command, yyvsp[0].command, '&');
- ;
- break;}
-case 119:
-#line 750 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = command_connect (yyvsp[-2].command, yyvsp[0].command, ';'); ;
- break;}
-case 120:
-#line 753 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = yyvsp[0].command; ;
- break;}
-case 121:
-#line 757 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = yyvsp[0].command; ;
- break;}
-case 122:
-#line 759 "/usr/homes/chet/src/bash/src/parse.y"
-{
- yyvsp[0].command->flags |= CMD_INVERT_RETURN;
- yyval.command = yyvsp[0].command;
- ;
- break;}
-case 123:
-#line 764 "/usr/homes/chet/src/bash/src/parse.y"
-{
- yyvsp[0].command->flags |= yyvsp[-1].number;
- yyval.command = yyvsp[0].command;
- ;
- break;}
-case 124:
-#line 769 "/usr/homes/chet/src/bash/src/parse.y"
-{
- yyvsp[0].command->flags |= yyvsp[-2].number|CMD_INVERT_RETURN;
- yyval.command = yyvsp[0].command;
- ;
- break;}
-case 125:
-#line 774 "/usr/homes/chet/src/bash/src/parse.y"
-{
- yyvsp[0].command->flags |= yyvsp[-1].number|CMD_INVERT_RETURN;
- yyval.command = yyvsp[0].command;
- ;
- break;}
-case 126:
-#line 782 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, '|'); ;
- break;}
-case 127:
-#line 784 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.command = yyvsp[0].command; ;
- break;}
-case 128:
-#line 788 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.number = CMD_TIME_PIPELINE; ;
- break;}
-case 129:
-#line 790 "/usr/homes/chet/src/bash/src/parse.y"
-{ yyval.number = CMD_TIME_PIPELINE|CMD_TIME_POSIX; ;
- break;}
-}
- /* the action file gets copied in in place of this dollarsign */
-#line 498 "/usr/share/misc/bison.simple"
-
- yyvsp -= yylen;
- yyssp -= yylen;
-#ifdef YYLSP_NEEDED
- yylsp -= yylen;
-#endif
-
-#if YYDEBUG != 0
- if (yydebug)
- {
- short *ssp1 = yyss - 1;
- fprintf (stderr, "state stack now");
- while (ssp1 != yyssp)
- fprintf (stderr, " %d", *++ssp1);
- fprintf (stderr, "\n");
- }
-#endif
-
- *++yyvsp = yyval;
-
-#ifdef YYLSP_NEEDED
- yylsp++;
- if (yylen == 0)
- {
- yylsp->first_line = yylloc.first_line;
- yylsp->first_column = yylloc.first_column;
- yylsp->last_line = (yylsp-1)->last_line;
- yylsp->last_column = (yylsp-1)->last_column;
- yylsp->text = 0;
- }
- else
- {
- yylsp->last_line = (yylsp+yylen-1)->last_line;
- yylsp->last_column = (yylsp+yylen-1)->last_column;
- }
-#endif
-
- /* Now "shift" the result of the reduction.
- Determine what state that goes to,
- based on the state we popped back to
- and the rule number reduced by. */
-
- yyn = yyr1[yyn];
-
- yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
- if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
- yystate = yytable[yystate];
- else
- yystate = yydefgoto[yyn - YYNTBASE];
-
- goto yynewstate;
-
-yyerrlab: /* here on detecting error */
-
- if (! yyerrstatus)
- /* If not already recovering from an error, report this error. */
- {
- ++yynerrs;
-
-#ifdef YYERROR_VERBOSE
- yyn = yypact[yystate];
-
- if (yyn > YYFLAG && yyn < YYLAST)
- {
- int size = 0;
- char *msg;
- int x, count;
-
- count = 0;
- /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
- for (x = (yyn < 0 ? -yyn : 0);
- x < (sizeof(yytname) / sizeof(char *)); x++)
- if (yycheck[x + yyn] == x)
- size += strlen(yytname[x]) + 15, count++;
- msg = (char *) malloc(size + 15);
- if (msg != 0)
- {
- strcpy(msg, "parse error");
-
- if (count < 5)
- {
- count = 0;
- for (x = (yyn < 0 ? -yyn : 0);
- x < (sizeof(yytname) / sizeof(char *)); x++)
- if (yycheck[x + yyn] == x)
- {
- strcat(msg, count == 0 ? ", expecting `" : " or `");
- strcat(msg, yytname[x]);
- strcat(msg, "'");
- count++;
- }
- }
- yyerror(msg);
- free(msg);
- }
- else
- yyerror ("parse error; also virtual memory exceeded");
- }
- else
-#endif /* YYERROR_VERBOSE */
- yyerror("parse error");
- }
-
- goto yyerrlab1;
-yyerrlab1: /* here on error raised explicitly by an action */
-
- if (yyerrstatus == 3)
- {
- /* if just tried and failed to reuse lookahead token after an error, discard it. */
-
- /* return failure if at end of input */
- if (yychar == YYEOF)
- YYABORT;
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
-#endif
-
- yychar = YYEMPTY;
- }
-
- /* Else will try to reuse lookahead token
- after shifting the error token. */
-
- yyerrstatus = 3; /* Each real token shifted decrements this */
-
- goto yyerrhandle;
-
-yyerrdefault: /* current state does not do anything special for the error token. */
-
-#if 0
- /* This is wrong; only states that explicitly want error tokens
- should shift them. */
- yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
- if (yyn) goto yydefault;
-#endif
-
-yyerrpop: /* pop the current state because it cannot handle the error token */
-
- if (yyssp == yyss) YYABORT;
- yyvsp--;
- yystate = *--yyssp;
-#ifdef YYLSP_NEEDED
- yylsp--;
-#endif
-
-#if YYDEBUG != 0
- if (yydebug)
- {
- short *ssp1 = yyss - 1;
- fprintf (stderr, "Error: state stack now");
- while (ssp1 != yyssp)
- fprintf (stderr, " %d", *++ssp1);
- fprintf (stderr, "\n");
- }
-#endif
-
-yyerrhandle:
-
- yyn = yypact[yystate];
- if (yyn == YYFLAG)
- goto yyerrdefault;
-
- yyn += YYTERROR;
- if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
- goto yyerrdefault;
-
- yyn = yytable[yyn];
- if (yyn < 0)
- {
- if (yyn == YYFLAG)
- goto yyerrpop;
- yyn = -yyn;
- goto yyreduce;
- }
- else if (yyn == 0)
- goto yyerrpop;
-
- if (yyn == YYFINAL)
- YYACCEPT;
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Shifting error token, ");
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
#endif
-
- *++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
- *++yylsp = yylloc;
#endif
-
- yystate = yyn;
- goto yynewstate;
-}
-#line 792 "/usr/homes/chet/src/bash/src/parse.y"
-
+#define YYINITSTACKSIZE 200
+int yydebug;
+int yynerrs;
+int yyerrflag;
+int yychar;
+short *yyssp;
+YYSTYPE *yyvsp;
+YYSTYPE yyval;
+YYSTYPE yylval;
+short *yyss;
+short *yysslim;
+YYSTYPE *yyvs;
+int yystacksize;
+#line 815 "/usr/homes/chet/src/bash/src/parse.y"
/* Possible states for the parser that require it to do special things. */
#define PST_CASEPAT 0x001 /* in a case pattern list */
@@ -2031,15 +872,6 @@ yyerrhandle:
#define TOKEN_DEFAULT_INITIAL_SIZE 496
#define TOKEN_DEFAULT_GROW_SIZE 512
-/* Shell meta-characters that, when unquoted, separate words. */
-#define shellmeta(c) (strchr (shell_meta_chars, (c)) != 0)
-#define shellbreak(c) (strchr (shell_break_chars, (c)) != 0)
-#define shellquote(c) ((c) == '"' || (c) == '`' || (c) == '\'')
-#define shellexp(c) ((c) == '$' || (c) == '<' || (c) == '>')
-
-char *shell_meta_chars = "()<>;&|";
-char *shell_break_chars = "()<>;&| \t\n";
-
/* The token currently being read. */
static int current_token;
@@ -2188,7 +1020,7 @@ yy_readline_get ()
#if defined (JOB_CONTROL)
if (job_control)
- give_terminal_to (shell_pgrp);
+ give_terminal_to (shell_pgrp, 0);
#endif /* JOB_CONTROL */
if (signal_is_ignored (SIGINT) == 0)
@@ -2418,18 +1250,20 @@ pop_stream ()
save stack, update the buffered fd to the new file descriptor and
re-establish the buffer <-> bash_input fd correspondence. */
if (bash_input.type == st_bstream && bash_input.location.buffered_fd >= 0)
- {
- if (bash_input_fd_changed)
+ {
+ if (bash_input_fd_changed)
{
bash_input_fd_changed = 0;
if (default_buffered_input >= 0)
{
bash_input.location.buffered_fd = default_buffered_input;
saver->bstream->b_fd = default_buffered_input;
+ SET_CLOSE_ON_EXEC (default_buffered_input);
}
}
+ /* XXX could free buffered stream returned as result here. */
set_buffered_stream (bash_input.location.buffered_fd, saver->bstream);
- }
+ }
#endif /* BUFFERED_INPUT */
line_number = saver->line;
@@ -2634,8 +1468,14 @@ read_a_line (remove_quoted_newline)
/* Allow immediate exit if interrupted during input. */
QUIT;
+ /* Ignore null bytes in input. */
if (c == 0)
- continue;
+ {
+#if 0
+ internal_warning ("read_a_line: ignored null byte in input");
+#endif
+ continue;
+ }
/* If there is no more input, then we return NULL. */
if (c == EOF)
@@ -2657,10 +1497,10 @@ read_a_line (remove_quoted_newline)
need to treat the backslash specially only if a backslash
quoting a backslash-newline pair appears in the line. */
if (pass_next)
- {
+ {
line_buffer[indx++] = c;
pass_next = 0;
- }
+ }
else if (c == '\\' && remove_quoted_newline)
{
peekc = yy_getc ();
@@ -2738,8 +1578,8 @@ STRING_INT_ALIST word_token_alist[] = {
};
/* XXX - we should also have an alist with strings for other tokens, so we
- can give more descriptive error messages. Look at y.tab.h for the
- other tokens. */
+ can give more descriptive error messages. Look at y.tab.h for the
+ other tokens. */
/* These are used by read_token_word, but appear up here so that shell_getc
can use them to decide when to add otherwise blank lines to the history. */
@@ -2775,6 +1615,11 @@ static struct dstack temp_dstack = { (char *)NULL, 0, 0 };
read the next line. This is called by read_token when the shell is
processing normal command input. */
+/* This implements one-character lookahead/lookbehind across physical input
+ lines, to avoid something being lost because it's pushed back with
+ shell_ungetc when we're at the start of a line. */
+static int eol_ungetc_lookahead = 0;
+
static int
shell_getc (remove_quoted_newline)
int remove_quoted_newline;
@@ -2785,6 +1630,13 @@ shell_getc (remove_quoted_newline)
QUIT;
+ if (eol_ungetc_lookahead)
+ {
+ c = eol_ungetc_lookahead;
+ eol_ungetc_lookahead = 0;
+ return (c);
+ }
+
#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
/* If shell_input_line[shell_input_line_index] == 0, but there is
something on the pushed list of strings, then we don't want to go
@@ -2826,11 +1678,21 @@ shell_getc (remove_quoted_newline)
if (bash_input.type == st_stream)
clearerr (stdin);
- while (c = yy_getc ())
+ while (1)
{
+ c = yy_getc ();
+
/* Allow immediate exit if interrupted during input. */
QUIT;
+ if (c == '\0')
+ {
+#if 0
+ internal_warning ("shell_getc: ignored null byte in input");
+#endif
+ continue;
+ }
+
RESIZE_MALLOCED_BUFFER (shell_input_line, i, 2, shell_input_line_size, 256);
if (c == EOF)
@@ -2854,6 +1716,7 @@ shell_getc (remove_quoted_newline)
break;
}
}
+
shell_input_line_index = 0;
shell_input_line_len = i; /* == strlen (shell_input_line) */
@@ -2885,20 +1748,29 @@ shell_getc (remove_quoted_newline)
current_command_line_count--;
/* We have to force the xrealloc below because we don't know
- the true allocated size of shell_input_line anymore. */
+ the true allocated size of shell_input_line anymore. */
shell_input_line_size = shell_input_line_len;
}
}
- /* XXX - this is grotesque */
+ /* Try to do something intelligent with blank lines encountered while
+ entering multi-line commands. XXX - this is grotesque */
else if (remember_on_history && shell_input_line &&
shell_input_line[0] == '\0' &&
- current_command_line_count > 1 && current_delimiter (dstack))
+ current_command_line_count > 1)
{
- /* We know shell_input_line[0] == 0 and we're reading some sort of
- quoted string. This means we've got a line consisting of only
- a newline in a quoted string. We want to make sure this line
- gets added to the history. */
- maybe_add_history (shell_input_line);
+ if (current_delimiter (dstack))
+ /* We know shell_input_line[0] == 0 and we're reading some sort of
+ quoted string. This means we've got a line consisting of only
+ a newline in a quoted string. We want to make sure this line
+ gets added to the history. */
+ maybe_add_history (shell_input_line);
+ else
+ {
+ char *hdcs;
+ hdcs = history_delimiting_chars ();
+ if (hdcs && hdcs[0] == ';')
+ maybe_add_history (shell_input_line);
+ }
}
#endif /* HISTORY */
@@ -2954,18 +1826,18 @@ shell_getc (remove_quoted_newline)
if (!c && (pushed_string_list != (STRING_SAVER *)NULL))
{
if (mustpop)
- {
- pop_string ();
- c = shell_input_line[shell_input_line_index];
+ {
+ pop_string ();
+ c = shell_input_line[shell_input_line_index];
if (c)
shell_input_line_index++;
mustpop--;
- }
+ }
else
- {
- mustpop++;
- c = ' ';
- }
+ {
+ mustpop++;
+ c = ' ';
+ }
}
#endif /* ALIAS || DPAREN_ARITHMETIC */
@@ -2982,6 +1854,8 @@ shell_ungetc (c)
{
if (shell_input_line && shell_input_line_index)
shell_input_line[--shell_input_line_index] = c;
+ else
+ eol_ungetc_lookahead = c;
}
static void
@@ -3196,8 +2070,8 @@ time_command_acceptable ()
case DO:
case THEN:
case ELSE:
- case '{':
- case '(':
+ case '{': /* } */
+ case '(': /* ) */
return 1;
default:
return 0;
@@ -3218,9 +2092,10 @@ time_command_acceptable ()
to be set
`{' is recognized if the last token as WORD and the token
- before that was FUNCTION.
+ before that was FUNCTION, or if we just parsed an arithmetic
+ `for' command.
- `}' is recognized if there is an unclosed `{' prsent.
+ `}' is recognized if there is an unclosed `{' present.
`-p' is returned as TIMEOPT if the last read token was TIME.
@@ -3288,6 +2163,16 @@ special_case_tokens (token)
}
}
+ /* We allow a `do' after a for ((...)) without an intervening
+ list_terminator */
+ if (last_read_token == ARITH_FOR_EXPRS && token[0] == 'd' && token[1] == 'o' && !token[2])
+ return (DO);
+ if (last_read_token == ARITH_FOR_EXPRS && token[0] == '{' && token[1] == '\0') /* } */
+ {
+ open_brace_count++;
+ return ('{'); /* } */
+ }
+
if (open_brace_count && reserved_word_acceptable (last_read_token) && token[0] == '}' && !token[1])
{
open_brace_count--; /* { */
@@ -3485,7 +2370,7 @@ read_token (command)
if (cmdtyp == 1)
{
/* parse_arith_cmd adds quotes at the beginning and end
- of the string it returns; we need to take those out. */
+ of the string it returns; we need to take those out. */
len = strlen (wval);
wv2 = xmalloc (len);
strncpy (wv2, wval + 1, len - 2);
@@ -3564,7 +2449,7 @@ read_token (command)
parser_state |= PST_SUBSHELL;
/*(*/
else if ((parser_state & PST_CASEPAT) && character == ')')
- parser_state &= ~PST_CASEPAT;
+ parser_state &= ~PST_CASEPAT;
/*(*/
else if ((parser_state & PST_SUBSHELL) && character == ')')
parser_state &= ~PST_SUBSHELL;
@@ -3608,8 +2493,8 @@ parse_matched_pair (qc, open, close, lenp, flags)
int *lenp, flags;
{
int count, ch, was_dollar;
- int pass_next_character, nestlen, start_lineno;
- char *ret, *nestret;
+ int pass_next_character, nestlen, ttranslen, start_lineno;
+ char *ret, *nestret, *ttrans;
int retind, retsize;
count = 1;
@@ -3662,7 +2547,7 @@ parse_matched_pair (qc, open, close, lenp, flags)
#if 1
/* handle nested ${...} specially. */
else if (open != close && was_dollar && open == '{' && ch == open) /* } */
- count++;
+ count++;
#endif
else if (((flags & P_FIRSTCLOSE) == 0) && ch == open) /* nested begin */
count++;
@@ -3687,13 +2572,40 @@ parse_matched_pair (qc, open, close, lenp, flags)
{
/* '', ``, or "" inside $(...) or other grouping construct. */
push_delimiter (dstack, ch);
- nestret = parse_matched_pair (ch, ch, ch, &nestlen, 0);
+ if (was_dollar && ch == '\'') /* $'...' inside group */
+ nestret = parse_matched_pair (ch, ch, ch, &nestlen, P_ALLOWESC);
+ else
+ nestret = parse_matched_pair (ch, ch, ch, &nestlen, 0);
pop_delimiter (dstack);
if (nestret == &matched_pair_error)
{
free (ret);
return &matched_pair_error;
}
+ if (was_dollar && ch == '\'')
+ {
+ /* Translate $'...' here. */
+ ttrans = ansiexpand (nestret, 0, nestlen - 1, &ttranslen);
+ free (nestret);
+ nestret = sh_single_quote (ttrans);
+ free (ttrans);
+ nestlen = strlen (nestret);
+ retind -= 2; /* back up before the $' */
+ }
+ else if (was_dollar && ch == '"')
+ {
+ /* Locale expand $"..." here. */
+ ttrans = localeexpand (nestret, 0, nestlen - 1, start_lineno, &ttranslen);
+ free (nestret);
+ nestret = xmalloc (ttranslen + 3);
+ nestret[0] = '"';
+ strcpy (nestret + 1, ttrans);
+ nestret[ttranslen + 1] = '"';
+ nestret[ttranslen += 2] = '\0';
+ free (ttrans);
+ nestlen = ttranslen;
+ retind -= 2; /* back up before the $" */
+ }
if (nestlen)
{
RESIZE_MALLOCED_BUFFER (ret, retind, nestlen, retsize, 64);
@@ -3918,14 +2830,16 @@ cond_term ()
/* binop */
tok = read_token (READ);
if (tok == WORD && test_binop (yylval.word->word))
- op = yylval.word;
+ op = yylval.word;
else if (tok == '<' || tok == '>')
- op = make_word_from_token (tok);
- else if (tok == COND_END || tok == AND_AND || tok == OR_OR)
+ op = make_word_from_token (tok); /* ( */
+ /* There should be a check before blindly accepting the `)' that we have
+ seen the opening `('. */
+ else if (tok == COND_END || tok == AND_AND || tok == OR_OR || tok == ')')
{
/* Special case. [[ x ]] is equivalent to [[ -n x ]], just like
the test command. Similarly for [[ x && expr ]] or
- [[ x || expr ]] */
+ [[ x || expr ]] or [[ (x) ]]. */
op = make_word ("-n");
term = make_cond_node (COND_UNARY, op, tleft, (COND_COM *)NULL);
cond_token = tok;
@@ -4011,7 +2925,7 @@ read_token_word (character)
token = xrealloc (token, token_buffer_size = TOKEN_DEFAULT_INITIAL_SIZE);
token_index = 0;
- all_digits = digit (character);
+ all_digits = isdigit (character);
dollar_present = quoted = pass_next_character = 0;
for (;;)
@@ -4046,7 +2960,7 @@ read_token_word (character)
/* If the next character is to be quoted, note it now. */
if (cd == 0 || cd == '`' ||
- (cd == '"' && member (peek_char, slashify_in_quotes)))
+ (cd == '"' && (sh_syntaxtab[peek_char] & CBSDQUOTE)))
pass_next_character++;
quoted = 1;
@@ -4076,7 +2990,7 @@ read_token_word (character)
#ifdef EXTENDED_GLOB
/* Parse a ksh-style extended pattern matching specification. */
- if (extended_glob && PATTERN_CHAR(character))
+ if (extended_glob && PATTERN_CHAR (character))
{
peek_char = shell_getc (1);
if (peek_char == '(') /* ) */
@@ -4104,11 +3018,7 @@ read_token_word (character)
/* If the delimiter character is not single quote, parse some of
the shell expansions that must be read as a single word. */
-#if defined (PROCESS_SUBSTITUTION)
- if (character == '$' || character == '<' || character == '>')
-#else
- if (character == '$')
-#endif /* !PROCESS_SUBSTITUTION */
+ if (shellexp (character))
{
peek_char = shell_getc (1);
/* $(...), <(...), >(...), $((...)), ${...}, and $[...] constructs */
@@ -4116,7 +3026,7 @@ read_token_word (character)
((peek_char == '{' || peek_char == '[') && character == '$')) /* ) ] } */
{
if (peek_char == '{') /* } */
- ttok = parse_matched_pair (cd, '{', '}', &ttoklen, P_FIRSTCLOSE);
+ ttok = parse_matched_pair (cd, '{', '}', &ttoklen, P_FIRSTCLOSE);
else if (peek_char == '(') /* ) */
{
/* XXX - push and pop the `(' as a delimiter for use by
@@ -4164,7 +3074,7 @@ read_token_word (character)
/* Insert the single quotes and correctly quote any
embedded single quotes (allowed because P_ALLOWESC was
passed to parse_matched_pair). */
- ttok = single_quote (ttrans);
+ ttok = sh_single_quote (ttrans);
free (ttrans);
ttrans = ttok;
ttranslen = strlen (ttrans);
@@ -4257,7 +3167,7 @@ read_token_word (character)
got_character:
- all_digits &= digit (character);
+ all_digits &= isdigit (character);
dollar_present |= character == '$';
if (character == CTLESC || character == CTLNUL)
@@ -4403,7 +3313,7 @@ mk_msgstr (string, foundnlp)
if (*s == '"' || *s == '\\')
len++;
else if (*s == '\n')
- len += 5;
+ len += 5;
}
r = result = xmalloc (len + 3);
@@ -4602,9 +3512,9 @@ history_delimiting_chars ()
/* This does not work for subshells inside case statement
command lists. It's a suboptimal solution. */
else if (parser_state & PST_CASESTMT) /* case statement pattern */
- return " ";
+ return " ";
else
- return "; "; /* (...) subshell */
+ return "; "; /* (...) subshell */
}
else if (token_before_that == WORD && two_tokens_ago == FUNCTION)
return " "; /* function def using `function name' without `()' */
@@ -4614,7 +3524,7 @@ history_delimiting_chars ()
/* Tricky. `for i\nin ...' should not have a semicolon, but
`for i\ndo ...' should. We do what we can. */
for (i = shell_input_line_index; whitespace(shell_input_line[i]); i++)
- ;
+ ;
if (shell_input_line[i] && shell_input_line[i] == 'i' && shell_input_line[i+1] == 'n')
return " ";
return ";";
@@ -4782,7 +3692,6 @@ decode_prompt_string (string)
if (n == CTLESC || n == CTLNUL)
{
- string += 3;
temp[0] = CTLESC;
temp[1] = n;
temp[2] = '\0';
@@ -4794,11 +3703,13 @@ decode_prompt_string (string)
}
else
{
- string += 3;
temp[0] = n;
temp[1] = '\0';
}
+ for (c = 0; n != -1 && c < 3 && ISOCTAL (*string); c++)
+ string++;
+
c = 0;
goto add_string;
@@ -4877,7 +3788,7 @@ decode_prompt_string (string)
{
if (getcwd (t_string, sizeof(t_string)) == 0)
{
- t_string[0] = '.';
+ t_string[0] = '.';
tlen = 1;
}
else
@@ -4890,12 +3801,19 @@ decode_prompt_string (string)
}
t_string[tlen] = '\0';
+#define ROOT_PATH(x) ((x)[0] == '/' && (x)[1] == 0)
+#define DOUBLE_SLASH_ROOT(x) ((x)[0] == '/' && (x)[1] == '/' && (x)[2] == 0)
if (c == 'W')
{
- t = strrchr (t_string, '/');
- if (t && t != t_string)
- strcpy (t_string, t + 1);
+ if (ROOT_PATH (t_string) == 0 && DOUBLE_SLASH_ROOT (t_string) == 0)
+ {
+ t = strrchr (t_string, '/');
+ if (t)
+ strcpy (t_string, t + 1);
+ }
}
+#undef ROOT_PATH
+#undef DOUBLE_SLASH_ROOT
else
/* polite_directory_format is guaranteed to return a string
no longer than PATH_MAX - 1 characters. */
@@ -4904,14 +3822,10 @@ decode_prompt_string (string)
/* If we're going to be expanding the prompt string later,
quote the directory name. */
if (promptvars || posixly_correct)
-#if 0
- temp = backslash_quote (t_string);
-#else
/* Make sure that expand_prompt_string is called with a
second argument of Q_DOUBLE_QUOTE if we use this
function here. */
- temp = backslash_quote_for_double_quotes (t_string);
-#endif
+ temp = sh_backslash_quote_for_double_quotes (t_string);
else
temp = savestring (t_string);
@@ -5026,11 +3940,7 @@ decode_prompt_string (string)
the prompt string. */
if (promptvars || posixly_correct)
{
-#if 0
- list = expand_string_unsplit (result, Q_DOUBLE_QUOTES);
-#else
list = expand_prompt_string (result, Q_DOUBLE_QUOTES);
-#endif
free (result);
result = string_list (list);
dispose_words (list);
@@ -5220,6 +4130,7 @@ parse_string_to_word_list (s, whom)
{
WORD_LIST *wl;
int tok, orig_line_number, orig_input_terminator;
+ int orig_line_count;
#if defined (HISTORY)
int old_remember_on_history, old_history_expansion_inhibited;
#endif
@@ -5233,10 +4144,12 @@ parse_string_to_word_list (s, whom)
#endif
orig_line_number = line_number;
+ orig_line_count = current_command_line_count;
orig_input_terminator = shell_input_line_terminator;
push_stream (1);
last_read_token = '\n';
+ current_command_line_count = 0;
with_input_from_string (s, whom);
wl = (WORD_LIST *)NULL;
@@ -5244,6 +4157,8 @@ parse_string_to_word_list (s, whom)
{
if (tok == '\n' && *bash_input.location.string == '\0')
break;
+ if (tok == '\n') /* Allow newlines in compound assignments */
+ continue;
if (tok != WORD && tok != ASSIGNMENT_WORD)
{
line_number = orig_line_number + line_number - 1;
@@ -5266,6 +4181,7 @@ parse_string_to_word_list (s, whom)
# endif /* BANG_HISTORY */
#endif /* HISTORY */
+ current_command_line_count = orig_line_count;
shell_input_line_terminator = orig_input_terminator;
if (wl == &parse_string_error)
@@ -5279,3 +4195,978 @@ parse_string_to_word_list (s, whom)
return (REVERSE_LIST (wl, WORD_LIST *));
}
+#line 4199 "y.tab.c"
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack()
+{
+ int newsize, i;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = yystacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+ i = yyssp - yyss;
+ newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) :
+ (short *)malloc(newsize * sizeof *newss);
+ if (newss == NULL)
+ return -1;
+ yyss = newss;
+ yyssp = newss + i;
+ newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) :
+ (YYSTYPE *)malloc(newsize * sizeof *newvs);
+ if (newvs == NULL)
+ return -1;
+ yyvs = newvs;
+ yyvsp = newvs + i;
+ yystacksize = newsize;
+ yysslim = yyss + newsize - 1;
+ return 0;
+}
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+#ifndef YYPARSE_PARAM
+#if defined(__cplusplus) || __STDC__
+#define YYPARSE_PARAM_ARG void
+#define YYPARSE_PARAM_DECL
+#else /* ! ANSI-C/C++ */
+#define YYPARSE_PARAM_ARG
+#define YYPARSE_PARAM_DECL
+#endif /* ANSI-C/C++ */
+#else /* YYPARSE_PARAM */
+#ifndef YYPARSE_PARAM_TYPE
+#define YYPARSE_PARAM_TYPE void *
+#endif
+#if defined(__cplusplus) || __STDC__
+#define YYPARSE_PARAM_ARG YYPARSE_PARAM_TYPE YYPARSE_PARAM
+#define YYPARSE_PARAM_DECL
+#else /* ! ANSI-C/C++ */
+#define YYPARSE_PARAM_ARG YYPARSE_PARAM
+#define YYPARSE_PARAM_DECL YYPARSE_PARAM_TYPE YYPARSE_PARAM;
+#endif /* ANSI-C/C++ */
+#endif /* ! YYPARSE_PARAM */
+
+int
+yyparse (YYPARSE_PARAM_ARG)
+ YYPARSE_PARAM_DECL
+{
+ register int yym, yyn, yystate;
+#if YYDEBUG
+ register const char *yys;
+
+ if ((yys = getenv("YYDEBUG")))
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = (-1);
+
+ if (yyss == NULL && yygrowstack()) goto yyoverflow;
+ yyssp = yyss;
+ yyvsp = yyvs;
+ *yyssp = yystate = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate])) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = yylex()) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yyssp >= yysslim && yygrowstack())
+ {
+ goto yyoverflow;
+ }
+ *++yyssp = yystate = yytable[yyn];
+ *++yyvsp = yylval;
+ yychar = (-1);
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+#if defined(lint) || defined(__GNUC__)
+ goto yynewerror;
+#endif
+yynewerror:
+ yyerror("syntax error");
+#if defined(lint) || defined(__GNUC__)
+ goto yyerrlab;
+#endif
+yyerrlab:
+ ++yynerrs;
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
+#endif
+ if (yyssp >= yysslim && yygrowstack())
+ {
+ goto yyoverflow;
+ }
+ *++yyssp = yystate = yytable[yyn];
+ *++yyvsp = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yyssp);
+#endif
+ if (yyssp <= yyss) goto yyabort;
+ --yyssp;
+ --yyvsp;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = (-1);
+ goto yyloop;
+ }
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ yyval = yyvsp[1-yym];
+ switch (yyn)
+ {
+case 1:
+#line 241 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ /* Case of regular command. Discard the error
+ safety net,and return the command just parsed. */
+ global_command = yyvsp[-1].command;
+ eof_encountered = 0;
+ discard_parser_constructs (0);
+ YYACCEPT;
+ }
+break;
+case 2:
+#line 250 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ /* Case of regular command, but not a very
+ interesting one. Return a NULL command. */
+ global_command = (COMMAND *)NULL;
+ YYACCEPT;
+ }
+break;
+case 3:
+#line 257 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ /* Error during parsing. Return NULL command. */
+ global_command = (COMMAND *)NULL;
+ eof_encountered = 0;
+ discard_parser_constructs (1);
+ if (interactive)
+ {
+ YYACCEPT;
+ }
+ else
+ {
+ YYABORT;
+ }
+ }
+break;
+case 4:
+#line 272 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ /* Case of EOF seen by itself. Do ignoreeof or
+ not. */
+ global_command = (COMMAND *)NULL;
+ handle_eof_input_unit ();
+ YYACCEPT;
+ }
+break;
+case 5:
+#line 282 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.word_list = make_word_list (yyvsp[0].word, (WORD_LIST *)NULL); }
+break;
+case 6:
+#line 284 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.word_list = make_word_list (yyvsp[0].word, yyvsp[-1].word_list); }
+break;
+case 7:
+#line 288 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.filename = yyvsp[0].word;
+ yyval.redirect = make_redirection (1, r_output_direction, redir);
+ }
+break;
+case 8:
+#line 293 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.filename = yyvsp[0].word;
+ yyval.redirect = make_redirection (0, r_input_direction, redir);
+ }
+break;
+case 9:
+#line 298 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.filename = yyvsp[0].word;
+ yyval.redirect = make_redirection (yyvsp[-2].number, r_output_direction, redir);
+ }
+break;
+case 10:
+#line 303 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.filename = yyvsp[0].word;
+ yyval.redirect = make_redirection (yyvsp[-2].number, r_input_direction, redir);
+ }
+break;
+case 11:
+#line 308 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.filename = yyvsp[0].word;
+ yyval.redirect = make_redirection (1, r_appending_to, redir);
+ }
+break;
+case 12:
+#line 313 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.filename = yyvsp[0].word;
+ yyval.redirect = make_redirection (yyvsp[-2].number, r_appending_to, redir);
+ }
+break;
+case 13:
+#line 318 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.filename = yyvsp[0].word;
+ yyval.redirect = make_redirection (0, r_reading_until, redir);
+ redir_stack[need_here_doc++] = yyval.redirect;
+ }
+break;
+case 14:
+#line 324 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.filename = yyvsp[0].word;
+ yyval.redirect = make_redirection (yyvsp[-2].number, r_reading_until, redir);
+ redir_stack[need_here_doc++] = yyval.redirect;
+ }
+break;
+case 15:
+#line 330 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.dest = yyvsp[0].number;
+ yyval.redirect = make_redirection (0, r_duplicating_input, redir);
+ }
+break;
+case 16:
+#line 335 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.dest = yyvsp[0].number;
+ yyval.redirect = make_redirection (yyvsp[-2].number, r_duplicating_input, redir);
+ }
+break;
+case 17:
+#line 340 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.dest = yyvsp[0].number;
+ yyval.redirect = make_redirection (1, r_duplicating_output, redir);
+ }
+break;
+case 18:
+#line 345 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.dest = yyvsp[0].number;
+ yyval.redirect = make_redirection (yyvsp[-2].number, r_duplicating_output, redir);
+ }
+break;
+case 19:
+#line 350 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.filename = yyvsp[0].word;
+ yyval.redirect = make_redirection (0, r_duplicating_input_word, redir);
+ }
+break;
+case 20:
+#line 355 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.filename = yyvsp[0].word;
+ yyval.redirect = make_redirection (yyvsp[-2].number, r_duplicating_input_word, redir);
+ }
+break;
+case 21:
+#line 360 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.filename = yyvsp[0].word;
+ yyval.redirect = make_redirection (1, r_duplicating_output_word, redir);
+ }
+break;
+case 22:
+#line 365 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.filename = yyvsp[0].word;
+ yyval.redirect = make_redirection (yyvsp[-2].number, r_duplicating_output_word, redir);
+ }
+break;
+case 23:
+#line 370 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.filename = yyvsp[0].word;
+ yyval.redirect = make_redirection
+ (0, r_deblank_reading_until, redir);
+ redir_stack[need_here_doc++] = yyval.redirect;
+ }
+break;
+case 24:
+#line 377 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.filename = yyvsp[0].word;
+ yyval.redirect = make_redirection
+ (yyvsp[-2].number, r_deblank_reading_until, redir);
+ redir_stack[need_here_doc++] = yyval.redirect;
+ }
+break;
+case 25:
+#line 384 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.dest = 0L;
+ yyval.redirect = make_redirection (1, r_close_this, redir);
+ }
+break;
+case 26:
+#line 389 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.dest = 0L;
+ yyval.redirect = make_redirection (yyvsp[-2].number, r_close_this, redir);
+ }
+break;
+case 27:
+#line 394 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.dest = 0L;
+ yyval.redirect = make_redirection (0, r_close_this, redir);
+ }
+break;
+case 28:
+#line 399 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.dest = 0L;
+ yyval.redirect = make_redirection (yyvsp[-2].number, r_close_this, redir);
+ }
+break;
+case 29:
+#line 404 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.filename = yyvsp[0].word;
+ yyval.redirect = make_redirection (1, r_err_and_out, redir);
+ }
+break;
+case 30:
+#line 409 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.filename = yyvsp[0].word;
+ yyval.redirect = make_redirection (yyvsp[-2].number, r_input_output, redir);
+ }
+break;
+case 31:
+#line 414 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.filename = yyvsp[0].word;
+ yyval.redirect = make_redirection (0, r_input_output, redir);
+ }
+break;
+case 32:
+#line 419 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.filename = yyvsp[0].word;
+ yyval.redirect = make_redirection (1, r_output_force, redir);
+ }
+break;
+case 33:
+#line 424 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ redir.filename = yyvsp[0].word;
+ yyval.redirect = make_redirection (yyvsp[-2].number, r_output_force, redir);
+ }
+break;
+case 34:
+#line 431 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.element.word = yyvsp[0].word; yyval.element.redirect = 0; }
+break;
+case 35:
+#line 433 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.element.word = yyvsp[0].word; yyval.element.redirect = 0; }
+break;
+case 36:
+#line 435 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.element.redirect = yyvsp[0].redirect; yyval.element.word = 0; }
+break;
+case 37:
+#line 439 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ yyval.redirect = yyvsp[0].redirect;
+ }
+break;
+case 38:
+#line 443 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ register REDIRECT *t;
+
+ for (t = yyvsp[-1].redirect; t->next; t = t->next)
+ ;
+ t->next = yyvsp[0].redirect;
+ yyval.redirect = yyvsp[-1].redirect;
+ }
+break;
+case 39:
+#line 454 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_simple_command (yyvsp[0].element, (COMMAND *)NULL); }
+break;
+case 40:
+#line 456 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_simple_command (yyvsp[0].element, yyvsp[-1].command); }
+break;
+case 41:
+#line 460 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = clean_simple_command (yyvsp[0].command); }
+break;
+case 42:
+#line 462 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = yyvsp[0].command; }
+break;
+case 43:
+#line 464 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ COMMAND *tc;
+
+ tc = yyvsp[-1].command;
+ if (tc->redirects)
+ {
+ register REDIRECT *t;
+ for (t = tc->redirects; t->next; t = t->next)
+ ;
+ t->next = yyvsp[0].redirect;
+ }
+ else
+ tc->redirects = yyvsp[0].redirect;
+ yyval.command = yyvsp[-1].command;
+ }
+break;
+case 44:
+#line 480 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = yyvsp[0].command; }
+break;
+case 45:
+#line 484 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = yyvsp[0].command; }
+break;
+case 46:
+#line 486 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = yyvsp[0].command; }
+break;
+case 47:
+#line 488 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_while_command (yyvsp[-3].command, yyvsp[-1].command); }
+break;
+case 48:
+#line 490 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_until_command (yyvsp[-3].command, yyvsp[-1].command); }
+break;
+case 49:
+#line 492 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = yyvsp[0].command; }
+break;
+case 50:
+#line 494 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = yyvsp[0].command; }
+break;
+case 51:
+#line 496 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = yyvsp[0].command; }
+break;
+case 52:
+#line 498 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = yyvsp[0].command; }
+break;
+case 53:
+#line 500 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = yyvsp[0].command; }
+break;
+case 54:
+#line 502 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = yyvsp[0].command; }
+break;
+case 55:
+#line 504 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = yyvsp[0].command; }
+break;
+case 56:
+#line 508 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_for_command (yyvsp[-4].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command); }
+break;
+case 57:
+#line 510 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_for_command (yyvsp[-4].word, add_string_to_list ("$@", (WORD_LIST *)NULL), yyvsp[-1].command); }
+break;
+case 58:
+#line 512 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_for_command (yyvsp[-5].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command); }
+break;
+case 59:
+#line 514 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_for_command (yyvsp[-5].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command); }
+break;
+case 60:
+#line 516 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_for_command (yyvsp[-8].word, REVERSE_LIST (yyvsp[-5].word_list, WORD_LIST *), yyvsp[-1].command); }
+break;
+case 61:
+#line 518 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_for_command (yyvsp[-8].word, REVERSE_LIST (yyvsp[-5].word_list, WORD_LIST *), yyvsp[-1].command); }
+break;
+case 62:
+#line 522 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_arith_for_command (yyvsp[-5].word_list, yyvsp[-1].command, arith_for_lineno); }
+break;
+case 63:
+#line 524 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_arith_for_command (yyvsp[-5].word_list, yyvsp[-1].command, arith_for_lineno); }
+break;
+case 64:
+#line 526 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_arith_for_command (yyvsp[-3].word_list, yyvsp[-1].command, arith_for_lineno); }
+break;
+case 65:
+#line 528 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_arith_for_command (yyvsp[-3].word_list, yyvsp[-1].command, arith_for_lineno); }
+break;
+case 66:
+#line 532 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ yyval.command = make_select_command (yyvsp[-4].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command);
+ }
+break;
+case 67:
+#line 536 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ yyval.command = make_select_command (yyvsp[-4].word, add_string_to_list ("$@", (WORD_LIST *)NULL), yyvsp[-1].command);
+ }
+break;
+case 68:
+#line 540 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ yyval.command = make_select_command (yyvsp[-5].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command);
+ }
+break;
+case 69:
+#line 544 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ yyval.command = make_select_command (yyvsp[-5].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command);
+ }
+break;
+case 70:
+#line 548 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ yyval.command = make_select_command (yyvsp[-8].word, (WORD_LIST *)reverse_list (yyvsp[-5].word_list), yyvsp[-1].command);
+ }
+break;
+case 71:
+#line 552 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ yyval.command = make_select_command (yyvsp[-8].word, (WORD_LIST *)reverse_list (yyvsp[-5].word_list), yyvsp[-1].command);
+ }
+break;
+case 72:
+#line 558 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_case_command (yyvsp[-4].word, (PATTERN_LIST *)NULL); }
+break;
+case 73:
+#line 560 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_case_command (yyvsp[-5].word, yyvsp[-2].pattern); }
+break;
+case 74:
+#line 562 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_case_command (yyvsp[-4].word, yyvsp[-1].pattern); }
+break;
+case 75:
+#line 566 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_function_def (yyvsp[-4].word, yyvsp[0].command, function_dstart, function_bstart); }
+break;
+case 76:
+#line 569 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_function_def (yyvsp[-4].word, yyvsp[0].command, function_dstart, function_bstart); }
+break;
+case 77:
+#line 572 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_function_def (yyvsp[-2].word, yyvsp[0].command, function_dstart, function_bstart); }
+break;
+case 78:
+#line 577 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = yyvsp[0].command; }
+break;
+case 79:
+#line 579 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ COMMAND *tc;
+
+ tc = yyvsp[-1].command;
+ /* According to Posix.2 3.9.5, redirections
+ specified after the body of a function should
+ be attached to the function and performed when
+ the function is executed, not as part of the
+ function definition command. */
+ /* XXX - I don't think it matters, but we might
+ want to change this in the future to avoid
+ problems differentiating between a function
+ definition with a redirection and a function
+ definition containing a single command with a
+ redirection. The two are semantically equivalent,
+ though -- the only difference is in how the
+ command printing code displays the redirections. */
+ if (tc->redirects)
+ {
+ register REDIRECT *t;
+ for (t = tc->redirects; t->next; t = t->next)
+ ;
+ t->next = yyvsp[0].redirect;
+ }
+ else
+ tc->redirects = yyvsp[0].redirect;
+ yyval.command = yyvsp[-1].command;
+ }
+break;
+case 80:
+#line 610 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ yyval.command = make_subshell_command (yyvsp[-1].command);
+ yyval.command->flags |= CMD_WANT_SUBSHELL;
+ }
+break;
+case 81:
+#line 617 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_if_command (yyvsp[-3].command, yyvsp[-1].command, (COMMAND *)NULL); }
+break;
+case 82:
+#line 619 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_if_command (yyvsp[-5].command, yyvsp[-3].command, yyvsp[-1].command); }
+break;
+case 83:
+#line 621 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_if_command (yyvsp[-4].command, yyvsp[-2].command, yyvsp[-1].command); }
+break;
+case 84:
+#line 626 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_group_command (yyvsp[-1].command); }
+break;
+case 85:
+#line 630 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_arith_command (yyvsp[0].word_list); }
+break;
+case 86:
+#line 634 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = yyvsp[-1].command; }
+break;
+case 87:
+#line 638 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_if_command (yyvsp[-2].command, yyvsp[0].command, (COMMAND *)NULL); }
+break;
+case 88:
+#line 640 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_if_command (yyvsp[-4].command, yyvsp[-2].command, yyvsp[0].command); }
+break;
+case 89:
+#line 642 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = make_if_command (yyvsp[-3].command, yyvsp[-1].command, yyvsp[0].command); }
+break;
+case 91:
+#line 647 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyvsp[0].pattern->next = yyvsp[-1].pattern; yyval.pattern = yyvsp[0].pattern; }
+break;
+case 92:
+#line 651 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.pattern = make_pattern_list (yyvsp[-2].word_list, yyvsp[0].command); }
+break;
+case 93:
+#line 653 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.pattern = make_pattern_list (yyvsp[-2].word_list, (COMMAND *)NULL); }
+break;
+case 94:
+#line 655 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.pattern = make_pattern_list (yyvsp[-2].word_list, yyvsp[0].command); }
+break;
+case 95:
+#line 657 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.pattern = make_pattern_list (yyvsp[-2].word_list, (COMMAND *)NULL); }
+break;
+case 97:
+#line 662 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyvsp[-1].pattern->next = yyvsp[-2].pattern; yyval.pattern = yyvsp[-1].pattern; }
+break;
+case 98:
+#line 666 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.word_list = make_word_list (yyvsp[0].word, (WORD_LIST *)NULL); }
+break;
+case 99:
+#line 668 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.word_list = make_word_list (yyvsp[0].word, yyvsp[-2].word_list); }
+break;
+case 100:
+#line 677 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ yyval.command = yyvsp[0].command;
+ if (need_here_doc)
+ gather_here_documents ();
+ }
+break;
+case 102:
+#line 686 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ yyval.command = yyvsp[0].command;
+ }
+break;
+case 104:
+#line 693 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ if (yyvsp[-2].command->type == cm_connection)
+ yyval.command = connect_async_list (yyvsp[-2].command, (COMMAND *)NULL, '&');
+ else
+ yyval.command = command_connect (yyvsp[-2].command, (COMMAND *)NULL, '&');
+ }
+break;
+case 106:
+#line 704 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, AND_AND); }
+break;
+case 107:
+#line 706 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, OR_OR); }
+break;
+case 108:
+#line 708 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ if (yyvsp[-3].command->type == cm_connection)
+ yyval.command = connect_async_list (yyvsp[-3].command, yyvsp[0].command, '&');
+ else
+ yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, '&');
+ }
+break;
+case 109:
+#line 715 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, ';'); }
+break;
+case 110:
+#line 717 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, ';'); }
+break;
+case 111:
+#line 719 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = yyvsp[0].command; }
+break;
+case 117:
+#line 738 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ yyval.command = yyvsp[0].command;
+ if (need_here_doc)
+ gather_here_documents ();
+ }
+break;
+case 118:
+#line 744 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ if (yyvsp[-1].command->type == cm_connection)
+ yyval.command = connect_async_list (yyvsp[-1].command, (COMMAND *)NULL, '&');
+ else
+ yyval.command = command_connect (yyvsp[-1].command, (COMMAND *)NULL, '&');
+ if (need_here_doc)
+ gather_here_documents ();
+ }
+break;
+case 119:
+#line 753 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ yyval.command = yyvsp[-1].command;
+ if (need_here_doc)
+ gather_here_documents ();
+ }
+break;
+case 120:
+#line 761 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, AND_AND); }
+break;
+case 121:
+#line 763 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, OR_OR); }
+break;
+case 122:
+#line 765 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ if (yyvsp[-2].command->type == cm_connection)
+ yyval.command = connect_async_list (yyvsp[-2].command, yyvsp[0].command, '&');
+ else
+ yyval.command = command_connect (yyvsp[-2].command, yyvsp[0].command, '&');
+ }
+break;
+case 123:
+#line 772 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = command_connect (yyvsp[-2].command, yyvsp[0].command, ';'); }
+break;
+case 124:
+#line 775 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = yyvsp[0].command; }
+break;
+case 125:
+#line 779 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = yyvsp[0].command; }
+break;
+case 126:
+#line 781 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ yyvsp[0].command->flags |= CMD_INVERT_RETURN;
+ yyval.command = yyvsp[0].command;
+ }
+break;
+case 127:
+#line 786 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ yyvsp[0].command->flags |= yyvsp[-1].number;
+ yyval.command = yyvsp[0].command;
+ }
+break;
+case 128:
+#line 791 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ yyvsp[0].command->flags |= yyvsp[-2].number|CMD_INVERT_RETURN;
+ yyval.command = yyvsp[0].command;
+ }
+break;
+case 129:
+#line 796 "/usr/homes/chet/src/bash/src/parse.y"
+{
+ yyvsp[0].command->flags |= yyvsp[-1].number|CMD_INVERT_RETURN;
+ yyval.command = yyvsp[0].command;
+ }
+break;
+case 130:
+#line 804 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, '|'); }
+break;
+case 131:
+#line 806 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.command = yyvsp[0].command; }
+break;
+case 132:
+#line 810 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.number = CMD_TIME_PIPELINE; }
+break;
+case 133:
+#line 812 "/usr/homes/chet/src/bash/src/parse.y"
+{ yyval.number = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
+break;
+#line 5117 "y.tab.c"
+ }
+ yyssp -= yym;
+ yystate = *yyssp;
+ yyvsp -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yyssp = YYFINAL;
+ *++yyvsp = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = yylex()) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yyssp, yystate);
+#endif
+ if (yyssp >= yysslim && yygrowstack())
+ {
+ goto yyoverflow;
+ }
+ *++yyssp = yystate;
+ *++yyvsp = yyval;
+ goto yyloop;
+yyoverflow:
+ yyerror("yacc stack overflow");
+yyabort:
+ return (1);
+yyaccept:
+ return (0);
+}