Main Page | Class List | Directories | File List | Class Members | File Members

awkgram.c

Go to the documentation of this file.
00001 /* A Bison parser, made by GNU Bison 1.875.  */
00002 
00003 /* Skeleton parser for Yacc-like parsing with Bison,
00004    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
00005 
00006    This program is free software; you can redistribute it and/or modify
00007    it under the terms of the GNU General Public License as published by
00008    the Free Software Foundation; either version 2, or (at your option)
00009    any later version.
00010 
00011    This program is distributed in the hope that it will be useful,
00012    but WITHOUT ANY WARRANTY; without even the implied warranty of
00013    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014    GNU General Public License for more details.
00015 
00016    You should have received a copy of the GNU General Public License
00017    along with this program; if not, write to the Free Software
00018    Foundation, Inc., 59 Temple Place - Suite 330,
00019    Boston, MA 02111-1307, USA.  */
00020 
00021 /* As a special exception, when this file is copied by Bison into a
00022    Bison output file, you may use that output file without restriction.
00023    This special exception was added by the Free Software Foundation
00024    in version 1.24 of Bison.  */
00025 
00026 /* Written by Richard Stallman by simplifying the original so called
00027    ``semantic'' parser.  */
00028 
00029 /* All symbols defined below should begin with yy or YY, to avoid
00030    infringing on user name space.  This should be done even for local
00031    variables, as they might otherwise be expanded by user macros.
00032    There are some unavoidable exceptions within include files to
00033    define necessary library symbols; they are noted "INFRINGES ON
00034    USER NAME SPACE" below.  */
00035 
00036 /* Identify Bison output.  */
00037 #define YYBISON 1
00038 
00039 /* Skeleton name.  */
00040 #define YYSKELETON_NAME "yacc.c"
00041 
00042 /* Pure parsers.  */
00043 #define YYPURE 0
00044 
00045 /* Using locations.  */
00046 #define YYLSP_NEEDED 0
00047 
00048 
00049 
00050 /* Tokens.  */
00051 #ifndef YYTOKENTYPE
00052 # define YYTOKENTYPE
00053    /* Put the tokens into the symbol table, so that GDB and other debuggers
00054       know about them.  */
00055    enum yytokentype {
00056      FUNC_CALL = 258,
00057      NAME = 259,
00058      REGEXP = 260,
00059      ERROR = 261,
00060      YNUMBER = 262,
00061      YSTRING = 263,
00062      RELOP = 264,
00063      IO_OUT = 265,
00064      IO_IN = 266,
00065      ASSIGNOP = 267,
00066      ASSIGN = 268,
00067      MATCHOP = 269,
00068      CONCAT_OP = 270,
00069      LEX_BEGIN = 271,
00070      LEX_END = 272,
00071      LEX_IF = 273,
00072      LEX_ELSE = 274,
00073      LEX_RETURN = 275,
00074      LEX_DELETE = 276,
00075      LEX_SWITCH = 277,
00076      LEX_CASE = 278,
00077      LEX_DEFAULT = 279,
00078      LEX_WHILE = 280,
00079      LEX_DO = 281,
00080      LEX_FOR = 282,
00081      LEX_BREAK = 283,
00082      LEX_CONTINUE = 284,
00083      LEX_PRINT = 285,
00084      LEX_PRINTF = 286,
00085      LEX_NEXT = 287,
00086      LEX_EXIT = 288,
00087      LEX_FUNCTION = 289,
00088      LEX_GETLINE = 290,
00089      LEX_NEXTFILE = 291,
00090      LEX_IN = 292,
00091      LEX_AND = 293,
00092      LEX_OR = 294,
00093      INCREMENT = 295,
00094      DECREMENT = 296,
00095      LEX_BUILTIN = 297,
00096      LEX_LENGTH = 298,
00097      NEWLINE = 299,
00098      SLASH_BEFORE_EQUAL = 300,
00099      UNARY = 301
00100    };
00101 #endif
00102 #define FUNC_CALL 258
00103 #define NAME 259
00104 #define REGEXP 260
00105 #define ERROR 261
00106 #define YNUMBER 262
00107 #define YSTRING 263
00108 #define RELOP 264
00109 #define IO_OUT 265
00110 #define IO_IN 266
00111 #define ASSIGNOP 267
00112 #define ASSIGN 268
00113 #define MATCHOP 269
00114 #define CONCAT_OP 270
00115 #define LEX_BEGIN 271
00116 #define LEX_END 272
00117 #define LEX_IF 273
00118 #define LEX_ELSE 274
00119 #define LEX_RETURN 275
00120 #define LEX_DELETE 276
00121 #define LEX_SWITCH 277
00122 #define LEX_CASE 278
00123 #define LEX_DEFAULT 279
00124 #define LEX_WHILE 280
00125 #define LEX_DO 281
00126 #define LEX_FOR 282
00127 #define LEX_BREAK 283
00128 #define LEX_CONTINUE 284
00129 #define LEX_PRINT 285
00130 #define LEX_PRINTF 286
00131 #define LEX_NEXT 287
00132 #define LEX_EXIT 288
00133 #define LEX_FUNCTION 289
00134 #define LEX_GETLINE 290
00135 #define LEX_NEXTFILE 291
00136 #define LEX_IN 292
00137 #define LEX_AND 293
00138 #define LEX_OR 294
00139 #define INCREMENT 295
00140 #define DECREMENT 296
00141 #define LEX_BUILTIN 297
00142 #define LEX_LENGTH 298
00143 #define NEWLINE 299
00144 #define SLASH_BEFORE_EQUAL 300
00145 #define UNARY 301
00146 
00147 
00148 
00149 
00150 /* Copy the first part of user declarations.  */
00151 #line 26 "awkgram.y"
00152 
00153 #ifdef GAWKDEBUG
00154 #define YYDEBUG 12
00155 #endif
00156 
00157 #include "awk.h"
00158 
00159 #define CAN_FREE        TRUE
00160 #define DONT_FREE       FALSE
00161 
00162 #if defined(HAVE_STDARG_H) && defined(__STDC__) && __STDC__
00163 static void yyerror(const char *m, ...) ATTRIBUTE_PRINTF_1;
00164 #else
00165 static void yyerror(); /* va_alist */
00166 #endif
00167 static char *get_src_buf P((void));
00168 static int yylex P((void));
00169 static NODE *node_common P((NODETYPE op));
00170 static NODE *snode P((NODE *subn, NODETYPE op, int sindex));
00171 static NODE *make_for_loop P((NODE *init, NODE *cond, NODE *incr));
00172 static NODE *append_right P((NODE *list, NODE *new));
00173 static inline NODE *append_pattern P((NODE **list, NODE *patt));
00174 static void func_install P((NODE *params, NODE *def));
00175 static void pop_var P((NODE *np, int freeit));
00176 static void pop_params P((NODE *params));
00177 static NODE *make_param P((char *name));
00178 static NODE *mk_rexp P((NODE *exp));
00179 static int dup_parms P((NODE *func));
00180 static void param_sanity P((NODE *arglist));
00181 static int parms_shadow P((const char *fname, NODE *func));
00182 static int isnoeffect P((NODETYPE t));
00183 static int isassignable P((NODE *n));
00184 static void dumpintlstr P((const char *str, size_t len));
00185 static void dumpintlstr2 P((const char *str1, size_t len1, const char *str2, size_t len2));
00186 static void count_args P((NODE *n));
00187 static int isarray P((NODE *n));
00188 
00189 enum defref { FUNC_DEFINE, FUNC_USE };
00190 static void func_use P((const char *name, enum defref how));
00191 static void check_funcs P((void));
00192 
00193 static int want_regexp;         /* lexical scanning kludge */
00194 static int can_return;          /* parsing kludge */
00195 static int begin_or_end_rule = FALSE;   /* parsing kludge */
00196 static int parsing_end_rule = FALSE; /* for warnings */
00197 static int in_print = FALSE;    /* lexical scanning kludge for print */
00198 static int in_parens = 0;       /* lexical scanning kludge for print */
00199 static char *lexptr;            /* pointer to next char during parsing */
00200 static char *lexend;
00201 static char *lexptr_begin;      /* keep track of where we were for error msgs */
00202 static char *lexeme;            /* beginning of lexeme for debugging */
00203 static char *thisline = NULL;
00204 #define YYDEBUG_LEXER_TEXT (lexeme)
00205 static int param_counter;
00206 static char *tokstart = NULL;
00207 static char *tok = NULL;
00208 static char *tokend;
00209 
00210 static long func_count;         /* total number of functions */
00211 
00212 #define HASHSIZE        1021    /* this constant only used here */
00213 NODE *variables[HASHSIZE];
00214 static int var_count;           /* total number of global variables */
00215 
00216 extern char *source;
00217 extern int sourceline;
00218 extern struct src *srcfiles;
00219 extern int numfiles;
00220 extern int errcount;
00221 extern NODE *begin_block;
00222 extern NODE *end_block;
00223 
00224 /*
00225  * This string cannot occur as a real awk identifier.
00226  * Use it as a special token to make function parsing
00227  * uniform, but if it's seen, don't install the function.
00228  * e.g.
00229  *      function split(x) { return x }
00230  *      function x(a) { return a }
00231  * should only produce one error message, and not core dump.
00232  */
00233 static char builtin_func[] = "@builtin";
00234 
00235 
00236 /* Enabling traces.  */
00237 #ifndef YYDEBUG
00238 # define YYDEBUG 0
00239 #endif
00240 
00241 /* Enabling verbose error messages.  */
00242 #ifdef YYERROR_VERBOSE
00243 # undef YYERROR_VERBOSE
00244 # define YYERROR_VERBOSE 1
00245 #else
00246 # define YYERROR_VERBOSE 0
00247 #endif
00248 
00249 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
00250 #line 110 "awkgram.y"
00251 typedef union YYSTYPE {
00252         long lval;
00253         AWKNUM fval;
00254         NODE *nodeval;
00255         NODETYPE nodetypeval;
00256         char *sval;
00257         NODE *(*ptrval) P((void));
00258 } YYSTYPE;
00259 /* Line 191 of yacc.c.  */
00260 #line 260 "y.tab.c"
00261 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
00262 # define YYSTYPE_IS_DECLARED 1
00263 # define YYSTYPE_IS_TRIVIAL 1
00264 #endif
00265 
00266 
00267 
00268 /* Copy the second part of user declarations.  */
00269 
00270 
00271 /* Line 214 of yacc.c.  */
00272 #line 272 "y.tab.c"
00273 
00274 #if ! defined (yyoverflow) || YYERROR_VERBOSE
00275 
00276 /* The parser invokes alloca or malloc; define the necessary symbols.  */
00277 
00278 #undef YYSTACK_USE_ALLOCA       /* Gawk: nuke alloca once and for all */
00279 
00280 # if YYSTACK_USE_ALLOCA
00281 #  define YYSTACK_ALLOC alloca
00282 # else
00283 #  ifndef YYSTACK_USE_ALLOCA
00284 #   if defined (alloca) || defined (_ALLOCA_H)
00285 #    define YYSTACK_ALLOC alloca
00286 #   else
00287 #    ifdef __GNUC__
00288 #     define YYSTACK_ALLOC __builtin_alloca
00289 #    endif
00290 #   endif
00291 #  endif
00292 # endif
00293 
00294 # ifdef YYSTACK_ALLOC
00295    /* Pacify GCC's `empty if-body' warning. */
00296 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
00297 # else
00298 #  if defined (__STDC__) || defined (__cplusplus)
00299 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
00300 #   define YYSIZE_T size_t
00301 #  endif
00302 #  define YYSTACK_ALLOC malloc
00303 #  define YYSTACK_FREE free
00304 # endif
00305 #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
00306 
00307 
00308 #if (! defined (yyoverflow) \
00309      && (! defined (__cplusplus) \
00310          || (YYSTYPE_IS_TRIVIAL)))
00311 
00312 /* A type that is properly aligned for any stack member.  */
00313 union yyalloc
00314 {
00315   short yyss;
00316   YYSTYPE yyvs;
00317   };
00318 
00319 /* The size of the maximum gap between one aligned stack and the next.  */
00320 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
00321 
00322 /* The size of an array large to enough to hold all stacks, each with
00323    N elements.  */
00324 # define YYSTACK_BYTES(N) \
00325      ((N) * (sizeof (short) + sizeof (YYSTYPE))                         \
00326       + YYSTACK_GAP_MAXIMUM)
00327 
00328 /* Copy COUNT objects from FROM to TO.  The source and destination do
00329    not overlap.  */
00330 # ifndef YYCOPY
00331 #  if 1 < __GNUC__
00332 #   define YYCOPY(To, From, Count) \
00333       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
00334 #  else
00335 #   define YYCOPY(To, From, Count)              \
00336       do                                        \
00337         {                                       \
00338           register YYSIZE_T yyi;                \
00339           for (yyi = 0; yyi < (Count); yyi++)   \
00340             (To)[yyi] = (From)[yyi];            \
00341         }                                       \
00342       while (0)
00343 #  endif
00344 # endif
00345 
00346 /* Relocate STACK from its old location to the new one.  The
00347    local variables YYSIZE and YYSTACKSIZE give the old and new number of
00348    elements in the stack, and YYPTR gives the new location of the
00349    stack.  Advance YYPTR to a properly aligned location for the next
00350    stack.  */
00351 # define YYSTACK_RELOCATE(Stack)                                        \
00352     do                                                                  \
00353       {                                                                 \
00354         YYSIZE_T yynewbytes;                                            \
00355         YYCOPY (&yyptr->Stack, Stack, yysize);                          \
00356         Stack = &yyptr->Stack;                                          \
00357         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
00358         yyptr += yynewbytes / sizeof (*yyptr);                          \
00359       }                                                                 \
00360     while (0)
00361 
00362 #endif
00363 
00364 #if defined (__STDC__) || defined (__cplusplus)
00365    typedef signed char yysigned_char;
00366 #else
00367    typedef short yysigned_char;
00368 #endif
00369 
00370 /* YYFINAL -- State number of the termination state. */
00371 #define YYFINAL  5
00372 /* YYLAST -- Last index in YYTABLE.  */
00373 #define YYLAST   1008
00374 
00375 /* YYNTOKENS -- Number of terminals. */
00376 #define YYNTOKENS  67
00377 /* YYNNTS -- Number of nonterminals. */
00378 #define YYNNTS  53
00379 /* YYNRULES -- Number of rules. */
00380 #define YYNRULES  155
00381 /* YYNRULES -- Number of states. */
00382 #define YYNSTATES  293
00383 
00384 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
00385 #define YYUNDEFTOK  2
00386 #define YYMAXUTOK   301
00387 
00388 #define YYTRANSLATE(YYX)                                                \
00389   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
00390 
00391 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
00392 static const unsigned char yytranslate[] =
00393 {
00394        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00395        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00396        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00397        2,     2,     2,    56,     2,     2,    59,    55,     2,     2,
00398       60,    61,    53,    51,    48,    52,     2,    54,     2,     2,
00399        2,     2,     2,     2,     2,     2,     2,     2,    47,    66,
00400       49,     2,    50,    46,     2,     2,     2,     2,     2,     2,
00401        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00402        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00403        2,    62,     2,    63,    58,     2,     2,     2,     2,     2,
00404        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00405        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00406        2,     2,     2,    64,     2,    65,     2,     2,     2,     2,
00407        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00408        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00409        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00410        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00411        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00412        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00413        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00414        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00415        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00416        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00417        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00418        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00419        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
00420        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
00421       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
00422       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
00423       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
00424       45,    57
00425 };
00426 
00427 #if YYDEBUG
00428 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
00429    YYRHS.  */
00430 static const unsigned short yyprhs[] =
00431 {
00432        0,     0,     3,     7,     8,    11,    14,    17,    20,    23,
00433       24,    26,    30,    32,    34,    40,    42,    44,    46,    48,
00434       50,    51,    59,    60,    64,    66,    68,    69,    72,    75,
00435       77,    80,    83,    87,    89,    99,   106,   115,   124,   137,
00436      149,   152,   155,   158,   161,   165,   166,   171,   174,   175,
00437      180,   186,   189,   194,   196,   197,   199,   201,   202,   205,
00438      208,   214,   219,   221,   224,   227,   229,   231,   233,   235,
00439      237,   243,   244,   245,   249,   256,   266,   268,   271,   272,
00440      274,   275,   278,   279,   281,   283,   287,   289,   292,   296,
00441      297,   299,   300,   302,   304,   308,   310,   313,   317,   321,
00442      325,   329,   333,   337,   341,   345,   351,   353,   355,   357,
00443      360,   362,   364,   366,   368,   370,   373,   379,   381,   384,
00444      386,   390,   394,   398,   402,   406,   410,   414,   419,   422,
00445      425,   428,   432,   437,   442,   444,   449,   451,   454,   457,
00446      459,   461,   464,   467,   468,   470,   472,   477,   480,   483,
00447      486,   488,   489,   491,   493,   495
00448 };
00449 
00450 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
00451 static const yysigned_char yyrhs[] =
00452 {
00453       68,     0,    -1,    97,    69,    97,    -1,    -1,    69,    70,
00454       -1,    69,     1,    -1,    71,    72,    -1,    71,    81,    -1,
00455       75,    72,    -1,    -1,   104,    -1,   104,    48,   104,    -1,
00456       16,    -1,    17,    -1,   113,    80,   114,   116,    97,    -1,
00457        4,    -1,     3,    -1,    74,    -1,    42,    -1,    43,    -1,
00458       -1,    34,    76,    73,    60,    99,   115,    97,    -1,    -1,
00459       79,    78,     5,    -1,    54,    -1,    45,    -1,    -1,    80,
00460       82,    -1,    80,     1,    -1,    96,    -1,   117,    97,    -1,
00461      117,    97,    -1,   113,    80,   114,    -1,    95,    -1,    22,
00462       60,   104,   115,    97,   113,    87,    97,   114,    -1,    25,
00463       60,   104,   115,    97,    82,    -1,    26,    97,    82,    25,
00464       60,   104,   115,    97,    -1,    27,    60,     4,    37,     4,
00465      115,    97,    82,    -1,    27,    60,    86,   117,    97,   104,
00466      117,    97,    86,   115,    97,    82,    -1,    27,    60,    86,
00467      117,    97,   117,    97,    86,   115,    97,    82,    -1,    28,
00468       81,    -1,    29,    81,    -1,    32,    81,    -1,    36,    81,
00469       -1,    33,   101,    81,    -1,    -1,    20,    83,   101,    81,
00470       -1,    84,    81,    -1,    -1,    91,    85,    92,    93,    -1,
00471       21,     4,    62,   103,    63,    -1,    21,     4,    -1,    21,
00472       60,     4,    61,    -1,   104,    -1,    -1,    84,    -1,    88,
00473       -1,    -1,    88,    89,    -1,    88,     1,    -1,    23,    90,
00474      118,    97,    80,    -1,    24,   118,    97,    80,    -1,     7,
00475       -1,    52,     7,    -1,    51,     7,    -1,     8,    -1,    77,
00476       -1,    30,    -1,    31,    -1,   102,    -1,    60,   104,   119,
00477      103,   115,    -1,    -1,    -1,    10,    94,   108,    -1,    18,
00478       60,   104,   115,    97,    82,    -1,    18,    60,   104,   115,
00479       97,    82,    19,    97,    82,    -1,    44,    -1,    96,    44,
00480       -1,    -1,    96,    -1,    -1,    49,   109,    -1,    -1,   100,
00481       -1,     4,    -1,   100,   119,     4,    -1,     1,    -1,   100,
00482        1,    -1,   100,   119,     1,    -1,    -1,   104,    -1,    -1,
00483      103,    -1,   104,    -1,   103,   119,   104,    -1,     1,    -1,
00484      103,     1,    -1,   103,     1,   104,    -1,   103,   119,     1,
00485       -1,   112,   105,   104,    -1,   104,    38,   104,    -1,   104,
00486       39,   104,    -1,   104,    14,   104,    -1,   104,    37,     4,
00487       -1,   104,   107,   104,    -1,   104,    46,   104,    47,   104,
00488       -1,   108,    -1,    13,    -1,    12,    -1,    45,    13,    -1,
00489        9,    -1,    49,    -1,   106,    -1,    50,    -1,    77,    -1,
00490       56,    77,    -1,    60,   103,   115,    37,     4,    -1,   109,
00491       -1,   108,   109,    -1,   110,    -1,   109,    58,   109,    -1,
00492      109,    53,   109,    -1,   109,    54,   109,    -1,   109,    55,
00493      109,    -1,   109,    51,   109,    -1,   109,    52,   109,    -1,
00494       35,   111,    98,    -1,   109,    11,    35,   111,    -1,   112,
00495       40,    -1,   112,    41,    -1,    56,   109,    -1,    60,   104,
00496      115,    -1,    42,    60,   102,   115,    -1,    43,    60,   102,
00497      115,    -1,    43,    -1,     3,    60,   102,   115,    -1,   112,
00498       -1,    40,   112,    -1,    41,   112,    -1,     7,    -1,     8,
00499       -1,    52,   109,    -1,    51,   109,    -1,    -1,   112,    -1,
00500        4,    -1,     4,    62,   103,    63,    -1,    59,   110,    -1,
00501       64,    97,    -1,    65,    97,    -1,    61,    -1,    -1,   117,
00502       -1,    66,    -1,    47,    -1,    48,    97,    -1
00503 };
00504 
00505 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
00506 static const unsigned short yyrline[] =
00507 {
00508        0,   171,   171,   177,   179,   184,   196,   200,   215,   226,
00509      229,   233,   243,   248,   256,   261,   263,   265,   276,   277,
00510      282,   281,   305,   304,   327,   328,   333,   334,   352,   357,
00511      358,   362,   364,   366,   368,   370,   372,   374,   416,   420,
00512      425,   428,   431,   440,   460,   463,   462,   469,   481,   481,
00513      512,   514,   528,   543,   549,   550,   555,   608,   609,   626,
00514      631,   633,   638,   640,   645,   647,   649,   654,   655,   663,
00515      664,   670,   675,   675,   686,   691,   698,   699,   702,   704,
00516      709,   710,   716,   717,   722,   724,   726,   728,   730,   737,
00517      738,   744,   745,   750,   752,   758,   760,   762,   764,   769,
00518      775,   777,   779,   785,   787,   793,   795,   800,   802,   804,
00519      809,   811,   815,   816,   821,   823,   831,   833,   835,   840,
00520      842,   844,   846,   848,   850,   852,   854,   860,   865,   867,
00521      872,   874,   876,   879,   881,   889,   897,   898,   900,   902,
00522      904,   907,   915,   927,   928,   933,   935,   949,   954,   958,
00523      962,   965,   967,   971,   975,   978
00524 };
00525 #endif
00526 
00527 #if YYDEBUG || YYERROR_VERBOSE
00528 /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
00529    First, the terminals, then, starting at YYNTOKENS, nonterminals. */
00530 static const char *const yytname[] =
00531 {
00532   "$end", "error", "$undefined", "FUNC_CALL", "NAME", "REGEXP", "ERROR", 
00533   "YNUMBER", "YSTRING", "RELOP", "IO_OUT", "IO_IN", "ASSIGNOP", "ASSIGN", 
00534   "MATCHOP", "CONCAT_OP", "LEX_BEGIN", "LEX_END", "LEX_IF", "LEX_ELSE", 
00535   "LEX_RETURN", "LEX_DELETE", "LEX_SWITCH", "LEX_CASE", "LEX_DEFAULT", 
00536   "LEX_WHILE", "LEX_DO", "LEX_FOR", "LEX_BREAK", "LEX_CONTINUE", 
00537   "LEX_PRINT", "LEX_PRINTF", "LEX_NEXT", "LEX_EXIT", "LEX_FUNCTION", 
00538   "LEX_GETLINE", "LEX_NEXTFILE", "LEX_IN", "LEX_AND", "LEX_OR", 
00539   "INCREMENT", "DECREMENT", "LEX_BUILTIN", "LEX_LENGTH", "NEWLINE", 
00540   "SLASH_BEFORE_EQUAL", "'?'", "':'", "','", "'<'", "'>'", "'+'", "'-'", 
00541   "'*'", "'/'", "'%'", "'!'", "UNARY", "'^'", "'$'", "'('", "')'", "'['", 
00542   "']'", "'{'", "'}'", "';'", "$accept", "start", "program", "rule", 
00543   "pattern", "action", "func_name", "lex_builtin", "function_prologue", 
00544   "@1", "regexp", "@2", "a_slash", "statements", "statement_term", 
00545   "statement", "@3", "simple_stmt", "@4", "opt_simple_stmt", 
00546   "switch_body", "case_statements", "case_statement", "case_value", 
00547   "print", "print_expression_list", "output_redir", "@5", "if_statement", 
00548   "nls", "opt_nls", "input_redir", "opt_param_list", "param_list", 
00549   "opt_exp", "opt_expression_list", "expression_list", "exp", 
00550   "assign_operator", "relop_or_less", "a_relop", "common_exp", "simp_exp", 
00551   "non_post_simp_exp", "opt_variable", "variable", "l_brace", "r_brace", 
00552   "r_paren", "opt_semi", "semi", "colon", "comma", 0
00553 };
00554 #endif
00555 
00556 # ifdef YYPRINT
00557 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
00558    token YYLEX-NUM.  */
00559 static const unsigned short yytoknum[] =
00560 {
00561        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
00562      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
00563      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
00564      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
00565      295,   296,   297,   298,   299,   300,    63,    58,    44,    60,
00566       62,    43,    45,    42,    47,    37,    33,   301,    94,    36,
00567       40,    41,    91,    93,   123,   125,    59
00568 };
00569 # endif
00570 
00571 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
00572 static const unsigned char yyr1[] =
00573 {
00574        0,    67,    68,    69,    69,    69,    70,    70,    70,    71,
00575       71,    71,    71,    71,    72,    73,    73,    73,    74,    74,
00576       76,    75,    78,    77,    79,    79,    80,    80,    80,    81,
00577       81,    82,    82,    82,    82,    82,    82,    82,    82,    82,
00578       82,    82,    82,    82,    82,    83,    82,    82,    85,    84,
00579       84,    84,    84,    84,    86,    86,    87,    88,    88,    88,
00580       89,    89,    90,    90,    90,    90,    90,    91,    91,    92,
00581       92,    93,    94,    93,    95,    95,    96,    96,    97,    97,
00582       98,    98,    99,    99,   100,   100,   100,   100,   100,   101,
00583      101,   102,   102,   103,   103,   103,   103,   103,   103,   104,
00584      104,   104,   104,   104,   104,   104,   104,   105,   105,   105,
00585      106,   106,   107,   107,   108,   108,   108,   108,   108,   109,
00586      109,   109,   109,   109,   109,   109,   109,   109,   109,   109,
00587      110,   110,   110,   110,   110,   110,   110,   110,   110,   110,
00588      110,   110,   110,   111,   111,   112,   112,   112,   113,   114,
00589      115,   116,   116,   117,   118,   119
00590 };
00591 
00592 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
00593 static const unsigned char yyr2[] =
00594 {
00595        0,     2,     3,     0,     2,     2,     2,     2,     2,     0,
00596        1,     3,     1,     1,     5,     1,     1,     1,     1,     1,
00597        0,     7,     0,     3,     1,     1,     0,     2,     2,     1,
00598        2,     2,     3,     1,     9,     6,     8,     8,    12,    11,
00599        2,     2,     2,     2,     3,     0,     4,     2,     0,     4,
00600        5,     2,     4,     1,     0,     1,     1,     0,     2,     2,
00601        5,     4,     1,     2,     2,     1,     1,     1,     1,     1,
00602        5,     0,     0,     3,     6,     9,     1,     2,     0,     1,
00603        0,     2,     0,     1,     1,     3,     1,     2,     3,     0,
00604        1,     0,     1,     1,     3,     1,     2,     3,     3,     3,
00605        3,     3,     3,     3,     3,     5,     1,     1,     1,     2,
00606        1,     1,     1,     1,     1,     2,     5,     1,     2,     1,
00607        3,     3,     3,     3,     3,     3,     3,     4,     2,     2,
00608        2,     3,     4,     4,     1,     4,     1,     2,     2,     1,
00609        1,     2,     2,     0,     1,     1,     4,     2,     2,     2,
00610        1,     0,     1,     1,     1,     2
00611 };
00612 
00613 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
00614    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
00615    means the default is an error.  */
00616 static const unsigned char yydefact[] =
00617 {
00618       78,    76,     0,    79,     3,     1,    77,     0,     5,     0,
00619      145,   139,   140,    12,    13,    20,   143,     0,     0,     0,
00620      134,    25,     0,     0,    24,     0,     0,     0,     4,     0,
00621        0,   114,    22,     2,    10,   106,   117,   119,   136,     0,
00622        0,     0,    80,   144,   137,   138,     0,     0,     0,     0,
00623      142,   136,   141,   115,   130,   147,   136,    95,     0,    93,
00624       78,   153,     6,     7,    29,    26,    78,     8,     0,   110,
00625        0,     0,     0,     0,     0,     0,   111,   113,   112,     0,
00626      118,     0,     0,     0,     0,     0,     0,     0,   108,   107,
00627      128,   129,     0,     0,     0,     0,    93,     0,    16,    15,
00628       18,    19,     0,    17,     0,   126,     0,     0,     0,    96,
00629       78,   150,     0,     0,   131,   148,     0,    30,    23,   102,
00630      103,   100,   101,     0,    11,   104,   143,   124,   125,   121,
00631      122,   123,   120,   109,    99,   135,   146,     0,    81,   132,
00632      133,    97,   155,     0,    98,    94,    28,     0,    45,     0,
00633        0,     0,    78,     0,     0,     0,    67,    68,     0,    89,
00634        0,    78,    27,     0,    48,    33,    53,    26,   151,    78,
00635        0,   127,    86,    84,     0,     0,   116,     0,    89,    51,
00636        0,     0,     0,     0,    54,    40,    41,    42,     0,    90,
00637       43,   149,    47,     0,     0,    78,   152,    31,   105,    78,
00638       87,     0,     0,     0,     0,     0,     0,     0,     0,   145,
00639       55,     0,    44,     0,    71,    69,    32,    14,    21,    88,
00640       85,    78,    46,     0,    52,    78,    78,     0,     0,    78,
00641       93,    72,    49,     0,    50,     0,     0,     0,     0,     0,
00642        0,     0,    74,    57,    35,     0,    78,     0,    78,     0,
00643       73,    78,    78,     0,    78,     0,    78,    54,    70,     0,
00644        0,    59,     0,     0,    58,    36,    37,    54,     0,    75,
00645       34,    62,    65,     0,     0,    66,     0,   154,    78,     0,
00646       78,    64,    63,    78,    26,    78,     0,    26,     0,     0,
00647       39,     0,    38
00648 };
00649 
00650 /* YYDEFGOTO[NTERM-NUM]. */
00651 static const short yydefgoto[] =
00652 {
00653       -1,     2,     7,    28,    29,    62,   102,   103,    30,    41,
00654       31,    68,    32,   116,    63,   162,   178,   163,   193,   211,
00655      252,   253,   264,   276,   164,   214,   232,   241,   165,     3,
00656        4,   105,   174,   175,   188,    94,    95,   166,    93,    78,
00657       79,    35,    36,    37,    42,    38,   167,   168,   114,   195,
00658      169,   278,   113
00659 };
00660 
00661 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
00662    STATE-NUM.  */
00663 #define YYPACT_NINF -236
00664 static const short yypact[] =
00665 {
00666      -15,  -236,    31,    -3,  -236,  -236,  -236,   292,  -236,    -8,
00667       -2,  -236,  -236,  -236,  -236,  -236,    26,    26,    26,     4,
00668        6,  -236,   934,   934,  -236,   876,   262,   717,  -236,   -16,
00669        3,  -236,  -236,  -236,   769,   934,   480,  -236,   554,   656,
00670      717,    33,    49,  -236,  -236,  -236,   656,   656,   934,   905,
00671       41,    -1,    41,  -236,    41,  -236,  -236,  -236,   117,   695,
00672      -15,  -236,  -236,  -236,    -3,  -236,   -15,  -236,   101,  -236,
00673      905,   103,   905,   905,   905,   905,  -236,  -236,  -236,   905,
00674      480,    74,   934,   934,   934,   934,   934,   934,  -236,  -236,
00675     -236,  -236,   100,   905,    54,    17,   958,    32,  -236,  -236,
00676     -236,  -236,    56,  -236,   934,  -236,    54,    54,   695,   905,
00677      -15,  -236,    86,   739,  -236,  -236,   454,  -236,  -236,   133,
00678     -236,   184,   166,   823,   958,     7,    26,   136,   136,    41,
00679       41,    41,    41,  -236,   958,  -236,  -236,    43,   538,  -236,
00680     -236,   958,  -236,   121,  -236,   958,  -236,    68,  -236,     2,
00681       69,    70,   -15,    71,    61,    61,  -236,  -236,    61,   905,
00682       61,   -15,  -236,    61,  -236,  -236,   958,  -236,    73,   -15,
00683      905,  -236,  -236,  -236,    54,   123,  -236,   905,   905,    81,
00684      131,   905,   905,   580,   793,  -236,  -236,  -236,    61,   958,
00685     -236,  -236,  -236,   520,   454,   -15,  -236,  -236,   958,   -15,
00686     -236,    45,   695,    61,   717,    83,   695,   695,   130,   -11,
00687     -236,    73,  -236,   717,   147,  -236,  -236,  -236,  -236,  -236,
00688     -236,   -15,  -236,    34,  -236,   -15,   -15,   108,   169,   -15,
00689      508,  -236,  -236,   580,  -236,     3,   580,   905,    54,   634,
00690      717,   905,   155,  -236,  -236,   695,   -15,   502,   -15,   117,
00691      934,   -15,   -15,    19,   -15,   580,   -15,   847,  -236,   580,
00692      111,  -236,   201,   132,  -236,  -236,  -236,   847,    54,  -236,
00693     -236,  -236,  -236,   178,   179,  -236,   132,  -236,   -15,    54,
00694      -15,  -236,  -236,   -15,  -236,   -15,   580,  -236,   346,   580,
00695     -236,   400,  -236
00696 };
00697 
00698 /* YYPGOTO[NTERM-NUM].  */
00699 static const short yypgoto[] =
00700 {
00701     -236,  -236,  -236,  -236,  -236,   165,  -236,  -236,  -236,  -236,
00702      -24,  -236,  -236,  -150,   152,  -178,  -236,  -165,  -236,  -235,
00703     -236,  -236,  -236,  -236,  -236,  -236,  -236,  -236,  -236,   -22,
00704       -7,  -236,  -236,  -236,    21,   -32,   -17,    47,  -236,  -236,
00705     -236,   -41,    66,   175,    76,   -14,    -5,  -181,    52,  -236,
00706        9,   -71,  -130
00707 };
00708 
00709 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
00710    positive, shift that token.  If negative, reduce the rule which
00711    number is the opposite.  If zero, do what YYDEFACT says.
00712    If YYTABLE_NINF, syntax error.  */
00713 #define YYTABLE_NINF -93
00714 static const short yytable[] =
00715 {
00716       33,    53,    43,    44,    45,   208,   179,    64,    51,    51,
00717       58,    51,    56,   216,   106,   107,   -93,   194,   109,   210,
00718      261,    51,   268,    97,    65,    65,   228,   -92,     1,     1,
00719       10,     5,   279,   109,    51,   109,    98,    99,    66,    90,
00720       91,     6,   262,   263,   172,   201,   219,   173,    60,   220,
00721       61,    40,    39,   115,    34,   242,   -93,   -93,   244,   117,
00722       40,   -92,   180,   -56,    46,   110,    47,    60,    51,    51,
00723       51,    51,    51,    51,    59,   100,   101,   266,   -92,   270,
00724      110,   269,   110,   -92,   -56,    26,    96,    96,    50,    52,
00725       51,    54,   210,    96,    96,   136,   108,   234,   104,    87,
00726      240,    80,   210,   142,   -82,     1,   118,   120,   290,   126,
00727      112,   292,    43,   133,    54,   111,   137,   119,   109,   121,
00728      122,   123,   124,   143,   200,   176,   125,    61,   177,   181,
00729      182,   184,    64,    64,   288,   205,    64,   291,    64,    61,
00730      134,    64,    69,   204,   224,   183,   135,   -93,   127,   128,
00731      129,   130,   131,   132,   191,   227,   141,   231,   139,   140,
00732      145,   215,   197,    66,    66,   110,    64,    66,   237,    66,
00733      138,   110,    66,   238,   251,    69,   161,   196,   111,   277,
00734       70,    64,    76,    77,   -83,   281,   282,   223,   217,    84,
00735       85,    86,   218,    69,    87,    67,    58,    66,    70,   203,
00736      250,    55,   171,    71,    72,   283,   189,     0,   271,   272,
00737        0,     0,    66,     0,   233,    76,    77,   198,   235,   236,
00738      229,    71,   239,   249,   202,   189,   199,    51,   206,   207,
00739      243,     0,     0,    76,    77,     0,    51,     0,   275,   255,
00740       96,   257,     0,     0,   259,   260,    21,   265,   248,   267,
00741        0,    96,   273,   274,   221,    24,   256,     0,   225,   226,
00742      230,     0,     0,     0,     0,     9,    10,     0,     0,    11,
00743       12,   284,     0,   286,     0,     0,   287,     0,   289,     0,
00744        0,     0,     0,     0,   245,     0,   247,    96,     0,     0,
00745      246,     0,   -78,     8,     0,     9,    10,   254,     0,    11,
00746       12,   258,    17,    18,    19,    20,   185,   186,    13,    14,
00747      187,     0,   190,    22,    23,   192,    80,     0,    48,     0,
00748      280,    26,    49,     0,     0,     0,    15,    16,     0,     0,
00749        0,   285,    17,    18,    19,    20,     1,    21,     0,     0,
00750      212,     0,     0,    22,    23,     0,    24,   146,    25,     9,
00751       10,    26,    27,    11,    12,   222,    -9,     0,    -9,     0,
00752        0,     0,     0,     0,   147,     0,   148,   149,   150,   -61,
00753      -61,   151,   152,   153,   154,   155,   156,   157,   158,   159,
00754        0,    16,   160,     0,     0,     0,    17,    18,    19,    20,
00755      -61,    21,     0,     0,     0,     0,     0,    22,    23,     0,
00756       24,   146,    25,     9,    10,    26,    27,    11,    12,     0,
00757       60,   -61,    61,     0,     0,     0,     0,     0,   147,     0,
00758      148,   149,   150,   -60,   -60,   151,   152,   153,   154,   155,
00759      156,   157,   158,   159,     0,    16,   160,     0,     0,     0,
00760       17,    18,    19,    20,   -60,    21,     0,     0,     0,     0,
00761        0,    22,    23,     0,    24,   146,    25,     9,    10,    26,
00762       27,    11,    12,     0,    60,   -60,    61,     0,     0,     0,
00763        0,     0,   147,     0,   148,   149,   150,     0,     0,   151,
00764      152,   153,   154,   155,   156,   157,   158,   159,     0,    16,
00765      160,    81,     0,     0,    17,    18,    19,    20,     0,    21,
00766        0,     0,     0,     0,     0,    22,    23,     0,    24,     0,
00767       25,    69,     0,    26,    27,     0,    70,    69,    60,   161,
00768       61,    57,    70,     9,    10,     0,     0,    11,    12,     0,
00769      -91,    82,    83,    84,    85,    86,     0,     0,    87,    71,
00770       72,    73,     0,     0,     0,    71,    72,    73,    74,   -93,
00771        0,    76,    77,     0,    74,    16,   110,    76,    77,     0,
00772       17,    18,    19,    20,   -91,    21,    88,    89,    61,   111,
00773        0,    22,    23,     0,    24,     0,    25,     0,     0,    26,
00774      213,   -91,     0,     9,    10,     0,   -91,    11,    12,    82,
00775       83,    84,    85,    86,    90,    91,    87,     0,   147,    92,
00776      148,   149,   150,     0,     0,   151,   152,   153,   154,   155,
00777      156,   157,   158,   159,     0,    16,   160,     0,     0,     0,
00778       17,    18,    19,    20,     0,    21,     0,     0,     0,     0,
00779        0,    22,    23,     0,    24,     0,    25,     9,    10,    26,
00780       27,    11,    12,     0,    60,     0,    61,     0,     0,     0,
00781        0,     0,     0,     0,     0,     0,     0,    57,     0,     9,
00782       10,     0,     0,    11,    12,     0,     0,     0,     0,    16,
00783        0,     0,     0,     0,    17,    18,    19,    20,     0,    21,
00784        0,     0,     0,     0,     0,    22,    23,     0,    24,     0,
00785       25,    16,     0,    26,    27,     0,    17,    18,    19,    20,
00786       61,    21,     0,     0,    69,     0,     0,    22,    23,    70,
00787       24,     0,    25,     0,     0,    26,    27,   -91,    57,     0,
00788        9,    10,     0,     0,    11,    12,     0,     0,     0,     0,
00789        0,     0,    71,    72,    73,     0,     0,     0,     0,     0,
00790      144,    74,     9,    10,    76,    77,    11,    12,     0,     0,
00791        0,     0,    16,     0,     0,     0,   111,    17,    18,    19,
00792       20,     0,    21,     0,     0,     0,     0,     0,    22,    23,
00793        0,    24,     0,    25,    16,     0,    26,    27,    69,    17,
00794       18,    19,    20,    70,    21,     0,     0,     0,     0,     0,
00795       22,    23,     0,    24,     0,    25,     9,   209,    26,    27,
00796       11,    12,     0,     0,     0,     0,    71,    72,    73,     0,
00797        0,     0,     0,     0,   149,    74,     0,    75,    76,    77,
00798        0,     0,     0,   156,   157,     0,     0,     0,    16,     0,
00799        0,     0,    69,    17,    18,    19,    20,    70,    21,     0,
00800        0,     0,     0,     0,    22,    23,     0,    24,     0,    25,
00801        9,    10,    26,    27,    11,    12,     0,     0,     0,     0,
00802       71,    72,    73,     0,     0,     0,     0,     0,   149,    74,
00803      170,     0,    76,    77,     0,     0,     0,   156,   157,     9,
00804       10,     0,    16,    11,    12,     0,     0,    17,    18,    19,
00805       20,     0,    21,     0,     0,     0,     0,     0,    22,    23,
00806        0,    24,     0,    25,     0,     0,    26,    27,     9,    10,
00807        0,    16,    11,    12,     0,     0,    17,    18,    19,    20,
00808        0,    21,     0,     0,     0,     0,     0,    22,    23,     0,
00809       24,     0,    48,     0,     0,    26,    49,     9,    10,     0,
00810       16,    11,    12,     0,     0,    17,    18,    19,    20,     0,
00811       21,     0,     0,     0,     0,     0,    22,    23,     0,    24,
00812        0,    25,     0,     0,    26,    27,     0,    69,     0,    16,
00813        0,     0,    70,     0,    17,    18,    19,    20,     0,     0,
00814        0,     0,     0,     0,     0,    22,    23,     0,     0,     0,
00815       48,     0,     0,    26,    49,    71,    72,    73,     0,     0,
00816        0,     0,     0,     0,    74,     0,     0,    76,    77
00817 };
00818 
00819 static const short yycheck[] =
00820 {
00821        7,    25,    16,    17,    18,   183,     4,    29,    22,    23,
00822       27,    25,    26,   194,    46,    47,     9,   167,     1,   184,
00823        1,    35,   257,    40,    29,    30,    37,    10,    44,    44,
00824        4,     0,   267,     1,    48,     1,     3,     4,    29,    40,
00825       41,    44,    23,    24,     1,   175,     1,     4,    64,     4,
00826       66,    62,    60,    60,     7,   233,    49,    50,   236,    66,
00827       62,    44,    60,    44,    60,    48,    60,    64,    82,    83,
00828       84,    85,    86,    87,    27,    42,    43,   255,    61,   260,
00829       48,   259,    48,    66,    65,    59,    39,    40,    22,    23,
00830      104,    25,   257,    46,    47,    63,    49,    63,    49,    58,
00831      230,    35,   267,   110,    61,    44,     5,     4,   286,    35,
00832       58,   289,   126,    13,    48,    61,    60,    70,     1,    72,
00833       73,    74,    75,    37,     1,     4,    79,    66,    60,    60,
00834       60,    60,   154,   155,   284,     4,   158,   287,   160,    66,
00835       93,   163,     9,    62,    61,   152,    94,    14,    82,    83,
00836       84,    85,    86,    87,   161,    25,   109,    10,   106,   107,
00837      113,   193,   169,   154,   155,    48,   188,   158,    60,   160,
00838      104,    48,   163,     4,    19,     9,    65,   168,    61,    47,
00839       14,   203,    49,    50,    61,     7,     7,   204,   195,    53,
00840       54,    55,   199,     9,    58,    30,   213,   188,    14,   178,
00841      241,    26,   126,    37,    38,   276,   159,    -1,     7,     8,
00842       -1,    -1,   203,    -1,   221,    49,    50,   170,   225,   226,
00843      211,    37,   229,   240,   177,   178,   174,   241,   181,   182,
00844      235,    -1,    -1,    49,    50,    -1,   250,    -1,   262,   246,
00845      193,   248,    -1,    -1,   251,   252,    45,   254,   239,   256,
00846       -1,   204,    51,    52,   202,    54,   247,    -1,   206,   207,
00847      213,    -1,    -1,    -1,    -1,     3,     4,    -1,    -1,     7,
00848        8,   278,    -1,   280,    -1,    -1,   283,    -1,   285,    -1,
00849       -1,    -1,    -1,    -1,   237,    -1,   239,   240,    -1,    -1,
00850      238,    -1,     0,     1,    -1,     3,     4,   245,    -1,     7,
00851        8,   249,    40,    41,    42,    43,   154,   155,    16,    17,
00852      158,    -1,   160,    51,    52,   163,   250,    -1,    56,    -1,
00853      268,    59,    60,    -1,    -1,    -1,    34,    35,    -1,    -1,
00854       -1,   279,    40,    41,    42,    43,    44,    45,    -1,    -1,
00855      188,    -1,    -1,    51,    52,    -1,    54,     1,    56,     3,
00856        4,    59,    60,     7,     8,   203,    64,    -1,    66,    -1,
00857       -1,    -1,    -1,    -1,    18,    -1,    20,    21,    22,    23,
00858       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
00859       -1,    35,    36,    -1,    -1,    -1,    40,    41,    42,    43,
00860       44,    45,    -1,    -1,    -1,    -1,    -1,    51,    52,    -1,
00861       54,     1,    56,     3,     4,    59,    60,     7,     8,    -1,
00862       64,    65,    66,    -1,    -1,    -1,    -1,    -1,    18,    -1,
00863       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
00864       30,    31,    32,    33,    -1,    35,    36,    -1,    -1,    -1,
00865       40,    41,    42,    43,    44,    45,    -1,    -1,    -1,    -1,
00866       -1,    51,    52,    -1,    54,     1,    56,     3,     4,    59,
00867       60,     7,     8,    -1,    64,    65,    66,    -1,    -1,    -1,
00868       -1,    -1,    18,    -1,    20,    21,    22,    -1,    -1,    25,
00869       26,    27,    28,    29,    30,    31,    32,    33,    -1,    35,
00870       36,    11,    -1,    -1,    40,    41,    42,    43,    -1,    45,
00871       -1,    -1,    -1,    -1,    -1,    51,    52,    -1,    54,    -1,
00872       56,     9,    -1,    59,    60,    -1,    14,     9,    64,    65,
00873       66,     1,    14,     3,     4,    -1,    -1,     7,     8,    -1,
00874       10,    51,    52,    53,    54,    55,    -1,    -1,    58,    37,
00875       38,    39,    -1,    -1,    -1,    37,    38,    39,    46,    11,
00876       -1,    49,    50,    -1,    46,    35,    48,    49,    50,    -1,
00877       40,    41,    42,    43,    44,    45,    12,    13,    66,    61,
00878       -1,    51,    52,    -1,    54,    -1,    56,    -1,    -1,    59,
00879       60,    61,    -1,     3,     4,    -1,    66,     7,     8,    51,
00880       52,    53,    54,    55,    40,    41,    58,    -1,    18,    45,
00881       20,    21,    22,    -1,    -1,    25,    26,    27,    28,    29,
00882       30,    31,    32,    33,    -1,    35,    36,    -1,    -1,    -1,
00883       40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,    -1,
00884       -1,    51,    52,    -1,    54,    -1,    56,     3,     4,    59,
00885       60,     7,     8,    -1,    64,    -1,    66,    -1,    -1,    -1,
00886       -1,    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,
00887        4,    -1,    -1,     7,     8,    -1,    -1,    -1,    -1,    35,
00888       -1,    -1,    -1,    -1,    40,    41,    42,    43,    -1,    45,
00889       -1,    -1,    -1,    -1,    -1,    51,    52,    -1,    54,    -1,
00890       56,    35,    -1,    59,    60,    -1,    40,    41,    42,    43,
00891       66,    45,    -1,    -1,     9,    -1,    -1,    51,    52,    14,
00892       54,    -1,    56,    -1,    -1,    59,    60,    61,     1,    -1,
00893        3,     4,    -1,    -1,     7,     8,    -1,    -1,    -1,    -1,
00894       -1,    -1,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
00895        1,    46,     3,     4,    49,    50,     7,     8,    -1,    -1,
00896       -1,    -1,    35,    -1,    -1,    -1,    61,    40,    41,    42,
00897       43,    -1,    45,    -1,    -1,    -1,    -1,    -1,    51,    52,
00898       -1,    54,    -1,    56,    35,    -1,    59,    60,     9,    40,
00899       41,    42,    43,    14,    45,    -1,    -1,    -1,    -1,    -1,
00900       51,    52,    -1,    54,    -1,    56,     3,     4,    59,    60,
00901        7,     8,    -1,    -1,    -1,    -1,    37,    38,    39,    -1,
00902       -1,    -1,    -1,    -1,    21,    46,    -1,    48,    49,    50,
00903       -1,    -1,    -1,    30,    31,    -1,    -1,    -1,    35,    -1,
00904       -1,    -1,     9,    40,    41,    42,    43,    14,    45,    -1,
00905       -1,    -1,    -1,    -1,    51,    52,    -1,    54,    -1,    56,
00906        3,     4,    59,    60,     7,     8,    -1,    -1,    -1,    -1,
00907       37,    38,    39,    -1,    -1,    -1,    -1,    -1,    21,    46,
00908       47,    -1,    49,    50,    -1,    -1,    -1,    30,    31,     3,
00909        4,    -1,    35,     7,     8,    -1,    -1,    40,    41,    42,
00910       43,    -1,    45,    -1,    -1,    -1,    -1,    -1,    51,    52,
00911       -1,    54,    -1,    56,    -1,    -1,    59,    60,     3,     4,
00912       -1,    35,     7,     8,    -1,    -1,    40,    41,    42,    43,
00913       -1,    45,    -1,    -1,    -1,    -1,    -1,    51,    52,    -1,
00914       54,    -1,    56,    -1,    -1,    59,    60,     3,     4,    -1,
00915       35,     7,     8,    -1,    -1,    40,    41,    42,    43,    -1,
00916       45,    -1,    -1,    -1,    -1,    -1,    51,    52,    -1,    54,
00917       -1,    56,    -1,    -1,    59,    60,    -1,     9,    -1,    35,
00918       -1,    -1,    14,    -1,    40,    41,    42,    43,    -1,    -1,
00919       -1,    -1,    -1,    -1,    -1,    51,    52,    -1,    -1,    -1,
00920       56,    -1,    -1,    59,    60,    37,    38,    39,    -1,    -1,
00921       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50
00922 };
00923 
00924 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
00925    symbol of state STATE-NUM.  */
00926 static const unsigned char yystos[] =
00927 {
00928        0,    44,    68,    96,    97,     0,    44,    69,     1,     3,
00929        4,     7,     8,    16,    17,    34,    35,    40,    41,    42,
00930       43,    45,    51,    52,    54,    56,    59,    60,    70,    71,
00931       75,    77,    79,    97,   104,   108,   109,   110,   112,    60,
00932       62,    76,   111,   112,   112,   112,    60,    60,    56,    60,
00933      109,   112,   109,    77,   109,   110,   112,     1,   103,   104,
00934       64,    66,    72,    81,    96,   113,   117,    72,    78,     9,
00935       14,    37,    38,    39,    46,    48,    49,    50,   106,   107,
00936      109,    11,    51,    52,    53,    54,    55,    58,    12,    13,
00937       40,    41,    45,   105,   102,   103,   104,   103,     3,     4,
00938       42,    43,    73,    74,    49,    98,   102,   102,   104,     1,
00939       48,    61,   115,   119,   115,    97,    80,    97,     5,   104,
00940        4,   104,   104,   104,   104,   104,    35,   109,   109,   109,
00941      109,   109,   109,    13,   104,   115,    63,    60,   109,   115,
00942      115,   104,    97,    37,     1,   104,     1,    18,    20,    21,
00943       22,    25,    26,    27,    28,    29,    30,    31,    32,    33,
00944       36,    65,    82,    84,    91,    95,   104,   113,   114,   117,
00945       47,   111,     1,     4,    99,   100,     4,    60,    83,     4,
00946       60,    60,    60,    97,    60,    81,    81,    81,   101,   104,
00947       81,    97,    81,    85,    80,   116,   117,    97,   104,   115,
00948        1,   119,   104,   101,    62,     4,   104,   104,    82,     4,
00949       84,    86,    81,    60,    92,   102,   114,    97,    97,     1,
00950        4,   115,    81,   103,    61,   115,   115,    25,    37,   117,
00951      104,    10,    93,    97,    63,    97,    97,    60,     4,    97,
00952      119,    94,    82,   113,    82,   104,   115,   104,   117,   103,
00953      108,    19,    87,    88,   115,    97,   117,    97,   115,    97,
00954       97,     1,    23,    24,    89,    97,    82,    97,    86,    82,
00955      114,     7,     8,    51,    52,    77,    90,    47,   118,    86,
00956      115,     7,     7,   118,    97,   115,    97,    97,    80,    97,
00957       82,    80,    82
00958 };
00959 
00960 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
00961 # define YYSIZE_T __SIZE_TYPE__
00962 #endif
00963 #if ! defined (YYSIZE_T) && defined (size_t)
00964 # define YYSIZE_T size_t
00965 #endif
00966 #if ! defined (YYSIZE_T)
00967 # if defined (__STDC__) || defined (__cplusplus)
00968 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
00969 #  define YYSIZE_T size_t
00970 # endif
00971 #endif
00972 #if ! defined (YYSIZE_T)
00973 # define YYSIZE_T unsigned int
00974 #endif
00975 
00976 #define yyerrok         (yyerrstatus = 0)
00977 #define yyclearin       (yychar = YYEMPTY)
00978 #define YYEMPTY         (-2)
00979 #define YYEOF           0
00980 
00981 #define YYACCEPT        goto yyacceptlab
00982 #define YYABORT         goto yyabortlab
00983 #define YYERROR         goto yyerrlab1
00984 
00985 /* Like YYERROR except do call yyerror.  This remains here temporarily
00986    to ease the transition to the new meaning of YYERROR, for GCC.
00987    Once GCC version 2 has supplanted version 1, this can go.  */
00988 
00989 #define YYFAIL          goto yyerrlab
00990 
00991 #define YYRECOVERING()  (!!yyerrstatus)
00992 
00993 #define YYBACKUP(Token, Value)                                  \
00994 do                                                              \
00995   if (yychar == YYEMPTY && yylen == 1)                          \
00996     {                                                           \
00997       yychar = (Token);                                         \
00998       yylval = (Value);                                         \
00999       yytoken = YYTRANSLATE (yychar);                           \
01000       YYPOPSTACK;                                               \
01001       goto yybackup;                                            \
01002     }                                                           \
01003   else                                                          \
01004     {                                                           \
01005       yyerror ("syntax error: cannot back up");\
01006       YYERROR;                                                  \
01007     }                                                           \
01008 while (0)
01009 
01010 #define YYTERROR        1
01011 #define YYERRCODE       256
01012 
01013 /* YYLLOC_DEFAULT -- Compute the default location (before the actions
01014    are run).  */
01015 
01016 #ifndef YYLLOC_DEFAULT
01017 # define YYLLOC_DEFAULT(Current, Rhs, N)         \
01018   Current.first_line   = Rhs[1].first_line;      \
01019   Current.first_column = Rhs[1].first_column;    \
01020   Current.last_line    = Rhs[N].last_line;       \
01021   Current.last_column  = Rhs[N].last_column;
01022 #endif
01023 
01024 /* YYLEX -- calling `yylex' with the right arguments.  */
01025 
01026 #ifdef YYLEX_PARAM
01027 # define YYLEX yylex (YYLEX_PARAM)
01028 #else
01029 # define YYLEX yylex ()
01030 #endif
01031 
01032 /* Enable debugging if requested.  */
01033 #if YYDEBUG
01034 
01035 # ifndef YYFPRINTF
01036 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
01037 #  define YYFPRINTF fprintf
01038 # endif
01039 
01040 # define YYDPRINTF(Args)                        \
01041 do {                                            \
01042   if (yydebug)                                  \
01043     YYFPRINTF Args;                             \
01044 } while (0)
01045 
01046 # define YYDSYMPRINT(Args)                      \
01047 do {                                            \
01048   if (yydebug)                                  \
01049     yysymprint Args;                            \
01050 } while (0)
01051 
01052 # define YYDSYMPRINTF(Title, Token, Value, Location)            \
01053 do {                                                            \
01054   if (yydebug)                                                  \
01055     {                                                           \
01056       YYFPRINTF (stderr, "%s ", Title);                         \
01057       yysymprint (stderr,                                       \
01058                   Token, Value);        \
01059       YYFPRINTF (stderr, "\n");                                 \
01060     }                                                           \
01061 } while (0)
01062 
01063 /*------------------------------------------------------------------.
01064 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
01065 | TOP (cinluded).                                                   |
01066 `------------------------------------------------------------------*/
01067 
01068 #if defined (__STDC__) || defined (__cplusplus)
01069 static void
01070 yy_stack_print (short *bottom, short *top)
01071 #else
01072 static void
01073 yy_stack_print (bottom, top)
01074     short *bottom;
01075     short *top;
01076 #endif
01077 {
01078   YYFPRINTF (stderr, "Stack now");
01079   for (/* Nothing. */; bottom <= top; ++bottom)
01080     YYFPRINTF (stderr, " %d", *bottom);
01081   YYFPRINTF (stderr, "\n");
01082 }
01083 
01084 # define YY_STACK_PRINT(Bottom, Top)                            \
01085 do {                                                            \
01086   if (yydebug)                                                  \
01087     yy_stack_print ((Bottom), (Top));                           \
01088 } while (0)
01089 
01090 
01091 /*------------------------------------------------.
01092 | Report that the YYRULE is going to be reduced.  |
01093 `------------------------------------------------*/
01094 
01095 #if defined (__STDC__) || defined (__cplusplus)
01096 static void
01097 yy_reduce_print (int yyrule)
01098 #else
01099 static void
01100 yy_reduce_print (yyrule)
01101     int yyrule;
01102 #endif
01103 {
01104   int yyi;
01105   unsigned int yylineno = yyrline[yyrule];
01106   YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
01107              yyrule - 1, yylineno);
01108   /* Print the symbols being reduced, and their result.  */
01109   for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
01110     YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
01111   YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
01112 }
01113 
01114 # define YY_REDUCE_PRINT(Rule)          \
01115 do {                                    \
01116   if (yydebug)                          \
01117     yy_reduce_print (Rule);             \
01118 } while (0)
01119 
01120 /* Nonzero means print parse trace.  It is left uninitialized so that
01121    multiple parsers can coexist.  */
01122 int yydebug;
01123 #else /* !YYDEBUG */
01124 # define YYDPRINTF(Args)
01125 # define YYDSYMPRINT(Args)
01126 # define YYDSYMPRINTF(Title, Token, Value, Location)
01127