Mon Sep 20 2010 00:19:38

Asterisk developer's documentation


ael.tab.c

Go to the documentation of this file.
00001 /* A Bison parser, made by GNU Bison 2.3.  */
00002 
00003 /* Skeleton implementation for Bison's Yacc-like parsers in C
00004 
00005    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
00006    Free Software Foundation, Inc.
00007 
00008    This program is free software; you can redistribute it and/or modify
00009    it under the terms of the GNU General Public License as published by
00010    the Free Software Foundation; either version 2, or (at your option)
00011    any later version.
00012 
00013    This program is distributed in the hope that it will be useful,
00014    but WITHOUT ANY WARRANTY; without even the implied warranty of
00015    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016    GNU General Public License for more details.
00017 
00018    You should have received a copy of the GNU General Public License
00019    along with this program; if not, write to the Free Software
00020    Foundation, Inc., 51 Franklin Street, Fifth Floor,
00021    Boston, MA 02110-1301, USA.  */
00022 
00023 /* As a special exception, you may create a larger work that contains
00024    part or all of the Bison parser skeleton and distribute that work
00025    under terms of your choice, so long as that work isn't itself a
00026    parser generator using the skeleton or a modified version thereof
00027    as a parser skeleton.  Alternatively, if you modify or redistribute
00028    the parser skeleton itself, you may (at your option) remove this
00029    special exception, which will cause the skeleton and the resulting
00030    Bison output files to be licensed under the GNU General Public
00031    License without this special exception.
00032 
00033    This special exception was added by the Free Software Foundation in
00034    version 2.2 of Bison.  */
00035 
00036 /* C LALR(1) parser skeleton written by Richard Stallman, by
00037    simplifying the original so-called "semantic" parser.  */
00038 
00039 /* All symbols defined below should begin with yy or YY, to avoid
00040    infringing on user name space.  This should be done even for local
00041    variables, as they might otherwise be expanded by user macros.
00042    There are some unavoidable exceptions within include files to
00043    define necessary library symbols; they are noted "INFRINGES ON
00044    USER NAME SPACE" below.  */
00045 
00046 /* Identify Bison output.  */
00047 #define YYBISON 1
00048 
00049 /* Bison version.  */
00050 #define YYBISON_VERSION "2.3"
00051 
00052 /* Skeleton name.  */
00053 #define YYSKELETON_NAME "yacc.c"
00054 
00055 /* Pure parsers.  */
00056 #define YYPURE 1
00057 
00058 /* Using locations.  */
00059 #define YYLSP_NEEDED 1
00060 
00061 /* Substitute the variable and function names.  */
00062 #define yyparse ael_yyparse
00063 #define yylex   ael_yylex
00064 #define yyerror ael_yyerror
00065 #define yylval  ael_yylval
00066 #define yychar  ael_yychar
00067 #define yydebug ael_yydebug
00068 #define yynerrs ael_yynerrs
00069 #define yylloc ael_yylloc
00070 
00071 /* Tokens.  */
00072 #ifndef YYTOKENTYPE
00073 # define YYTOKENTYPE
00074    /* Put the tokens into the symbol table, so that GDB and other debuggers
00075       know about them.  */
00076    enum yytokentype {
00077      KW_CONTEXT = 258,
00078      LC = 259,
00079      RC = 260,
00080      LP = 261,
00081      RP = 262,
00082      SEMI = 263,
00083      EQ = 264,
00084      COMMA = 265,
00085      COLON = 266,
00086      AMPER = 267,
00087      BAR = 268,
00088      AT = 269,
00089      KW_MACRO = 270,
00090      KW_GLOBALS = 271,
00091      KW_IGNOREPAT = 272,
00092      KW_SWITCH = 273,
00093      KW_IF = 274,
00094      KW_IFTIME = 275,
00095      KW_ELSE = 276,
00096      KW_RANDOM = 277,
00097      KW_ABSTRACT = 278,
00098      KW_EXTEND = 279,
00099      EXTENMARK = 280,
00100      KW_GOTO = 281,
00101      KW_JUMP = 282,
00102      KW_RETURN = 283,
00103      KW_BREAK = 284,
00104      KW_CONTINUE = 285,
00105      KW_REGEXTEN = 286,
00106      KW_HINT = 287,
00107      KW_FOR = 288,
00108      KW_WHILE = 289,
00109      KW_CASE = 290,
00110      KW_PATTERN = 291,
00111      KW_DEFAULT = 292,
00112      KW_CATCH = 293,
00113      KW_SWITCHES = 294,
00114      KW_ESWITCHES = 295,
00115      KW_INCLUDES = 296,
00116      KW_LOCAL = 297,
00117      word = 298
00118    };
00119 #endif
00120 /* Tokens.  */
00121 #define KW_CONTEXT 258
00122 #define LC 259
00123 #define RC 260
00124 #define LP 261
00125 #define RP 262
00126 #define SEMI 263
00127 #define EQ 264
00128 #define COMMA 265
00129 #define COLON 266
00130 #define AMPER 267
00131 #define BAR 268
00132 #define AT 269
00133 #define KW_MACRO 270
00134 #define KW_GLOBALS 271
00135 #define KW_IGNOREPAT 272
00136 #define KW_SWITCH 273
00137 #define KW_IF 274
00138 #define KW_IFTIME 275
00139 #define KW_ELSE 276
00140 #define KW_RANDOM 277
00141 #define KW_ABSTRACT 278
00142 #define KW_EXTEND 279
00143 #define EXTENMARK 280
00144 #define KW_GOTO 281
00145 #define KW_JUMP 282
00146 #define KW_RETURN 283
00147 #define KW_BREAK 284
00148 #define KW_CONTINUE 285
00149 #define KW_REGEXTEN 286
00150 #define KW_HINT 287
00151 #define KW_FOR 288
00152 #define KW_WHILE 289
00153 #define KW_CASE 290
00154 #define KW_PATTERN 291
00155 #define KW_DEFAULT 292
00156 #define KW_CATCH 293
00157 #define KW_SWITCHES 294
00158 #define KW_ESWITCHES 295
00159 #define KW_INCLUDES 296
00160 #define KW_LOCAL 297
00161 #define word 298
00162 
00163 
00164 
00165 
00166 /* Copy the first part of user declarations.  */
00167 #line 1 "ael.y"
00168 
00169 /*
00170  * Asterisk -- An open source telephony toolkit.
00171  *
00172  * Copyright (C) 2006, Digium, Inc.
00173  *
00174  * Steve Murphy <murf@parsetree.com>
00175  *
00176  * See http://www.asterisk.org for more information about
00177  * the Asterisk project. Please do not directly contact
00178  * any of the maintainers of this project for assistance;
00179  * the project provides a web site, mailing lists and IRC
00180  * channels for your use.
00181  *
00182  * This program is free software, distributed under the terms of
00183  * the GNU General Public License Version 2. See the LICENSE file
00184  * at the top of the source tree.
00185  */
00186 /*! \file
00187  *
00188  * \brief Bison Grammar description of AEL2.
00189  *
00190  */
00191 
00192 #include "asterisk.h"
00193 
00194 ASTERISK_FILE_VERSION(__FILE__, "$Revision: 189533 $")
00195 
00196 #include <stdio.h>
00197 #include <stdlib.h>
00198 #include <string.h>
00199 
00200 #include "asterisk/logger.h"
00201 #include "asterisk/lock.h"
00202 #include "asterisk/hashtab.h"
00203 #include "asterisk/ael_structs.h"
00204 #include "asterisk/utils.h"
00205 
00206 extern struct ast_flags ast_compat;
00207 
00208 pval * linku1(pval *head, pval *tail);
00209 static void set_dads(pval *dad, pval *child_list);
00210 void reset_parencount(yyscan_t yyscanner);
00211 void reset_semicount(yyscan_t yyscanner);
00212 void reset_argcount(yyscan_t yyscanner );
00213  
00214 #define YYLEX_PARAM ((struct parse_io *)parseio)->scanner
00215 #define YYERROR_VERBOSE 1
00216 
00217 extern char *my_file;
00218 #ifdef AAL_ARGCHECK
00219 int ael_is_funcname(char *name);
00220 #endif
00221 static char *ael_token_subst(const char *mess);
00222 
00223 
00224 
00225 /* Enabling traces.  */
00226 #ifndef YYDEBUG
00227 # define YYDEBUG 0
00228 #endif
00229 
00230 /* Enabling verbose error messages.  */
00231 #ifdef YYERROR_VERBOSE
00232 # undef YYERROR_VERBOSE
00233 # define YYERROR_VERBOSE 1
00234 #else
00235 # define YYERROR_VERBOSE 1
00236 #endif
00237 
00238 /* Enabling the token table.  */
00239 #ifndef YYTOKEN_TABLE
00240 # define YYTOKEN_TABLE 0
00241 #endif
00242 
00243 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
00244 typedef union YYSTYPE
00245 #line 59 "ael.y"
00246 {
00247    int   intval;     /* integer value, typically flags */
00248    char  *str;    /* strings */
00249    struct pval *pval;   /* full objects */
00250 }
00251 /* Line 187 of yacc.c.  */
00252 #line 253 "ael.tab.c"
00253    YYSTYPE;
00254 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
00255 # define YYSTYPE_IS_DECLARED 1
00256 # define YYSTYPE_IS_TRIVIAL 1
00257 #endif
00258 
00259 #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
00260 typedef struct YYLTYPE
00261 {
00262   int first_line;
00263   int first_column;
00264   int last_line;
00265   int last_column;
00266 } YYLTYPE;
00267 # define yyltype YYLTYPE /* obsolescent; will be withdrawn */
00268 # define YYLTYPE_IS_DECLARED 1
00269 # define YYLTYPE_IS_TRIVIAL 1
00270 #endif
00271 
00272 
00273 /* Copy the second part of user declarations.  */
00274 #line 65 "ael.y"
00275 
00276    /* declaring these AFTER the union makes things a lot simpler! */
00277 void yyerror(YYLTYPE *locp, struct parse_io *parseio, char const *s);
00278 int ael_yylex (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , void * yyscanner);
00279 
00280 /* create a new object with start-end marker */
00281 pval *npval(pvaltype type, int first_line, int last_line,
00282    int first_column, int last_column);
00283 
00284 /* create a new object with start-end marker, simplified interface.
00285  * Must be declared here because YYLTYPE is not known before
00286  */
00287 static pval *npval2(pvaltype type, YYLTYPE *first, YYLTYPE *last);
00288 
00289 /* another frontend for npval, this time for a string */
00290 static pval *nword(char *string, YYLTYPE *pos);
00291 
00292 /* update end position of an object, return the object */
00293 static pval *update_last(pval *, YYLTYPE *);
00294 
00295 
00296 /* Line 216 of yacc.c.  */
00297 #line 298 "ael.tab.c"
00298 
00299 #ifdef short
00300 # undef short
00301 #endif
00302 
00303 #ifdef YYTYPE_UINT8
00304 typedef YYTYPE_UINT8 yytype_uint8;
00305 #else
00306 typedef unsigned char yytype_uint8;
00307 #endif
00308 
00309 #ifdef YYTYPE_INT8
00310 typedef YYTYPE_INT8 yytype_int8;
00311 #elif (defined __STDC__ || defined __C99__FUNC__ \
00312      || defined __cplusplus || defined _MSC_VER)
00313 typedef signed char yytype_int8;
00314 #else
00315 typedef short int yytype_int8;
00316 #endif
00317 
00318 #ifdef YYTYPE_UINT16
00319 typedef YYTYPE_UINT16 yytype_uint16;
00320 #else
00321 typedef unsigned short int yytype_uint16;
00322 #endif
00323 
00324 #ifdef YYTYPE_INT16
00325 typedef YYTYPE_INT16 yytype_int16;
00326 #else
00327 typedef short int yytype_int16;
00328 #endif
00329 
00330 #ifndef YYSIZE_T
00331 # ifdef __SIZE_TYPE__
00332 #  define YYSIZE_T __SIZE_TYPE__
00333 # elif defined size_t
00334 #  define YYSIZE_T size_t
00335 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
00336      || defined __cplusplus || defined _MSC_VER)
00337 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
00338 #  define YYSIZE_T size_t
00339 # else
00340 #  define YYSIZE_T unsigned int
00341 # endif
00342 #endif
00343 
00344 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
00345 
00346 #ifndef YY_
00347 # if YYENABLE_NLS
00348 #  if ENABLE_NLS
00349 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
00350 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
00351 #  endif
00352 # endif
00353 # ifndef YY_
00354 #  define YY_(msgid) msgid
00355 # endif
00356 #endif
00357 
00358 /* Suppress unused-variable warnings by "using" E.  */
00359 #if ! defined lint || defined __GNUC__
00360 # define YYUSE(e) ((void) (e))
00361 #else
00362 # define YYUSE(e) /* empty */
00363 #endif
00364 
00365 /* Identity function, used to suppress warnings about constant conditions.  */
00366 #ifndef lint
00367 # define YYID(n) (n)
00368 #else
00369 #if (defined __STDC__ || defined __C99__FUNC__ \
00370      || defined __cplusplus || defined _MSC_VER)
00371 static int
00372 YYID (int i)
00373 #else
00374 static int
00375 YYID (i)
00376     int i;
00377 #endif
00378 {
00379   return i;
00380 }
00381 #endif
00382 
00383 #if ! defined yyoverflow || YYERROR_VERBOSE
00384 
00385 /* The parser invokes alloca or malloc; define the necessary symbols.  */
00386 
00387 # ifdef YYSTACK_USE_ALLOCA
00388 #  if YYSTACK_USE_ALLOCA
00389 #   ifdef __GNUC__
00390 #    define YYSTACK_ALLOC __builtin_alloca
00391 #   elif defined __BUILTIN_VA_ARG_INCR
00392 #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
00393 #   elif defined _AIX
00394 #    define YYSTACK_ALLOC __alloca
00395 #   elif defined _MSC_VER
00396 #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
00397 #    define alloca _alloca
00398 #   else
00399 #    define YYSTACK_ALLOC alloca
00400 #    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
00401      || defined __cplusplus || defined _MSC_VER)
00402 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
00403 #     ifndef _STDLIB_H
00404 #      define _STDLIB_H 1
00405 #     endif
00406 #    endif
00407 #   endif
00408 #  endif
00409 # endif
00410 
00411 # ifdef YYSTACK_ALLOC
00412    /* Pacify GCC's `empty if-body' warning.  */
00413 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
00414 #  ifndef YYSTACK_ALLOC_MAXIMUM
00415     /* The OS might guarantee only one guard page at the bottom of the stack,
00416        and a page size can be as small as 4096 bytes.  So we cannot safely
00417        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
00418        to allow for a few compiler-allocated temporary stack slots.  */
00419 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
00420 #  endif
00421 # else
00422 #  define YYSTACK_ALLOC YYMALLOC
00423 #  define YYSTACK_FREE YYFREE
00424 #  ifndef YYSTACK_ALLOC_MAXIMUM
00425 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
00426 #  endif
00427 #  if (defined __cplusplus && ! defined _STDLIB_H \
00428        && ! ((defined YYMALLOC || defined malloc) \
00429         && (defined YYFREE || defined free)))
00430 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
00431 #   ifndef _STDLIB_H
00432 #    define _STDLIB_H 1
00433 #   endif
00434 #  endif
00435 #  ifndef YYMALLOC
00436 #   define YYMALLOC malloc
00437 #   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
00438      || defined __cplusplus || defined _MSC_VER)
00439 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
00440 #   endif
00441 #  endif
00442 #  ifndef YYFREE
00443 #   define YYFREE free
00444 #   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
00445      || defined __cplusplus || defined _MSC_VER)
00446 void free (void *); /* INFRINGES ON USER NAME SPACE */
00447 #   endif
00448 #  endif
00449 # endif
00450 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
00451 
00452 
00453 #if (! defined yyoverflow \
00454      && (! defined __cplusplus \
00455     || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
00456         && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
00457 
00458 /* A type that is properly aligned for any stack member.  */
00459 union yyalloc
00460 {
00461   yytype_int16 yyss;
00462   YYSTYPE yyvs;
00463     YYLTYPE yyls;
00464 };
00465 
00466 /* The size of the maximum gap between one aligned stack and the next.  */
00467 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
00468 
00469 /* The size of an array large to enough to hold all stacks, each with
00470    N elements.  */
00471 # define YYSTACK_BYTES(N) \
00472      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
00473       + 2 * YYSTACK_GAP_MAXIMUM)
00474 
00475 /* Copy COUNT objects from FROM to TO.  The source and destination do
00476    not overlap.  */
00477 # ifndef YYCOPY
00478 #  if defined __GNUC__ && 1 < __GNUC__
00479 #   define YYCOPY(To, From, Count) \
00480       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
00481 #  else
00482 #   define YYCOPY(To, From, Count)     \
00483       do             \
00484    {              \
00485      YYSIZE_T yyi;            \
00486      for (yyi = 0; yyi < (Count); yyi++)  \
00487        (To)[yyi] = (From)[yyi];     \
00488    }              \
00489       while (YYID (0))
00490 #  endif
00491 # endif
00492 
00493 /* Relocate STACK from its old location to the new one.  The
00494    local variables YYSIZE and YYSTACKSIZE give the old and new number of
00495    elements in the stack, and YYPTR gives the new location of the
00496    stack.  Advance YYPTR to a properly aligned location for the next
00497    stack.  */
00498 # define YYSTACK_RELOCATE(Stack)             \
00499     do                           \
00500       {                          \
00501    YYSIZE_T yynewbytes;                \
00502    YYCOPY (&yyptr->Stack, Stack, yysize);          \
00503    Stack = &yyptr->Stack;                 \
00504    yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
00505    yyptr += yynewbytes / sizeof (*yyptr);          \
00506       }                          \
00507     while (YYID (0))
00508 
00509 #endif
00510 
00511 /* YYFINAL -- State number of the termination state.  */
00512 #define YYFINAL  17
00513 /* YYLAST -- Last index in YYTABLE.  */
00514 #define YYLAST   371
00515 
00516 /* YYNTOKENS -- Number of terminals.  */
00517 #define YYNTOKENS  44
00518 /* YYNNTS -- Number of nonterminals.  */
00519 #define YYNNTS  56
00520 /* YYNRULES -- Number of rules.  */
00521 #define YYNRULES  143
00522 /* YYNRULES -- Number of states.  */
00523 #define YYNSTATES  283
00524 
00525 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
00526 #define YYUNDEFTOK  2
00527 #define YYMAXUTOK   298
00528 
00529 #define YYTRANSLATE(YYX)                  \
00530   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
00531 
00532 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
00533 static const yytype_uint8 yytranslate[] =
00534 {
00535        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00536        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00537        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00538        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00539        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00540        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00541        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00542        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00543        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00544        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00545        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00546        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00547        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00548        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00549        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00550        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00551        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00552        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00553        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00554        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00555        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00556        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00557        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00558        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00559        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00560        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
00561        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
00562       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
00563       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
00564       35,    36,    37,    38,    39,    40,    41,    42,    43
00565 };
00566 
00567 #if YYDEBUG
00568 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
00569    YYRHS.  */
00570 static const yytype_uint16 yyprhs[] =
00571 {
00572        0,     0,     3,     5,     7,    10,    13,    15,    17,    19,
00573       21,    23,    25,    32,    34,    35,    37,    40,    43,    52,
00574       57,    58,    61,    64,    65,    71,    72,    79,    80,    82,
00575       86,    89,    90,    93,    96,    98,   100,   102,   104,   106,
00576      108,   110,   113,   115,   120,   124,   130,   135,   143,   152,
00577      153,   156,   159,   165,   167,   175,   176,   181,   184,   187,
00578      192,   194,   197,   199,   202,   206,   210,   214,   216,   219,
00579      223,   225,   228,   232,   238,   242,   244,   246,   250,   254,
00580      257,   258,   259,   260,   273,   277,   279,   283,   286,   289,
00581      290,   296,   299,   302,   305,   309,   311,   314,   315,   317,
00582      321,   325,   331,   337,   343,   349,   350,   353,   356,   361,
00583      362,   368,   372,   373,   377,   381,   384,   386,   387,   389,
00584      390,   394,   395,   398,   403,   407,   412,   413,   416,   418,
00585      420,   426,   431,   436,   437,   441,   447,   450,   452,   456,
00586      459,   463,   466,   471
00587 };
00588 
00589 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
00590 static const yytype_int8 yyrhs[] =
00591 {
00592       45,     0,    -1,    46,    -1,    47,    -1,    46,    47,    -1,
00593       46,     1,    -1,    49,    -1,    51,    -1,    52,    -1,     8,
00594       -1,    43,    -1,    37,    -1,    50,     3,    48,     4,    59,
00595        5,    -1,    23,    -1,    -1,    24,    -1,    24,    23,    -1,
00596       23,    24,    -1,    15,    43,     6,    58,     7,     4,    92,
00597        5,    -1,    16,     4,    53,     5,    -1,    -1,    53,    54,
00598       -1,     1,    53,    -1,    -1,    43,     9,    55,    43,     8,
00599       -1,    -1,    42,    43,     9,    57,    43,     8,    -1,    -1,
00600       43,    -1,    58,    10,    43,    -1,    58,     1,    -1,    -1,
00601       59,    60,    -1,     1,    59,    -1,    62,    -1,    99,    -1,
00602       94,    -1,    95,    -1,    61,    -1,    54,    -1,    56,    -1,
00603       43,     1,    -1,     8,    -1,    17,    25,    43,     8,    -1,
00604       43,    25,    74,    -1,    43,    14,    43,    25,    74,    -1,
00605       31,    43,    25,    74,    -1,    32,     6,    70,     7,    43,
00606       25,    74,    -1,    31,    32,     6,    70,     7,    43,    25,
00607       74,    -1,    -1,    63,    74,    -1,     1,    63,    -1,    71,
00608       11,    71,    11,    71,    -1,    43,    -1,    64,    13,    71,
00609       13,    71,    13,    71,    -1,    -1,     6,    67,    69,     7,
00610       -1,    19,    66,    -1,    22,    66,    -1,    20,     6,    65,
00611        7,    -1,    43,    -1,    43,    43,    -1,    43,    -1,    70,
00612       43,    -1,    70,    11,    43,    -1,    70,    12,    43,    -1,
00613       70,    14,    43,    -1,    43,    -1,    43,    43,    -1,    43,
00614       43,    43,    -1,    43,    -1,    43,    43,    -1,    72,    11,
00615       43,    -1,    18,    66,     4,    90,     5,    -1,     4,    63,
00616        5,    -1,    54,    -1,    56,    -1,    26,    80,     8,    -1,
00617       27,    82,     8,    -1,    43,    11,    -1,    -1,    -1,    -1,
00618       33,     6,    75,    43,     8,    76,    43,     8,    77,    43,
00619        7,    74,    -1,    34,    66,    74,    -1,    73,    -1,    12,
00620       83,     8,    -1,    87,     8,    -1,    43,     8,    -1,    -1,
00621       87,     9,    78,    43,     8,    -1,    29,     8,    -1,    28,
00622        8,    -1,    30,     8,    -1,    68,    74,    79,    -1,     8,
00623       -1,    21,    74,    -1,    -1,    72,    -1,    72,    13,    72,
00624       -1,    72,    10,    72,    -1,    72,    13,    72,    13,    72,
00625       -1,    72,    10,    72,    10,    72,    -1,    37,    13,    72,
00626       13,    72,    -1,    37,    10,    72,    10,    72,    -1,    -1,
00627       10,    43,    -1,    72,    81,    -1,    72,    81,    14,    48,
00628       -1,    -1,    43,     6,    84,    89,     7,    -1,    43,     6,
00629        7,    -1,    -1,    43,     6,    86,    -1,    85,    89,     7,
00630       -1,    85,     7,    -1,    43,    -1,    -1,    69,    -1,    -1,
00631       89,    10,    88,    -1,    -1,    90,    91,    -1,    35,    43,
00632       11,    63,    -1,    37,    11,    63,    -1,    36,    43,    11,
00633       63,    -1,    -1,    92,    93,    -1,    74,    -1,    99,    -1,
00634       38,    43,     4,    63,     5,    -1,    39,     4,    96,     5,
00635       -1,    40,     4,    96,     5,    -1,    -1,    96,    43,     8,
00636       -1,    96,    43,    14,    43,     8,    -1,     1,    96,    -1,
00637       48,    -1,    48,    13,    65,    -1,    97,     8,    -1,    98,
00638       97,     8,    -1,    98,     1,    -1,    41,     4,    98,     5,
00639       -1,    41,     4,     5,    -1
00640 };
00641 
00642 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
00643 static const yytype_uint16 yyrline[] =
00644 {
00645        0,   191,   191,   194,   195,   196,   199,   200,   201,   202,
00646      205,   206,   209,   218,   219,   220,   221,   222,   225,   231,
00647      237,   238,   239,   242,   242,   248,   248,   255,   256,   257,
00648      258,   261,   262,   263,   266,   267,   268,   269,   270,   271,
00649      272,   273,   274,   277,   282,   286,   294,   299,   304,   313,
00650      314,   315,   321,   331,   335,   343,   343,   347,   350,   353,
00651      364,   365,   377,   378,   387,   396,   405,   416,   417,   427,
00652      440,   441,   450,   461,   470,   473,   474,   475,   478,   481,
00653      484,   485,   486,   484,   492,   496,   497,   498,   499,   502,
00654      502,   535,   536,   537,   538,   542,   545,   546,   549,   550,
00655      553,   556,   560,   564,   568,   574,   575,   579,   582,   588,
00656      588,   593,   601,   601,   612,   619,   622,   623,   626,   627,
00657      630,   633,   634,   637,   641,   645,   651,   652,   655,   656,
00658      657,   663,   668,   673,   674,   675,   686,   689,   690,   697,
00659      698,   699,   702,   705
00660 };
00661 #endif
00662 
00663 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
00664 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
00665    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
00666 static const char *const yytname[] =
00667 {
00668   "$end", "error", "$undefined", "KW_CONTEXT", "LC", "RC", "LP", "RP",
00669   "SEMI", "EQ", "COMMA", "COLON", "AMPER", "BAR", "AT", "KW_MACRO",
00670   "KW_GLOBALS", "KW_IGNOREPAT", "KW_SWITCH", "KW_IF", "KW_IFTIME",
00671   "KW_ELSE", "KW_RANDOM", "KW_ABSTRACT", "KW_EXTEND", "EXTENMARK",
00672   "KW_GOTO", "KW_JUMP", "KW_RETURN", "KW_BREAK", "KW_CONTINUE",
00673   "KW_REGEXTEN", "KW_HINT", "KW_FOR", "KW_WHILE", "KW_CASE", "KW_PATTERN",
00674   "KW_DEFAULT", "KW_CATCH", "KW_SWITCHES", "KW_ESWITCHES", "KW_INCLUDES",
00675   "KW_LOCAL", "word", "$accept", "file", "objects", "object",
00676   "context_name", "context", "opt_abstract", "macro", "globals",
00677   "global_statements", "assignment", "@1", "local_assignment", "@2",
00678   "arglist", "elements", "element", "ignorepat", "extension", "statements",
00679   "timerange", "timespec", "test_expr", "@3", "if_like_head", "word_list",
00680   "hint_word", "word3_list", "goto_word", "switch_statement", "statement",
00681   "@4", "@5", "@6", "@7", "opt_else", "target", "opt_pri", "jumptarget",
00682   "macro_call", "@8", "application_call_head", "@9", "application_call",
00683   "opt_word", "eval_arglist", "case_statements", "case_statement",
00684   "macro_statements", "macro_statement", "switches", "eswitches",
00685   "switchlist", "included_entry", "includeslist", "includes", 0
00686 };
00687 #endif
00688 
00689 # ifdef YYPRINT
00690 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
00691    token YYLEX-NUM.  */
00692 static const yytype_uint16 yytoknum[] =
00693 {
00694        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
00695      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
00696      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
00697      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
00698      295,   296,   297,   298
00699 };
00700 # endif
00701 
00702 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
00703 static const yytype_uint8 yyr1[] =
00704 {
00705        0,    44,    45,    46,    46,    46,    47,    47,    47,    47,
00706       48,    48,    49,    50,    50,    50,    50,    50,    51,    52,
00707       53,    53,    53,    55,    54,    57,    56,    58,    58,    58,
00708       58,    59,    59,    59,    60,    60,    60,    60,    60,    60,
00709       60,    60,    60,    61,    62,    62,    62,    62,    62,    63,
00710       63,    63,    64,    64,    65,    67,    66,    68,    68,    68,
00711       69,    69,    70,    70,    70,    70,    70,    71,    71,    71,
00712       72,    72,    72,    73,    74,    74,    74,    74,    74,    74,
00713       75,    76,    77,    74,    74,    74,    74,    74,    74,    78,
00714       74,    74,    74,    74,    74,    74,    79,    79,    80,    80,
00715       80,    80,    80,    80,    80,    81,    81,    82,    82,    84,
00716       83,    83,    86,    85,    87,    87,    88,    88,    89,    89,
00717       89,    90,    90,    91,    91,    91,    92,    92,    93,    93,
00718       93,    94,    95,    96,    96,    96,    96,    97,    97,    98,
00719       98,    98,    99,    99
00720 };
00721 
00722 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
00723 static const yytype_uint8 yyr2[] =
00724 {
00725        0,     2,     1,     1,     2,     2,     1,     1,     1,     1,
00726        1,     1,     6,     1,     0,     1,     2,     2,     8,     4,
00727        0,     2,     2,     0,     5,     0,     6,     0,     1,     3,
00728        2,     0,     2,     2,     1,     1,     1,     1,     1,     1,
00729        1,     2,     1,     4,     3,     5,     4,     7,     8,     0,
00730        2,     2,     5,     1,     7,     0,     4,     2,     2,     4,
00731        1,     2,     1,     2,     3,     3,     3,     1,     2,     3,
00732        1,     2,     3,     5,     3,     1,     1,     3,     3,     2,
00733        0,     0,     0,    12,     3,     1,     3,     2,     2,     0,
00734        5,     2,     2,     2,     3,     1,     2,     0,     1,     3,
00735        3,     5,     5,     5,     5,     0,     2,     2,     4,     0,
00736        5,     3,     0,     3,     3,     2,     1,     0,     1,     0,
00737        3,     0,     2,     4,     3,     4,     0,     2,     1,     1,
00738        5,     4,     4,     0,     3,     5,     2,     1,     3,     2,
00739        3,     2,     4,     3
00740 };
00741 
00742 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
00743    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
00744    means the default is an error.  */
00745 static const yytype_uint8 yydefact[] =
00746 {
00747       14,     9,     0,     0,    13,    15,     0,     0,     3,     6,
00748        0,     7,     8,     0,     0,    17,    16,     1,     5,     4,
00749        0,    27,     0,     0,    11,    10,     0,    28,     0,    22,
00750       19,     0,    21,     0,    30,     0,     0,    23,     0,     0,
00751      126,    29,     0,    33,    12,    42,     0,     0,     0,     0,
00752        0,     0,     0,     0,    39,    40,    32,    38,    34,    36,
00753       37,    35,     0,     0,     0,     0,     0,     0,     0,     0,
00754        0,     0,    41,     0,     0,     0,    18,    95,     0,     0,
00755        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
00756        0,     0,    75,    76,     0,    85,   128,   119,     0,   127,
00757      129,    24,     0,     0,     0,    62,     0,     0,     0,     0,
00758      143,   137,     0,     0,    25,     0,    44,     0,     0,     0,
00759        0,    55,     0,    57,     0,    58,     0,    70,    98,     0,
00760      105,     0,    92,    91,    93,    80,     0,     0,   112,    88,
00761       79,    97,   115,    60,   118,     0,    87,    89,    43,     0,
00762       46,     0,     0,     0,     0,    63,   136,   131,     0,   132,
00763        0,   139,   141,   142,     0,     0,     0,    51,    74,    50,
00764      109,    86,     0,   121,    53,     0,     0,     0,     0,     0,
00765       71,     0,     0,     0,    77,     0,   107,    78,     0,    84,
00766        0,   113,     0,    94,    61,   114,   117,     0,     0,     0,
00767       64,    65,    66,   134,     0,   138,   140,     0,    45,   111,
00768      119,     0,     0,    68,     0,    59,     0,     0,     0,   100,
00769       72,    99,   106,     0,     0,     0,    96,   116,   120,     0,
00770        0,     0,     0,    26,     0,    56,    73,     0,     0,     0,
00771      122,    69,    67,     0,     0,     0,     0,     0,     0,   108,
00772       81,   130,    90,     0,    47,   135,   110,     0,     0,     0,
00773        0,     0,   104,   103,   102,   101,     0,    48,     0,     0,
00774      124,     0,    52,     0,   123,   125,     0,    82,    54,     0,
00775        0,     0,    83
00776 };
00777 
00778 /* YYDEFGOTO[NTERM-NUM].  */
00779 static const yytype_int16 yydefgoto[] =
00780 {
00781       -1,     6,     7,     8,   111,     9,    10,    11,    12,    23,
00782       92,    42,    93,   165,    28,    39,    56,    57,    58,   118,
00783      175,   176,   122,   172,    94,   144,   106,   177,   128,    95,
00784      169,   188,   266,   279,   197,   193,   129,   186,   131,   120,
00785      210,    97,   191,    98,   228,   145,   212,   240,    62,    99,
00786       59,    60,   108,   112,   113,    61
00787 };
00788 
00789 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
00790    STATE-NUM.  */
00791 #define YYPACT_NINF -211
00792 static const yytype_int16 yypact[] =
00793 {
00794      166,  -211,   -32,    15,    12,    36,    40,   316,  -211,  -211,
00795       75,  -211,  -211,    82,    17,  -211,  -211,  -211,  -211,  -211,
00796      -28,    57,    17,     0,  -211,  -211,   127,  -211,     6,   109,
00797     -211,   152,  -211,   136,  -211,   169,   143,  -211,   136,   117,
00798     -211,  -211,   144,   272,  -211,  -211,   170,   -15,   191,   197,
00799      199,   201,   168,   137,  -211,  -211,  -211,  -211,  -211,  -211,
00800     -211,  -211,   180,   204,   172,   219,   202,   185,    25,    25,
00801       28,   217,  -211,   186,   266,    90,  -211,  -211,   190,   229,
00802      229,   230,   229,    21,   194,   240,   241,   242,   246,   229,
00803      210,   312,  -211,  -211,   266,  -211,  -211,     1,    61,  -211,
00804     -211,  -211,   248,   185,   266,  -211,    68,    25,    24,    29,
00805     -211,   247,   254,    20,  -211,   238,  -211,    19,   212,   258,
00806      263,  -211,   271,  -211,   233,  -211,   126,   234,   183,   275,
00807       95,   279,  -211,  -211,  -211,  -211,   266,   286,  -211,  -211,
00808     -211,   270,  -211,   236,  -211,   140,  -211,  -211,  -211,    78,
00809     -211,   255,   259,   262,   264,  -211,   267,  -211,    69,  -211,
00810      233,  -211,  -211,  -211,   289,   282,   266,   266,  -211,  -211,
00811      294,  -211,   283,  -211,    70,   293,   315,   317,   194,   194,
00812     -211,   194,   284,   194,  -211,   287,   319,  -211,   291,  -211,
00813       90,  -211,   266,  -211,  -211,  -211,   292,   295,   298,   304,
00814     -211,  -211,  -211,  -211,   299,  -211,  -211,   328,  -211,  -211,
00815      283,   330,   135,   300,   301,  -211,   301,   104,    73,   132,
00816     -211,   116,  -211,   -28,   337,   239,  -211,  -211,  -211,   338,
00817      322,   266,   340,  -211,   173,  -211,  -211,   306,   307,   341,
00818     -211,  -211,   308,   342,   343,   194,   194,   194,   194,  -211,
00819     -211,  -211,  -211,   266,  -211,  -211,  -211,   345,   346,    19,
00820      301,   301,   347,   347,   347,   347,   310,  -211,    19,    19,
00821      266,   348,  -211,   351,   266,   266,   301,  -211,  -211,   320,
00822      353,   266,  -211
00823 };
00824 
00825 /* YYPGOTO[NTERM-NUM].  */
00826 static const yytype_int16 yypgoto[] =
00827 {
00828     -211,  -211,  -211,   355,   -19,  -211,  -211,  -211,  -211,   344,
00829       64,  -211,   -29,  -211,  -211,   326,  -211,  -211,  -211,  -114,
00830     -211,   205,    46,  -211,  -211,   195,   265,  -210,   -82,  -211,
00831      -62,  -211,  -211,  -211,  -211,  -211,  -211,  -211,  -211,  -211,
00832     -211,  -211,  -211,  -211,  -211,   159,  -211,  -211,  -211,  -211,
00833     -211,  -211,   -34,   257,  -211,   309
00834 };
00835 
00836 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
00837    positive, shift that token.  If negative, reduce the rule which
00838    number is the opposite.  If zero, do what YYDEFACT says.
00839    If YYTABLE_NINF, syntax error.  */
00840 #define YYTABLE_NINF -134
00841 static const yytype_int16 yytable[] =
00842 {
00843       96,    26,   130,   167,   243,    30,   244,    34,   142,    24,
00844       55,    13,   116,    35,    55,    25,    36,    65,    22,    14,
00845      117,   162,   -20,   -49,   -49,   163,   107,   -49,    66,   157,
00846     -133,   -49,   141,   110,   159,   109,    15,   -49,   -49,   -49,
00847       17,   -49,   150,    31,   143,   -49,   -49,   -49,   -49,   -49,
00848      271,   272,   -49,   -49,   -49,   -49,   -49,    24,   126,    16,
00849      -20,   -49,   -49,    25,   127,    24,   278,   158,  -133,   146,
00850      147,    25,   158,   156,   189,   151,   225,   203,    20,   152,
00851      153,   -67,   154,   204,   182,   198,   246,    32,    21,   152,
00852      153,   117,   154,    32,   -49,   -49,   217,   218,   -49,   219,
00853       27,   221,   -49,    54,   208,   185,   182,    54,   -49,   -49,
00854      -49,   155,   -49,   213,   245,   182,   -49,   -49,   -49,   -49,
00855      -49,   155,    44,   -49,   -49,    45,   123,   182,   125,   248,
00856      226,    33,   -49,   -49,    46,   136,   178,    38,    72,   179,
00857      236,   -31,   247,   182,   -31,   270,    37,   195,    47,    48,
00858      196,    73,    31,   -31,   274,   275,    49,    50,    51,    52,
00859       53,    37,    74,   262,   263,   264,   265,   -31,   -31,   254,
00860      237,   238,   239,    40,     1,   -31,   -31,   -31,   -31,   -31,
00861      256,     2,     3,   196,    75,    76,    41,    63,    77,     4,
00862        5,   267,    78,   181,   182,    64,   183,    67,    79,    80,
00863       81,    68,    82,    69,   249,    70,    83,    84,    85,    86,
00864       87,    71,   101,    88,    89,   102,    75,   168,    90,   282,
00865       77,    51,    52,    91,    78,   103,   114,   104,   105,   115,
00866       79,    80,    81,   119,    82,   121,   124,   127,    83,    84,
00867       85,    86,    87,    75,   251,    88,    89,    77,   132,   133,
00868      134,    78,   135,   137,    52,    91,   148,    79,    80,    81,
00869      160,    82,   161,   166,   170,    83,    84,    85,    86,    87,
00870       75,   171,    88,    89,    77,   173,   174,   180,    78,   194,
00871       45,    52,    91,   184,    79,    80,    81,   187,    82,    46,
00872      190,   192,    83,    84,    85,    86,    87,   206,   199,    88,
00873       89,   209,   200,    47,    48,   201,   214,   202,    52,    91,
00874      158,    49,    50,    51,    52,    53,    -2,    18,   138,   -14,
00875      139,    37,   215,   140,     1,   207,   143,   220,   216,   231,
00876      222,     2,     3,   223,   224,   227,   233,   235,   229,     4,
00877        5,   230,   232,   241,   242,   250,   252,   253,   255,   257,
00878      258,   213,   259,   273,   261,   260,   268,   269,   182,   277,
00879      281,   276,    19,   280,    43,   205,    29,   211,   149,   234,
00880      164,   100
00881 };
00882 
00883 static const yytype_uint16 yycheck[] =
00884 {
00885       62,    20,    84,   117,   214,     5,   216,     1,     7,    37,
00886       39,    43,    74,     7,    43,    43,    10,    32,     1,     4,
00887        1,     1,     5,     4,     5,     5,     1,     8,    43,     5,
00888        5,    12,    94,     5,     5,    69,    24,    18,    19,    20,
00889        0,    22,   104,    43,    43,    26,    27,    28,    29,    30,
00890      260,   261,    33,    34,    35,    36,    37,    37,    37,    23,
00891       43,    42,    43,    43,    43,    37,   276,    43,    43,     8,
00892        9,    43,    43,   107,   136,     7,   190,     8,     3,    11,
00893       12,    11,    14,    14,    11,     7,    13,    23,     6,    11,
00894       12,     1,    14,    29,     4,     5,   178,   179,     8,   181,
00895       43,   183,    12,    39,   166,    10,    11,    43,    18,    19,
00896       20,    43,    22,    43,    10,    11,    26,    27,    28,    29,
00897       30,    43,     5,    33,    34,     8,    80,    11,    82,    13,
00898      192,     4,    42,    43,    17,    89,    10,     1,     1,    13,
00899        5,     5,    10,    11,     8,   259,     9,     7,    31,    32,
00900       10,    14,    43,    17,   268,   269,    39,    40,    41,    42,
00901       43,     9,    25,   245,   246,   247,   248,    31,    32,   231,
00902       35,    36,    37,     4,     8,    39,    40,    41,    42,    43,
00903        7,    15,    16,    10,     4,     5,    43,    43,     8,    23,
00904       24,   253,    12,    10,    11,    25,    13,     6,    18,    19,
00905       20,     4,    22,     4,   223,     4,    26,    27,    28,    29,
00906       30,    43,     8,    33,    34,    43,     4,     5,    38,   281,
00907        8,    41,    42,    43,    12,     6,     9,    25,    43,    43,
00908       18,    19,    20,    43,    22,     6,     6,    43,    26,    27,
00909       28,    29,    30,     4,     5,    33,    34,     8,     8,     8,
00910        8,    12,     6,    43,    42,    43,     8,    18,    19,    20,
00911       13,    22,     8,    25,     6,    26,    27,    28,    29,    30,
00912        4,     8,    33,    34,     8,     4,    43,    43,    12,    43,
00913        8,    42,    43,     8,    18,    19,    20,     8,    22,    17,
00914        4,    21,    26,    27,    28,    29,    30,     8,    43,    33,
00915       34,     7,    43,    31,    32,    43,    13,    43,    42,    43,
00916       43,    39,    40,    41,    42,    43,     0,     1,     6,     3,
00917        8,     9,     7,    11,     8,    43,    43,    43,    11,    25,
00918       43,    15,    16,    14,    43,    43,     8,     7,    43,    23,
00919       24,    43,    43,    43,    43,     8,     8,    25,     8,    43,
00920       43,    43,    11,    43,    11,    13,    11,    11,    11,     8,
00921        7,    13,     7,    43,    38,   160,    22,   172,   103,   210,
00922      113,    62
00923 };
00924 
00925 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
00926    symbol of state STATE-NUM.  */
00927 static const yytype_uint8 yystos[] =
00928 {
00929        0,     8,    15,    16,    23,    24,    45,    46,    47,    49,
00930       50,    51,    52,    43,     4,    24,    23,     0,     1,    47,
00931        3,     6,     1,    53,    37,    43,    48,    43,    58,    53,
00932        5,    43,    54,     4,     1,     7,    10,     9,     1,    59,
00933        4,    43,    55,    59,     5,     8,    17,    31,    32,    39,
00934       40,    41,    42,    43,    54,    56,    60,    61,    62,    94,
00935       95,    99,    92,    43,    25,    32,    43,     6,     4,     4,
00936        4,    43,     1,    14,    25,     4,     5,     8,    12,    18,
00937       19,    20,    22,    26,    27,    28,    29,    30,    33,    34,
00938       38,    43,    54,    56,    68,    73,    74,    85,    87,    93,
00939       99,     8,    43,     6,    25,    43,    70,     1,    96,    96,
00940        5,    48,    97,    98,     9,    43,    74,     1,    63,    43,
00941       83,     6,    66,    66,     6,    66,    37,    43,    72,    80,
00942       72,    82,     8,     8,     8,     6,    66,    43,     6,     8,
00943       11,    74,     7,    43,    69,    89,     8,     9,     8,    70,
00944       74,     7,    11,    12,    14,    43,    96,     5,    43,     5,
00945       13,     8,     1,     5,    97,    57,    25,    63,     5,    74,
00946        6,     8,    67,     4,    43,    64,    65,    71,    10,    13,
00947       43,    10,    11,    13,     8,    10,    81,     8,    75,    74,
00948        4,    86,    21,    79,    43,     7,    10,    78,     7,    43,
00949       43,    43,    43,     8,    14,    65,     8,    43,    74,     7,
00950       84,    69,    90,    43,    13,     7,    11,    72,    72,    72,
00951       43,    72,    43,    14,    43,    63,    74,    43,    88,    43,
00952       43,    25,    43,     8,    89,     7,     5,    35,    36,    37,
00953       91,    43,    43,    71,    71,    10,    13,    10,    13,    48,
00954        8,     5,     8,    25,    74,     8,     7,    43,    43,    11,
00955       13,    11,    72,    72,    72,    72,    76,    74,    11,    11,
00956       63,    71,    71,    43,    63,    63,    13,     8,    71,    77,
00957       43,     7,    74
00958 };
00959 
00960 #define yyerrok      (yyerrstatus = 0)
00961 #define yyclearin (yychar = YYEMPTY)
00962 #define YYEMPTY      (-2)
00963 #define YYEOF     0
00964 
00965 #define YYACCEPT  goto yyacceptlab
00966 #define YYABORT      goto yyabortlab
00967 #define YYERROR      goto yyerrorlab
00968 
00969 
00970 /* Like YYERROR except do call yyerror.  This remains here temporarily
00971    to ease the transition to the new meaning of YYERROR, for GCC.
00972    Once GCC version 2 has supplanted version 1, this can go.  */
00973 
00974 #define YYFAIL    goto yyerrlab
00975 
00976 #define YYRECOVERING()  (!!yyerrstatus)
00977 
00978 #define YYBACKUP(Token, Value)               \
00979 do                      \
00980   if (yychar == YYEMPTY && yylen == 1)          \
00981     {                      \
00982       yychar = (Token);                \
00983       yylval = (Value);                \
00984       yytoken = YYTRANSLATE (yychar);           \
00985       YYPOPSTACK (1);                  \
00986       goto yybackup;                \
00987     }                      \
00988   else                        \
00989     {                      \
00990       yyerror (&yylloc, parseio, YY_("syntax error: cannot back up")); \
00991       YYERROR;                   \
00992     }                      \
00993 while (YYID (0))
00994 
00995 
00996 #define YYTERROR  1
00997 #define YYERRCODE 256
00998 
00999 
01000 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
01001    If N is 0, then set CURRENT to the empty location which ends
01002    the previous symbol: RHS[0] (always defined).  */
01003 
01004 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
01005 #ifndef YYLLOC_DEFAULT
01006 # define YYLLOC_DEFAULT(Current, Rhs, N)           \
01007     do                           \
01008       if (YYID (N))                                                    \
01009    {                       \
01010      (Current).first_line   = YYRHSLOC (Rhs, 1).first_line; \
01011      (Current).first_column = YYRHSLOC (Rhs, 1).first_column;  \
01012      (Current).last_line    = YYRHSLOC (Rhs, N).last_line;     \
01013      (Current).last_column  = YYRHSLOC (Rhs, N).last_column;   \
01014    }                       \
01015       else                       \
01016    {                       \
01017      (Current).first_line   = (Current).last_line   =    \
01018        YYRHSLOC (Rhs, 0).last_line;          \
01019      (Current).first_column = (Current).last_column =    \
01020        YYRHSLOC (Rhs, 0).last_column;           \
01021    }                       \
01022     while (YYID (0))
01023 #endif
01024 
01025 
01026 /* YY_LOCATION_PRINT -- Print the location on the stream.
01027    This macro was not mandated originally: define only if we know
01028    we won't break user code: when these are the locations we know.  */
01029 
01030 #ifndef YY_LOCATION_PRINT
01031 # if YYLTYPE_IS_TRIVIAL
01032 #  define YY_LOCATION_PRINT(File, Loc)       \
01033      fprintf (File, "%d.%d-%d.%d",        \
01034          (Loc).first_line, (Loc).first_column,  \
01035          (Loc).last_line,  (Loc).last_column)
01036 # else
01037 #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
01038 # endif
01039 #endif
01040 
01041 
01042 /* YYLEX -- calling `yylex' with the right arguments.  */
01043 
01044 #ifdef YYLEX_PARAM
01045 # define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
01046 #else
01047 # define YYLEX yylex (&yylval, &yylloc)
01048 #endif
01049 
01050 /* Enable debugging if requested.  */
01051 #if YYDEBUG
01052 
01053 # ifndef YYFPRINTF
01054 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
01055 #  define YYFPRINTF fprintf
01056 # endif
01057 
01058 # define YYDPRINTF(Args)         \
01059 do {                 \
01060   if (yydebug)             \
01061     YYFPRINTF Args;           \
01062 } while (YYID (0))
01063 
01064 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)           \
01065 do {                            \
01066   if (yydebug)                        \
01067     {                           \
01068       YYFPRINTF (stderr, "%s ", Title);                 \
01069       yy_symbol_print (stderr,                    \
01070         Type, Value, Location, parseio); \
01071       YYFPRINTF (stderr, "\n");                   \
01072     }                           \
01073 } while (YYID (0))
01074 
01075 
01076 /*--------------------------------.
01077 | Print this symbol on YYOUTPUT.  |
01078 `--------------------------------*/
01079 
01080 /*ARGSUSED*/
01081 #if (defined __STDC__ || defined __C99__FUNC__ \
01082      || defined __cplusplus || defined _MSC_VER)
01083 static void
01084 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct parse_io *parseio)
01085 #else
01086 static void
01087 yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, parseio)
01088     FILE *yyoutput;
01089     int yytype;
01090     YYSTYPE const * const yyvaluep;
01091     YYLTYPE const * const yylocationp;
01092     struct parse_io *parseio;
01093 #endif
01094 {
01095   if (!yyvaluep)
01096     return;
01097   YYUSE (yylocationp);
01098   YYUSE (parseio);
01099 # ifdef YYPRINT
01100   if (yytype < YYNTOKENS)
01101     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
01102 # else
01103   YYUSE (yyoutput);
01104 # endif
01105   switch (yytype)
01106     {
01107       default:
01108    break;
01109     }
01110 }
01111 
01112 
01113 /*--------------------------------.
01114 | Print this symbol on YYOUTPUT.  |
01115 `--------------------------------*/
01116 
01117 #if (defined __STDC__ || defined __C99__FUNC__ \
01118      || defined __cplusplus || defined _MSC_VER)
01119 static void
01120 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct parse_io *parseio)
01121 #else
01122 static void
01123 yy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp, parseio)
01124     FILE *yyoutput;
01125     int yytype;
01126     YYSTYPE const * const yyvaluep;
01127     YYLTYPE const * const yylocationp;
01128     struct parse_io *parseio;
01129 #endif
01130 {
01131   if (yytype < YYNTOKENS)
01132     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
01133   else
01134     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
01135 
01136   YY_LOCATION_PRINT (yyoutput, *yylocationp);
01137   YYFPRINTF (yyoutput, ": ");
01138   yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, parseio);
01139   YYFPRINTF (yyoutput, ")");
01140 }
01141 
01142 /*------------------------------------------------------------------.
01143 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
01144 | TOP (included).                                                   |
01145 `------------------------------------------------------------------*/
01146 
01147 #if (defined __STDC__ || defined __C99__FUNC__ \
01148      || defined __cplusplus || defined _MSC_VER)
01149 static void
01150 yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
01151 #else
01152 static void
01153 yy_stack_print (bottom, top)
01154     yytype_int16 *bottom;
01155     yytype_int16 *top;
01156 #endif
01157 {
01158   YYFPRINTF (stderr, "Stack now");
01159   for (; bottom <= top; ++bottom)
01160     YYFPRINTF (stderr, " %d", *bottom);
01161   YYFPRINTF (stderr, "\n");
01162 }
01163 
01164 # define YY_STACK_PRINT(Bottom, Top)            \
01165 do {                       \
01166   if (yydebug)                   \
01167     yy_stack_print ((Bottom), (Top));           \
01168 } while (YYID (0))
01169 
01170 
01171 /*------------------------------------------------.
01172 | Report that the YYRULE is going to be reduced.  |
01173 `------------------------------------------------*/
01174 
01175 #if (defined __STDC__ || defined __C99__FUNC__ \
01176      || defined __cplusplus || defined _MSC_VER)
01177 static void
01178 yy_reduce_print (YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule, struct parse_io *parseio)
01179 #else
01180 static void
01181 yy_reduce_print (yyvsp, yylsp, yyrule, parseio)
01182     YYSTYPE *yyvsp;
01183     YYLTYPE *yylsp;
01184     int yyrule;
01185     struct parse_io *parseio;
01186 #endif
01187 {
01188   int yynrhs = yyr2[yyrule];
01189   int yyi;
01190   unsigned long int yylno = yyrline[yyrule];
01191   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
01192         yyrule - 1, yylno);
01193   /* The symbols being reduced.  */
01194   for (yyi = 0; yyi < yynrhs; yyi++)
01195     {
01196       fprintf (stderr, "   $%d = ", yyi + 1);
01197       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
01198              &(yyvsp[(yyi + 1) - (yynrhs)])
01199              , &(yylsp[(yyi + 1) - (yynrhs)])             , parseio);
01200       fprintf (stderr, "\n");
01201     }
01202 }
01203 
01204 # define YY_REDUCE_PRINT(Rule)      \
01205 do {              \
01206   if (yydebug)          \
01207     yy_reduce_print (yyvsp, yylsp, Rule, parseio); \
01208 } while (YYID (0))
01209 
01210 /* Nonzero means print parse trace.  It is left uninitialized so that
01211    multiple parsers can coexist.  */
01212 int yydebug;
01213 #else /* !YYDEBUG */
01214 # define YYDPRINTF(Args)
01215 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
01216 # define YY_STACK_PRINT(Bottom, Top)
01217 # define YY_REDUCE_PRINT(Rule)
01218 #endif /* !YYDEBUG */
01219 
01220 
01221 /* YYINITDEPTH -- initial size of the parser's stacks.  */
01222 #ifndef  YYINITDEPTH
01223 # define YYINITDEPTH 200
01224 #endif
01225 
01226 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
01227    if the built-in stack extension method is used).
01228 
01229    Do not make this value too large; the results are undefined if
01230    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
01231    evaluated with infinite-precision integer arithmetic.  */
01232 
01233 #ifndef YYMAXDEPTH
01234 # define YYMAXDEPTH 10000
01235 #endif
01236 
01237 
01238 
01239 #if YYERROR_VERBOSE
01240 
01241 # ifndef yystrlen
01242 #  if defined __GLIBC__ && defined _STRING_H
01243 #   define yystrlen strlen
01244 #  else
01245 /* Return the length of YYSTR.  */
01246 #if (defined __STDC__ || defined __C99__FUNC__ \
01247      || defined __cplusplus || defined _MSC_VER)
01248 static YYSIZE_T
01249 yystrlen (const char *yystr)
01250 #else
01251 static YYSIZE_T
01252 yystrlen (yystr)
01253     const char *yystr;
01254 #endif
01255 {
01256   YYSIZE_T yylen;
01257   for (yylen = 0; yystr[yylen]; yylen++)
01258     continue;
01259   return yylen;
01260 }
01261 #  endif
01262 # endif
01263 
01264 # ifndef yystpcpy
01265 #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
01266 #   define yystpcpy stpcpy
01267 #  else
01268 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
01269    YYDEST.  */
01270 #if (defined __STDC__ || defined __C99__FUNC__ \
01271      || defined __cplusplus || defined _MSC_VER)
01272 static char *
01273 yystpcpy (char *yydest, const char *yysrc)
01274 #else
01275 static char *
01276 yystpcpy (yydest, yysrc)
01277     char *yydest;
01278     const char *yysrc;
01279 #endif
01280 {
01281   char *yyd = yydest;
01282   const char *yys = yysrc;
01283 
01284   while ((*yyd++ = *yys++) != '\0')
01285     continue;
01286 
01287   return yyd - 1;
01288 }
01289 #  endif
01290 # endif
01291 
01292 # ifndef yytnamerr
01293 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
01294    quotes and backslashes, so that it's suitable for yyerror.  The
01295    heuristic is that double-quoting is unnecessary unless the string
01296    contains an apostrophe, a comma, or backslash (other than
01297    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
01298    null, do not copy; instead, return the length of what the result
01299    would have been.  */
01300 static YYSIZE_T
01301 yytnamerr (char *yyres, const char *yystr)
01302 {
01303   if (*yystr == '"')
01304     {
01305       YYSIZE_T yyn = 0;
01306       char const *yyp = yystr;
01307 
01308       for (;;)
01309    switch (*++yyp)
01310      {
01311      case '\'':
01312      case ',':
01313        goto do_not_strip_quotes;
01314 
01315      case '\\':
01316        if (*++yyp != '\\')
01317          goto do_not_strip_quotes;
01318        /* Fall through.  */
01319      default:
01320        if (yyres)
01321          yyres[yyn] = *yyp;
01322        yyn++;
01323        break;
01324 
01325      case '"':
01326        if (yyres)
01327          yyres[yyn] = '\0';
01328        return yyn;
01329      }
01330     do_not_strip_quotes: ;
01331     }
01332 
01333   if (! yyres)
01334     return yystrlen (yystr);
01335 
01336   return yystpcpy (yyres, yystr) - yyres;
01337 }
01338 # endif
01339 
01340 /* Copy into YYRESULT an error message about the unexpected token
01341    YYCHAR while in state YYSTATE.  Return the number of bytes copied,
01342    including the terminating null byte.  If YYRESULT is null, do not
01343    copy anything; just return the number of bytes that would be
01344    copied.  As a special case, return 0 if an ordinary "syntax error"
01345    message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
01346    size calculation.  */
01347 static YYSIZE_T
01348 yysyntax_error (char *yyresult, int yystate, int yychar)
01349 {
01350   int yyn = yypact[yystate];
01351 
01352   if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
01353     return 0;
01354   else
01355     {
01356       int yytype = YYTRANSLATE (yychar);
01357       YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
01358       YYSIZE_T yysize = yysize0;
01359       YYSIZE_T yysize1;
01360       int yysize_overflow = 0;
01361       enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
01362       char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
01363       int yyx;
01364 
01365 # if 0
01366       /* This is so xgettext sees the translatable formats that are
01367     constructed on the fly.  */
01368       YY_("syntax error, unexpected %s");
01369       YY_("syntax error, unexpected %s, expecting %s");
01370       YY_("syntax error, unexpected %s, expecting %s or %s");
01371       YY_("syntax error, unexpected %s, expecting %s or %s or %s");
01372       YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
01373 # endif
01374       char *yyfmt;
01375       char const *yyf;
01376       static char const yyunexpected[] = "syntax error, unexpected %s";
01377       static char const yyexpecting[] = ", expecting %s";
01378       static char const yyor[] = " or %s";
01379       char yyformat[sizeof yyunexpected
01380           + sizeof yyexpecting - 1
01381           + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
01382              * (sizeof yyor - 1))];
01383       char const *yyprefix = yyexpecting;
01384 
01385       /* Start YYX at -YYN if negative to avoid negative indexes in
01386     YYCHECK.  */
01387       int yyxbegin = yyn < 0 ? -yyn : 0;
01388 
01389       /* Stay within bounds of both yycheck and yytname.  */
01390       int yychecklim = YYLAST - yyn + 1;
01391       int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
01392       int yycount = 1;
01393 
01394       yyarg[0] = yytname[yytype];
01395       yyfmt = yystpcpy (yyformat, yyunexpected);
01396 
01397       for (yyx = yyxbegin; yyx < yyxend; ++yyx)
01398    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
01399      {
01400        if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
01401          {
01402       yycount = 1;
01403       yysize = yysize0;
01404       yyformat[sizeof yyunexpected - 1] = '\0';
01405       break;
01406          }
01407        yyarg[yycount++] = yytname[yyx];
01408        yysize1 = yysize + yytnamerr (0, yytname[yyx]);
01409        yysize_overflow |= (yysize1 < yysize);
01410        yysize = yysize1;
01411        yyfmt = yystpcpy (yyfmt, yyprefix);
01412        yyprefix = yyor;
01413      }
01414 
01415       yyf = YY_(yyformat);
01416       yysize1 = yysize + yystrlen (yyf);
01417       yysize_overflow |= (yysize1 < yysize);
01418       yysize = yysize1;
01419 
01420       if (yysize_overflow)
01421    return YYSIZE_MAXIMUM;
01422 
01423       if (yyresult)
01424    {
01425      /* Avoid sprintf, as that infringes on the user's name space.
01426         Don't have undefined behavior even if the translation
01427         produced a string with the wrong number of "%s"s.  */
01428      char *yyp = yyresult;
01429      int yyi = 0;
01430      while ((*yyp = *yyf) != '\0')
01431        {
01432          if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
01433       {
01434         yyp += yytnamerr (yyp, yyarg[yyi++]);
01435         yyf += 2;
01436       }
01437          else
01438       {
01439         yyp++;
01440         yyf++;
01441       }
01442        }
01443    }
01444       return yysize;
01445     }
01446 }
01447 #endif /* YYERROR_VERBOSE */
01448 
01449 
01450 /*-----------------------------------------------.
01451 | Release the memory associated to this symbol.  |
01452 `-----------------------------------------------*/
01453 
01454 /*ARGSUSED*/
01455 #if (defined __STDC__ || defined __C99__FUNC__ \
01456      || defined __cplusplus || defined _MSC_VER)
01457 static void
01458 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, struct parse_io *parseio)
01459 #else
01460 static void
01461 yydestruct (yymsg, yytype, yyvaluep, yylocationp, parseio)
01462     const char *yymsg;
01463     int yytype;
01464     YYSTYPE *yyvaluep;
01465     YYLTYPE *yylocationp;
01466     struct parse_io *parseio;
01467 #endif
01468 {
01469   YYUSE (yyvaluep);
01470   YYUSE (yylocationp);
01471   YYUSE (parseio);
01472 
01473   if (!yymsg)
01474     yymsg = "Deleting";
01475   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
01476 
01477   switch (yytype)
01478     {
01479       case 43: /* "word" */
01480 #line 183 "ael.y"
01481    { free((yyvaluep->str));};
01482 #line 1483 "ael.tab.c"
01483    break;
01484       case 46: /* "objects" */
01485 #line 170 "ael.y"
01486    {
01487       destroy_pval((yyvaluep->pval));
01488       prev_word=0;
01489    };
01490 #line 1491 "ael.tab.c"
01491    break;
01492       case 47: /* "object" */
01493 #line 170 "ael.y"
01494    {
01495       destroy_pval((yyvaluep->pval));
01496       prev_word=0;
01497    };
01498 #line 1499 "ael.tab.c"
01499    break;
01500       case 48: /* "context_name" */
01501 #line 183 "ael.y"
01502    { free((yyvaluep->str));};
01503 #line 1504 "ael.tab.c"
01504    break;
01505       case 49: /* "context" */
01506 #line 170 "ael.y"
01507    {
01508       destroy_pval((yyvaluep->pval));
01509       prev_word=0;
01510    };
01511 #line 1512 "ael.tab.c"
01512    break;
01513       case 51: /* "macro" */
01514 #line 170 "ael.y"
01515    {
01516       destroy_pval((yyvaluep->pval));
01517       prev_word=0;
01518    };
01519 #line 1520 "ael.tab.c"
01520    break;
01521       case 52: /* "globals" */
01522 #line 170 "ael.y"
01523    {
01524       destroy_pval((yyvaluep->pval));
01525       prev_word=0;
01526    };
01527 #line 1528 "ael.tab.c"
01528    break;
01529       case 53: /* "global_statements" */
01530 #line 170 "ael.y"
01531    {
01532       destroy_pval((yyvaluep->pval));
01533       prev_word=0;
01534    };
01535 #line 1536 "ael.tab.c"
01536    break;
01537       case 54: /* "assignment" */
01538 #line 170 "ael.y"
01539    {
01540       destroy_pval((yyvaluep->pval));
01541       prev_word=0;
01542    };
01543 #line 1544 "ael.tab.c"
01544    break;
01545       case 56: /* "local_assignment" */
01546 #line 170 "ael.y"
01547    {
01548       destroy_pval((yyvaluep->pval));
01549       prev_word=0;
01550    };
01551 #line 1552 "ael.tab.c"
01552    break;
01553       case 58: /* "arglist" */
01554 #line 170 "ael.y"
01555    {
01556       destroy_pval((yyvaluep->pval));
01557       prev_word=0;
01558    };
01559 #line 1560 "ael.tab.c"
01560    break;
01561       case 59: /* "elements" */
01562 #line 170 "ael.y"
01563    {
01564       destroy_pval((yyvaluep->pval));
01565       prev_word=0;
01566    };
01567 #line 1568 "ael.tab.c"
01568    break;
01569       case 60: /* "element" */
01570 #line 170 "ael.y"
01571    {
01572       destroy_pval((yyvaluep->pval));
01573       prev_word=0;
01574    };
01575 #line 1576 "ael.tab.c"
01576    break;
01577       case 61: /* "ignorepat" */
01578 #line 170 "ael.y"
01579    {
01580       destroy_pval((yyvaluep->pval));
01581       prev_word=0;
01582    };
01583 #line 1584 "ael.tab.c"
01584    break;
01585       case 62: /* "extension" */
01586 #line 170 "ael.y"
01587    {
01588       destroy_pval((yyvaluep->pval));
01589       prev_word=0;
01590    };
01591 #line 1592 "ael.tab.c"
01592    break;
01593       case 63: /* "statements" */
01594 #line 170 "ael.y"
01595    {
01596       destroy_pval((yyvaluep->pval));
01597       prev_word=0;
01598    };
01599 #line 1600 "ael.tab.c"
01600    break;
01601       case 64: /* "timerange" */
01602 #line 183 "ael.y"
01603    { free((yyvaluep->str));};
01604 #line 1605 "ael.tab.c"
01605    break;
01606       case 65: /* "timespec" */
01607 #line 170 "ael.y"
01608    {
01609       destroy_pval((yyvaluep->pval));
01610       prev_word=0;
01611    };
01612 #line 1613 "ael.tab.c"
01613    break;
01614       case 66: /* "test_expr" */
01615 #line 183 "ael.y"
01616    { free((yyvaluep->str));};
01617 #line 1618 "ael.tab.c"
01618    break;
01619       case 68: /* "if_like_head" */
01620 #line 170 "ael.y"
01621    {
01622       destroy_pval((yyvaluep->pval));
01623       prev_word=0;
01624    };
01625 #line 1626 "ael.tab.c"
01626    break;
01627       case 69: /* "word_list" */
01628 #line 183 "ael.y"
01629    { free((yyvaluep->str));};
01630 #line 1631 "ael.tab.c"
01631    break;
01632       case 71: /* "word3_list" */
01633 #line 183 "ael.y"
01634    { free((yyvaluep->str));};
01635 #line 1636 "ael.tab.c"
01636    break;
01637       case 72: /* "goto_word" */
01638 #line 183 "ael.y"
01639    { free((yyvaluep->str));};
01640 #line 1641 "ael.tab.c"
01641    break;
01642       case 73: /* "switch_statement" */
01643 #line 170 "ael.y"
01644    {
01645       destroy_pval((yyvaluep->pval));
01646       prev_word=0;
01647    };
01648 #line 1649 "ael.tab.c"
01649    break;
01650       case 74: /* "statement" */
01651 #line 170 "ael.y"
01652    {
01653       destroy_pval((yyvaluep->pval));
01654       prev_word=0;
01655    };
01656 #line 1657 "ael.tab.c"
01657    break;
01658       case 79: /* "opt_else" */
01659 #line 170 "ael.y"
01660    {
01661       destroy_pval((yyvaluep->pval));
01662       prev_word=0;
01663    };
01664 #line 1665 "ael.tab.c"
01665    break;
01666       case 80: /* "target" */
01667 #line 170 "ael.y"
01668    {
01669       destroy_pval((yyvaluep->pval));
01670       prev_word=0;
01671    };
01672 #line 1673 "ael.tab.c"
01673    break;
01674       case 81: /* "opt_pri" */
01675 #line 183 "ael.y"
01676    { free((yyvaluep->str));};
01677 #line 1678 "ael.tab.c"
01678    break;
01679       case 82: /* "jumptarget" */
01680 #line 170 "ael.y"
01681    {
01682       destroy_pval((yyvaluep->pval));
01683       prev_word=0;
01684    };
01685 #line 1686 "ael.tab.c"
01686    break;
01687       case 83: /* "macro_call" */
01688 #line 170 "ael.y"
01689    {
01690       destroy_pval((yyvaluep->pval));
01691       prev_word=0;
01692    };
01693 #line 1694 "ael.tab.c"
01694    break;
01695       case 85: /* "application_call_head" */
01696 #line 170 "ael.y"
01697    {
01698       destroy_pval((yyvaluep->pval));
01699       prev_word=0;
01700    };
01701 #line 1702 "ael.tab.c"
01702    break;
01703       case 87: /* "application_call" */
01704 #line 170 "ael.y"
01705    {
01706       destroy_pval((yyvaluep->pval));
01707       prev_word=0;
01708    };
01709 #line 1710 "ael.tab.c"
01710    break;
01711       case 88: /* "opt_word" */
01712 #line 183 "ael.y"
01713    { free((yyvaluep->str));};
01714 #line 1715 "ael.tab.c"
01715    break;
01716       case 89: /* "eval_arglist" */
01717 #line 170 "ael.y"
01718    {
01719       destroy_pval((yyvaluep->pval));
01720       prev_word=0;
01721    };
01722 #line 1723 "ael.tab.c"
01723    break;
01724       case 90: /* "case_statements" */
01725 #line 170 "ael.y"
01726    {
01727       destroy_pval((yyvaluep->pval));
01728       prev_word=0;
01729    };
01730 #line 1731 "ael.tab.c"
01731    break;
01732       case 91: /* "case_statement" */
01733 #line 170 "ael.y"
01734    {
01735       destroy_pval((yyvaluep->pval));
01736       prev_word=0;
01737    };
01738 #line 1739 "ael.tab.c"
01739    break;
01740       case 92: /* "macro_statements" */
01741 #line 170 "ael.y"
01742    {
01743       destroy_pval((yyvaluep->pval));
01744       prev_word=0;
01745    };
01746 #line 1747 "ael.tab.c"
01747    break;
01748       case 93: /* "macro_statement" */
01749 #line 170 "ael.y"
01750    {
01751       destroy_pval((yyvaluep->pval));
01752       prev_word=0;
01753    };
01754 #line 1755 "ael.tab.c"
01755    break;
01756       case 94: /* "switches" */
01757 #line 170 "ael.y"
01758    {
01759       destroy_pval((yyvaluep->pval));
01760       prev_word=0;
01761    };
01762 #line 1763 "ael.tab.c"
01763    break;
01764       case 95: /* "eswitches" */
01765 #line 170 "ael.y"
01766    {
01767       destroy_pval((yyvaluep->pval));
01768       prev_word=0;
01769    };
01770 #line 1771 "ael.tab.c"
01771    break;
01772       case 96: /* "switchlist" */
01773 #line 170 "ael.y"
01774    {
01775       destroy_pval((yyvaluep->pval));
01776       prev_word=0;
01777    };
01778 #line 1779 "ael.tab.c"
01779    break;
01780       case 97: /* "included_entry" */
01781 #line 170 "ael.y"
01782    {
01783       destroy_pval((yyvaluep->pval));
01784       prev_word=0;
01785    };
01786 #line 1787 "ael.tab.c"
01787    break;
01788       case 98: /* "includeslist" */
01789 #line 170 "ael.y"
01790    {
01791       destroy_pval((yyvaluep->pval));
01792       prev_word=0;
01793    };
01794 #line 1795 "ael.tab.c"
01795    break;
01796       case 99: /* "includes" */
01797 #line 170 "ael.y"
01798    {
01799       destroy_pval((yyvaluep->pval));
01800       prev_word=0;
01801    };
01802 #line 1803 "ael.tab.c"
01803    break;
01804 
01805       default:
01806    break;
01807     }
01808 }
01809 
01810 
01811 /* Prevent warnings from -Wmissing-prototypes.  */
01812 
01813 #ifdef YYPARSE_PARAM
01814 #if defined __STDC__ || defined __cplusplus
01815 int yyparse (void *YYPARSE_PARAM);
01816 #else
01817 int yyparse ();
01818 #endif
01819 #else /* ! YYPARSE_PARAM */
01820 #if defined __STDC__ || defined __cplusplus
01821 int yyparse (struct parse_io *parseio);
01822 #else
01823 int yyparse ();
01824 #endif
01825 #endif /* ! YYPARSE_PARAM */
01826 
01827 
01828 
01829 
01830 
01831 
01832 /*----------.
01833 | yyparse.  |
01834 `----------*/
01835 
01836 #ifdef YYPARSE_PARAM
01837 #if (defined __STDC__ || defined __C99__FUNC__ \
01838      || defined __cplusplus || defined _MSC_VER)
01839 int
01840 yyparse (void *YYPARSE_PARAM)
01841 #else
01842 int
01843 yyparse (YYPARSE_PARAM)
01844     void *YYPARSE_PARAM;
01845 #endif
01846 #else /* ! YYPARSE_PARAM */
01847 #if (defined __STDC__ || defined __C99__FUNC__ \
01848      || defined __cplusplus || defined _MSC_VER)
01849 int
01850 yyparse (struct parse_io *parseio)
01851 #else
01852 int
01853 yyparse (parseio)
01854     struct parse_io *parseio;
01855 #endif
01856 #endif
01857 {
01858   /* The look-ahead symbol.  */
01859 int yychar;
01860 
01861 /* The semantic value of the look-ahead symbol.  */
01862 YYSTYPE yylval;
01863 
01864 /* Number of syntax errors so far.  */
01865 int yynerrs;
01866 /* Location data for the look-ahead symbol.  */
01867 YYLTYPE yylloc;
01868 
01869   int yystate;
01870   int yyn;
01871   int yyresult;
01872   /* Number of tokens to shift before error messages enabled.  */
01873   int yyerrstatus;
01874   /* Look-ahead token as an internal (translated) token number.  */
01875   int yytoken = 0;
01876 #if YYERROR_VERBOSE
01877   /* Buffer for error messages, and its allocated size.  */
01878   char yymsgbuf[128];
01879   char *yymsg = yymsgbuf;
01880   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
01881 #endif
01882 
01883   /* Three stacks and their tools:
01884      `yyss': related to states,
01885      `yyvs': related to semantic values,
01886      `yyls': related to locations.
01887 
01888      Refer to the stacks thru separate pointers, to allow yyoverflow
01889      to reallocate them elsewhere.  */
01890 
01891   /* The state stack.  */
01892   yytype_int16 yyssa[YYINITDEPTH];
01893   yytype_int16 *yyss = yyssa;
01894   yytype_int16 *yyssp;
01895 
01896   /* The semantic value stack.  */
01897   YYSTYPE yyvsa[YYINITDEPTH];
01898   YYSTYPE *yyvs = yyvsa;
01899   YYSTYPE *yyvsp;
01900 
01901   /* The location stack.  */
01902   YYLTYPE yylsa[YYINITDEPTH];
01903   YYLTYPE *yyls = yylsa;
01904   YYLTYPE *yylsp;
01905   /* The locations where the error started and ended.  */
01906   YYLTYPE yyerror_range[2];
01907 
01908 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N), yylsp -= (N))
01909 
01910   YYSIZE_T yystacksize = YYINITDEPTH;
01911 
01912   /* The variables used to return semantic value and location from the
01913      action routines.  */
01914   YYSTYPE yyval;
01915   YYLTYPE yyloc;
01916 
01917   /* The number of symbols on the RHS of the reduced rule.
01918      Keep to zero when no symbol should be popped.  */
01919   int yylen = 0;
01920 
01921   YYDPRINTF ((stderr, "Starting parse\n"));
01922 
01923   yystate = 0;
01924   yyerrstatus = 0;
01925   yynerrs = 0;
01926   yychar = YYEMPTY;     /* Cause a token to be read.  */
01927 
01928   /* Initialize stack pointers.
01929      Waste one element of value and location stack
01930      so that they stay on the same level as the state stack.
01931      The wasted elements are never initialized.  */
01932 
01933   yyssp = yyss;
01934   yyvsp = yyvs;
01935   yylsp = yyls;
01936 #if YYLTYPE_IS_TRIVIAL
01937   /* Initialize the default location before parsing starts.  */
01938   yylloc.first_line   = yylloc.last_line   = 1;
01939   yylloc.first_column = yylloc.last_column = 0;
01940 #endif
01941 
01942   goto yysetstate;
01943 
01944 /*------------------------------------------------------------.
01945 | yynewstate -- Push a new state, which is found in yystate.  |
01946 `------------------------------------------------------------*/
01947  yynewstate:
01948   /* In all cases, when you get here, the value and location stacks
01949      have just been pushed.  So pushing a state here evens the stacks.  */
01950   yyssp++;
01951 
01952  yysetstate:
01953   *yyssp = yystate;
01954 
01955   if (yyss + yystacksize - 1 <= yyssp)
01956     {
01957       /* Get the current used size of the three stacks, in elements.  */
01958       YYSIZE_T yysize = yyssp - yyss + 1;
01959 
01960 #ifdef yyoverflow
01961       {
01962    /* Give user a chance to reallocate the stack.  Use copies of
01963       these so that the &'s don't force the real ones into
01964       memory.  */
01965    YYSTYPE *yyvs1 = yyvs;
01966    yytype_int16 *yyss1 = yyss;
01967    YYLTYPE *yyls1 = yyls;
01968 
01969    /* Each stack pointer address is followed by the size of the
01970       data in use in that stack, in bytes.  This used to be a
01971       conditional around just the two extra args, but that might
01972       be undefined if yyoverflow is a macro.  */
01973    yyoverflow (YY_("memory exhausted"),
01974           &yyss1, yysize * sizeof (*yyssp),
01975           &yyvs1, yysize * sizeof (*yyvsp),
01976           &yyls1, yysize * sizeof (*yylsp),
01977           &yystacksize);
01978    yyls = yyls1;
01979    yyss = yyss1;
01980    yyvs = yyvs1;
01981       }
01982 #else /* no yyoverflow */
01983 # ifndef YYSTACK_RELOCATE
01984       goto yyexhaustedlab;
01985 # else
01986       /* Extend the stack our own way.  */
01987       if (YYMAXDEPTH <= yystacksize)
01988    goto yyexhaustedlab;
01989       yystacksize *= 2;
01990       if (YYMAXDEPTH < yystacksize)
01991    yystacksize = YYMAXDEPTH;
01992 
01993       {
01994    yytype_int16 *yyss1 = yyss;
01995    union yyalloc *yyptr =
01996      (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
01997    if (! yyptr)
01998      goto yyexhaustedlab;
01999    YYSTACK_RELOCATE (yyss);
02000    YYSTACK_RELOCATE (yyvs);
02001    YYSTACK_RELOCATE (yyls);
02002 #  undef YYSTACK_RELOCATE
02003    if (yyss1 != yyssa)
02004      YYSTACK_FREE (yyss1);
02005       }
02006 # endif
02007 #endif /* no yyoverflow */
02008 
02009       yyssp = yyss + yysize - 1;
02010       yyvsp = yyvs + yysize - 1;
02011       yylsp = yyls + yysize - 1;
02012 
02013       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
02014         (unsigned long int) yystacksize));
02015 
02016       if (yyss + yystacksize - 1 <= yyssp)
02017    YYABORT;
02018     }
02019 
02020   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
02021 
02022   goto yybackup;
02023 
02024 /*-----------.
02025 | yybackup.  |
02026 `-----------*/
02027 yybackup:
02028 
02029   /* Do appropriate processing given the current state.  Read a
02030      look-ahead token if we need one and don't already have one.  */
02031 
02032   /* First try to decide what to do without reference to look-ahead token.  */
02033   yyn = yypact[yystate];
02034   if (yyn == YYPACT_NINF)
02035     goto yydefault;
02036 
02037   /* Not known => get a look-ahead token if don't already have one.  */
02038 
02039   /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
02040   if (yychar == YYEMPTY)
02041     {
02042       YYDPRINTF ((stderr, "Reading a token: "));
02043       yychar = YYLEX;
02044     }
02045 
02046   if (yychar <= YYEOF)
02047     {
02048       yychar = yytoken = YYEOF;
02049       YYDPRINTF ((stderr, "Now at end of input.\n"));
02050     }
02051   else
02052     {
02053       yytoken = YYTRANSLATE (yychar);
02054       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
02055     }
02056 
02057   /* If the proper action on seeing token YYTOKEN is to reduce or to
02058      detect an error, take that action.  */
02059   yyn += yytoken;
02060   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
02061     goto yydefault;
02062   yyn = yytable[yyn];
02063   if (yyn <= 0)
02064     {
02065       if (yyn == 0 || yyn == YYTABLE_NINF)
02066    goto yyerrlab;
02067       yyn = -yyn;
02068       goto yyreduce;
02069     }
02070 
02071   if (yyn == YYFINAL)
02072     YYACCEPT;
02073 
02074   /* Count tokens shifted since error; after three, turn off error
02075      status.  */
02076   if (yyerrstatus)
02077     yyerrstatus--;
02078 
02079   /* Shift the look-ahead token.  */
02080   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
02081 
02082   /* Discard the shifted token unless it is eof.  */
02083   if (yychar != YYEOF)
02084     yychar = YYEMPTY;
02085 
02086   yystate = yyn;
02087   *++yyvsp = yylval;
02088   *++yylsp = yylloc;
02089   goto yynewstate;
02090 
02091 
02092 /*-----------------------------------------------------------.
02093 | yydefault -- do the default action for the current state.  |
02094 `-----------------------------------------------------------*/
02095 yydefault:
02096   yyn = yydefact[yystate];
02097   if (yyn == 0)
02098     goto yyerrlab;
02099   goto yyreduce;
02100 
02101 
02102 /*-----------------------------.
02103 | yyreduce -- Do a reduction.  |
02104 `-----------------------------*/
02105 yyreduce:
02106   /* yyn is the number of a rule to reduce with.  */
02107   yylen = yyr2[yyn];
02108 
02109   /* If YYLEN is nonzero, implement the default value of the action:
02110      `$$ = $1'.
02111 
02112      Otherwise, the following line sets YYVAL to garbage.
02113      This behavior is undocumented and Bison
02114      users should not rely upon it.  Assigning to YYVAL
02115      unconditionally makes the parser a bit smaller, and it avoids a
02116      GCC warning that YYVAL may be used uninitialized.  */
02117   yyval = yyvsp[1-yylen];
02118 
02119   /* Default location.  */
02120   YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
02121   YY_REDUCE_PRINT (yyn);
02122   switch (yyn)
02123     {
02124         case 2:
02125 #line 191 "ael.y"
02126     { (yyval.pval) = parseio->pval = (yyvsp[(1) - (1)].pval); ;}
02127     break;
02128 
02129   case 3:
02130 #line 194 "ael.y"
02131     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
02132     break;
02133 
02134   case 4:
02135 #line 195 "ael.y"
02136     { (yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
02137     break;
02138 
02139   case 5:
02140 #line 196 "ael.y"
02141     {(yyval.pval)=(yyvsp[(1) - (2)].pval);;}
02142     break;
02143 
02144   case 6:
02145 #line 199 "ael.y"
02146     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
02147     break;
02148 
02149   case 7:
02150 #line 200 "ael.y"
02151     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
02152     break;
02153 
02154   case 8:
02155 #line 201 "ael.y"
02156     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
02157     break;
02158 
02159   case 9:
02160 #line 202 "ael.y"
02161     {(yyval.pval)=0;/* allow older docs to be read */;}
02162     break;
02163 
02164   case 10:
02165 #line 205 "ael.y"
02166     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
02167     break;
02168 
02169   case 11:
02170 #line 206 "ael.y"
02171     { (yyval.str) = strdup("default"); ;}
02172     break;
02173 
02174   case 12:
02175 #line 209 "ael.y"
02176     {
02177       (yyval.pval) = npval2(PV_CONTEXT, &(yylsp[(1) - (6)]), &(yylsp[(6) - (6)]));
02178       (yyval.pval)->u1.str = (yyvsp[(3) - (6)].str);
02179       (yyval.pval)->u2.statements = (yyvsp[(5) - (6)].pval);
02180       set_dads((yyval.pval),(yyvsp[(5) - (6)].pval));
02181       (yyval.pval)->u3.abstract = (yyvsp[(1) - (6)].intval);;}
02182     break;
02183 
02184   case 13:
02185 #line 218 "ael.y"
02186     { (yyval.intval) = 1; ;}
02187     break;
02188 
02189   case 14:
02190 #line 219 "ael.y"
02191     { (yyval.intval) = 0; ;}
02192     break;
02193 
02194   case 15:
02195 #line 220 "ael.y"
02196     { (yyval.intval) = 2; ;}
02197     break;
02198 
02199   case 16:
02200 #line 221 "ael.y"
02201     { (yyval.intval)=3; ;}
02202     break;
02203 
02204   case 17:
02205 #line 222 "ael.y"
02206     { (yyval.intval)=3; ;}
02207     break;
02208 
02209   case 18:
02210 #line 225 "ael.y"
02211     {
02212       (yyval.pval) = npval2(PV_MACRO, &(yylsp[(1) - (8)]), &(yylsp[(8) - (8)]));
02213       (yyval.pval)->u1.str = (yyvsp[(2) - (8)].str); (yyval.pval)->u2.arglist = (yyvsp[(4) - (8)].pval); (yyval.pval)->u3.macro_statements = (yyvsp[(7) - (8)].pval);
02214         set_dads((yyval.pval),(yyvsp[(7) - (8)].pval));;}
02215     break;
02216 
02217   case 19:
02218 #line 231 "ael.y"
02219     {
02220       (yyval.pval) = npval2(PV_GLOBALS, &(yylsp[(1) - (4)]), &(yylsp[(4) - (4)]));
02221       (yyval.pval)->u1.statements = (yyvsp[(3) - (4)].pval);
02222         set_dads((yyval.pval),(yyvsp[(3) - (4)].pval));;}
02223     break;
02224 
02225   case 20:
02226 #line 237 "ael.y"
02227     { (yyval.pval) = NULL; ;}
02228     break;
02229 
02230   case 21:
02231 #line 238 "ael.y"
02232     {(yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
02233     break;
02234 
02235   case 22:
02236 #line 239 "ael.y"
02237     {(yyval.pval)=(yyvsp[(2) - (2)].pval);;}
02238     break;
02239 
02240   case 23:
02241 #line 242 "ael.y"
02242     { reset_semicount(parseio->scanner); ;}
02243     break;
02244 
02245   case 24:
02246 #line 242 "ael.y"
02247     {
02248       (yyval.pval) = npval2(PV_VARDEC, &(yylsp[(1) - (5)]), &(yylsp[(5) - (5)]));
02249       (yyval.pval)->u1.str = (yyvsp[(1) - (5)].str);
02250       (yyval.pval)->u2.val = (yyvsp[(4) - (5)].str); ;}
02251     break;
02252 
02253   case 25:
02254 #line 248 "ael.y"
02255     { reset_semicount(parseio->scanner); ;}
02256     break;
02257 
02258   case 26:
02259 #line 248 "ael.y"
02260     {
02261       (yyval.pval) = npval2(PV_LOCALVARDEC, &(yylsp[(1) - (6)]), &(yylsp[(6) - (6)]));
02262       (yyval.pval)->u1.str = (yyvsp[(2) - (6)].str);
02263       (yyval.pval)->u2.val = (yyvsp[(5) - (6)].str); ;}
02264     break;
02265 
02266   case 27:
02267 #line 255 "ael.y"
02268     { (yyval.pval) = NULL; ;}
02269     break;
02270 
02271   case 28:
02272 #line 256 "ael.y"
02273     { (yyval.pval) = nword((yyvsp[(1) - (1)].str), &(yylsp[(1) - (1)])); ;}
02274     break;
02275 
02276   case 29:
02277 #line 257 "ael.y"
02278     { (yyval.pval) = linku1((yyvsp[(1) - (3)].pval), nword((yyvsp[(3) - (3)].str), &(yylsp[(3) - (3)]))); ;}
02279     break;
02280 
02281   case 30:
02282 #line 258 "ael.y"
02283     {(yyval.pval)=(yyvsp[(1) - (2)].pval);;}
02284     break;
02285 
02286   case 31:
02287 #line 261 "ael.y"
02288     {(yyval.pval)=0;;}
02289     break;
02290 
02291   case 32:
02292 #line 262 "ael.y"
02293     { (yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
02294     break;
02295 
02296   case 33:
02297 #line 263 "ael.y"
02298     { (yyval.pval)=(yyvsp[(2) - (2)].pval);;}
02299     break;
02300 
02301   case 34:
02302 #line 266 "ael.y"
02303     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
02304     break;
02305 
02306   case 35:
02307 #line 267 "ael.y"
02308     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
02309     break;
02310 
02311   case 36:
02312 #line 268 "ael.y"
02313     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
02314     break;
02315 
02316   case 37:
02317 #line 269 "ael.y"
02318     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
02319     break;
02320 
02321   case 38:
02322 #line 270 "ael.y"
02323     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
02324     break;
02325 
02326   case 39:
02327 #line 271 "ael.y"
02328     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
02329     break;
02330 
02331   case 40:
02332 #line 272 "ael.y"
02333     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
02334     break;
02335 
02336   case 41:
02337 #line 273 "ael.y"
02338     {free((yyvsp[(1) - (2)].str)); (yyval.pval)=0;;}
02339     break;
02340 
02341   case 42:
02342 #line 274 "ael.y"
02343     {(yyval.pval)=0;/* allow older docs to be read */;}
02344     break;
02345 
02346   case 43:
02347 #line 277 "ael.y"
02348     {
02349       (yyval.pval) = npval2(PV_IGNOREPAT, &(yylsp[(1) - (4)]), &(yylsp[(4) - (4)]));
02350       (yyval.pval)->u1.str = (yyvsp[(3) - (4)].str);;}
02351     break;
02352 
02353   case 44:
02354 #line 282 "ael.y"
02355     {
02356       (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
02357       (yyval.pval)->u1.str = (yyvsp[(1) - (3)].str);
02358       (yyval.pval)->u2.statements = (yyvsp[(3) - (3)].pval); set_dads((yyval.pval),(yyvsp[(3) - (3)].pval));;}
02359     break;
02360 
02361   case 45:
02362 #line 286 "ael.y"
02363     {
02364       (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[(1) - (5)]), &(yylsp[(3) - (5)]));
02365       (yyval.pval)->u1.str = malloc(strlen((yyvsp[(1) - (5)].str))+strlen((yyvsp[(3) - (5)].str))+2);
02366       strcpy((yyval.pval)->u1.str,(yyvsp[(1) - (5)].str));
02367       strcat((yyval.pval)->u1.str,"@");
02368       strcat((yyval.pval)->u1.str,(yyvsp[(3) - (5)].str));
02369       free((yyvsp[(1) - (5)].str));
02370       (yyval.pval)->u2.statements = (yyvsp[(5) - (5)].pval); set_dads((yyval.pval),(yyvsp[(5) - (5)].pval));;}
02371     break;
02372 
02373   case 46:
02374 #line 294 "ael.y"
02375     {
02376       (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[(1) - (4)]), &(yylsp[(4) - (4)]));
02377       (yyval.pval)->u1.str = (yyvsp[(2) - (4)].str);
02378       (yyval.pval)->u2.statements = (yyvsp[(4) - (4)].pval); set_dads((yyval.pval),(yyvsp[(4) - (4)].pval));
02379       (yyval.pval)->u4.regexten=1;;}
02380     break;
02381 
02382   case 47:
02383 #line 299 "ael.y"
02384     {
02385       (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[(1) - (7)]), &(yylsp[(7) - (7)]));
02386       (yyval.pval)->u1.str = (yyvsp[(5) - (7)].str);
02387       (yyval.pval)->u2.statements = (yyvsp[(7) - (7)].pval); set_dads((yyval.pval),(yyvsp[(7) - (7)].pval));
02388       (yyval.pval)->u3.hints = (yyvsp[(3) - (7)].str);;}
02389     break;
02390 
02391   case 48:
02392 #line 304 "ael.y"
02393     {
02394       (yyval.pval) = npval2(PV_EXTENSION, &(yylsp[(1) - (8)]), &(yylsp[(8) - (8)]));
02395       (yyval.pval)->u1.str = (yyvsp[(6) - (8)].str);
02396       (yyval.pval)->u2.statements = (yyvsp[(8) - (8)].pval); set_dads((yyval.pval),(yyvsp[(8) - (8)].pval));
02397       (yyval.pval)->u4.regexten=1;
02398       (yyval.pval)->u3.hints = (yyvsp[(4) - (8)].str);;}
02399     break;
02400 
02401   case 49:
02402 #line 313 "ael.y"
02403     { (yyval.pval) = NULL; ;}
02404     break;
02405 
02406   case 50:
02407 #line 314 "ael.y"
02408     { (yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
02409     break;
02410 
02411   case 51:
02412 #line 315 "ael.y"
02413     {(yyval.pval)=(yyvsp[(2) - (2)].pval);;}
02414     break;
02415 
02416   case 52:
02417 #line 321 "ael.y"
02418     {
02419       if (asprintf(&(yyval.str), "%s:%s:%s", (yyvsp[(1) - (5)].str), (yyvsp[(3) - (5)].str), (yyvsp[(5) - (5)].str)) < 0) {
02420          ast_log(LOG_WARNING, "asprintf() failed\n");
02421          (yyval.str) = NULL;
02422       } else {
02423          free((yyvsp[(1) - (5)].str));
02424          free((yyvsp[(3) - (5)].str));
02425          free((yyvsp[(5) - (5)].str));
02426       }
02427    ;}
02428     break;
02429 
02430   case 53:
02431 #line 331 "ael.y"
02432     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
02433     break;
02434 
02435   case 54:
02436 #line 335 "ael.y"
02437     {
02438       (yyval.pval) = nword((yyvsp[(1) - (7)].str), &(yylsp[(1) - (7)]));
02439       (yyval.pval)->next = nword((yyvsp[(3) - (7)].str), &(yylsp[(3) - (7)]));
02440       (yyval.pval)->next->next = nword((yyvsp[(5) - (7)].str), &(yylsp[(5) - (7)]));
02441       (yyval.pval)->next->next->next = nword((yyvsp[(7) - (7)].str), &(yylsp[(7) - (7)])); ;}
02442     break;
02443 
02444   case 55:
02445 #line 343 "ael.y"
02446     { reset_parencount(parseio->scanner); ;}
02447     break;
02448 
02449   case 56:
02450 #line 343 "ael.y"
02451     { (yyval.str) = (yyvsp[(3) - (4)].str); ;}
02452     break;
02453 
02454   case 57:
02455 #line 347 "ael.y"
02456     {
02457       (yyval.pval)= npval2(PV_IF, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)]));
02458       (yyval.pval)->u1.str = (yyvsp[(2) - (2)].str); ;}
02459     break;
02460 
02461   case 58:
02462 #line 350 "ael.y"
02463     {
02464       (yyval.pval) = npval2(PV_RANDOM, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)]));
02465       (yyval.pval)->u1.str=(yyvsp[(2) - (2)].str);;}
02466     break;
02467 
02468   case 59:
02469 #line 353 "ael.y"
02470     {
02471       (yyval.pval) = npval2(PV_IFTIME, &(yylsp[(1) - (4)]), &(yylsp[(4) - (4)]));
02472       (yyval.pval)->u1.list = (yyvsp[(3) - (4)].pval);
02473       prev_word = 0; ;}
02474     break;
02475 
02476   case 60:
02477 #line 364 "ael.y"
02478     { (yyval.str) = (yyvsp[(1) - (1)].str);;}
02479     break;
02480 
02481   case 61:
02482 #line 365 "ael.y"
02483     {
02484       if (asprintf(&((yyval.str)), "%s%s", (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)) < 0) {
02485          ast_log(LOG_WARNING, "asprintf() failed\n");
02486          (yyval.str) = NULL;
02487       } else {
02488          free((yyvsp[(1) - (2)].str));
02489          free((yyvsp[(2) - (2)].str));
02490          prev_word = (yyval.str);
02491       }
02492    ;}
02493     break;
02494 
02495   case 62:
02496 #line 377 "ael.y"
02497     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
02498     break;
02499 
02500   case 63:
02501 #line 378 "ael.y"
02502     {
02503       if (asprintf(&((yyval.str)), "%s %s", (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)) < 0) {
02504          ast_log(LOG_WARNING, "asprintf() failed\n");
02505          (yyval.str) = NULL;
02506       } else {
02507          free((yyvsp[(1) - (2)].str));
02508          free((yyvsp[(2) - (2)].str));
02509       }
02510    ;}
02511     break;
02512 
02513   case 64:
02514 #line 387 "ael.y"
02515     {
02516       if (asprintf(&((yyval.str)), "%s:%s", (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str)) < 0) {
02517          ast_log(LOG_WARNING, "asprintf() failed\n");
02518          (yyval.str) = NULL;
02519       } else {
02520          free((yyvsp[(1) - (3)].str));
02521          free((yyvsp[(3) - (3)].str));
02522       }
02523    ;}
02524     break;
02525 
02526   case 65:
02527 #line 396 "ael.y"
02528     {  /* there are often '&' in hints */
02529       if (asprintf(&((yyval.str)), "%s&%s", (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str)) < 0) {
02530          ast_log(LOG_WARNING, "asprintf() failed\n");
02531          (yyval.str) = NULL;
02532       } else {
02533          free((yyvsp[(1) - (3)].str));
02534          free((yyvsp[(3) - (3)].str));
02535       }
02536    ;}
02537     break;
02538 
02539   case 66:
02540 #line 405 "ael.y"
02541     {
02542       if (asprintf(&((yyval.str)), "%s@%s", (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str)) < 0) {
02543          ast_log(LOG_WARNING, "asprintf() failed\n");
02544          (yyval.str) = NULL;
02545       } else {
02546          free((yyvsp[(1) - (3)].str));
02547          free((yyvsp[(3) - (3)].str));
02548       }
02549    ;}
02550     break;
02551 
02552   case 67:
02553 #line 416 "ael.y"
02554     { (yyval.str) = (yyvsp[(1) - (1)].str);;}
02555     break;
02556 
02557   case 68:
02558 #line 417 "ael.y"
02559     {
02560       if (asprintf(&((yyval.str)), "%s%s", (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)) < 0) {
02561          ast_log(LOG_WARNING, "asprintf() failed\n");
02562          (yyval.str) = NULL;
02563       } else {
02564          free((yyvsp[(1) - (2)].str));
02565          free((yyvsp[(2) - (2)].str));
02566          prev_word = (yyval.str);
02567       }        
02568    ;}
02569     break;
02570 
02571   case 69:
02572 #line 427 "ael.y"
02573     {
02574       if (asprintf(&((yyval.str)), "%s%s%s", (yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)) < 0) {
02575          ast_log(LOG_WARNING, "asprintf() failed\n");
02576          (yyval.str) = NULL;
02577       } else {
02578          free((yyvsp[(1) - (3)].str));
02579          free((yyvsp[(2) - (3)].str));
02580          free((yyvsp[(3) - (3)].str));
02581          prev_word=(yyval.str);
02582       }
02583    ;}
02584     break;
02585 
02586   case 70:
02587 #line 440 "ael.y"
02588     { (yyval.str) = (yyvsp[(1) - (1)].str);;}
02589     break;
02590 
02591   case 71:
02592 #line 441 "ael.y"
02593     {
02594       if (asprintf(&((yyval.str)), "%s%s", (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)) < 0) {
02595          ast_log(LOG_WARNING, "asprintf() failed\n");
02596          (yyval.str) = NULL;
02597       } else {
02598          free((yyvsp[(1) - (2)].str));
02599          free((yyvsp[(2) - (2)].str));
02600       }
02601    ;}
02602     break;
02603 
02604   case 72:
02605 #line 450 "ael.y"
02606     {
02607       if (asprintf(&((yyval.str)), "%s:%s", (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str)) < 0) {
02608          ast_log(LOG_WARNING, "asprintf() failed\n");
02609          (yyval.str) = NULL;
02610       } else {
02611          free((yyvsp[(1) - (3)].str));
02612          free((yyvsp[(3) - (3)].str));
02613       }
02614    ;}
02615     break;
02616 
02617   case 73:
02618 #line 461 "ael.y"
02619     {
02620       (yyval.pval) = npval2(PV_SWITCH, &(yylsp[(1) - (5)]), &(yylsp[(5) - (5)]));
02621       (yyval.pval)->u1.str = (yyvsp[(2) - (5)].str);
02622       (yyval.pval)->u2.statements = (yyvsp[(4) - (5)].pval); set_dads((yyval.pval),(yyvsp[(4) - (5)].pval));;}
02623     break;
02624 
02625   case 74:
02626 #line 470 "ael.y"
02627     {
02628       (yyval.pval) = npval2(PV_STATEMENTBLOCK, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
02629       (yyval.pval)->u1.list = (yyvsp[(2) - (3)].pval); set_dads((yyval.pval),(yyvsp[(2) - (3)].pval));;}
02630     break;
02631 
02632   case 75:
02633 #line 473 "ael.y"
02634     { (yyval.pval) = (yyvsp[(1) - (1)].pval); ;}
02635     break;
02636 
02637   case 76:
02638 #line 474 "ael.y"
02639     { (yyval.pval) = (yyvsp[(1) - (1)].pval); ;}
02640     break;
02641 
02642   case 77:
02643 #line 475 "ael.y"
02644     {
02645       (yyval.pval) = npval2(PV_GOTO, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
02646       (yyval.pval)->u1.list = (yyvsp[(2) - (3)].pval);;}
02647     break;
02648 
02649   case 78:
02650 #line 478 "ael.y"
02651     {
02652       (yyval.pval) = npval2(PV_GOTO, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
02653       (yyval.pval)->u1.list = (yyvsp[(2) - (3)].pval);;}
02654     break;
02655 
02656   case 79:
02657 #line 481 "ael.y"
02658     {
02659       (yyval.pval) = npval2(PV_LABEL, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)]));
02660       (yyval.pval)->u1.str = (yyvsp[(1) - (2)].str); ;}
02661     break;
02662 
02663   case 80:
02664 #line 484 "ael.y"
02665     {reset_semicount(parseio->scanner);;}
02666     break;
02667 
02668   case 81:
02669 #line 485 "ael.y"
02670     {reset_semicount(parseio->scanner);;}
02671     break;
02672 
02673   case 82:
02674 #line 486 "ael.y"
02675     {reset_parencount(parseio->scanner);;}
02676     break;
02677 
02678   case 83:
02679 #line 486 "ael.y"
02680     { /* XXX word_list maybe ? */
02681       (yyval.pval) = npval2(PV_FOR, &(yylsp[(1) - (12)]), &(yylsp[(12) - (12)]));
02682       (yyval.pval)->u1.for_init = (yyvsp[(4) - (12)].str);
02683       (yyval.pval)->u2.for_test=(yyvsp[(7) - (12)].str);
02684       (yyval.pval)->u3.for_inc = (yyvsp[(10) - (12)].str);
02685       (yyval.pval)->u4.for_statements = (yyvsp[(12) - (12)].pval); set_dads((yyval.pval),(yyvsp[(12) - (12)].pval));;}
02686     break;
02687 
02688   case 84:
02689 #line 492 "ael.y"
02690     {
02691       (yyval.pval) = npval2(PV_WHILE, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
02692       (yyval.pval)->u1.str = (yyvsp[(2) - (3)].str);
02693       (yyval.pval)->u2.statements = (yyvsp[(3) - (3)].pval); set_dads((yyval.pval),(yyvsp[(3) - (3)].pval));;}
02694     break;
02695 
02696   case 85:
02697 #line 496 "ael.y"
02698     { (yyval.pval) = (yyvsp[(1) - (1)].pval); ;}
02699     break;
02700 
02701   case 86:
02702 #line 497 "ael.y"
02703     { (yyval.pval) = update_last((yyvsp[(2) - (3)].pval), &(yylsp[(2) - (3)])); ;}
02704     break;
02705 
02706   case 87:
02707 #line 498 "ael.y"
02708     { (yyval.pval) = update_last((yyvsp[(1) - (2)].pval), &(yylsp[(2) - (2)])); ;}
02709     break;
02710 
02711   case 88:
02712 #line 499 "ael.y"
02713     {
02714       (yyval.pval)= npval2(PV_APPLICATION_CALL, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)]));
02715       (yyval.pval)->u1.str = (yyvsp[(1) - (2)].str);;}
02716     break;
02717 
02718   case 89:
02719 #line 502 "ael.y"
02720     {reset_semicount(parseio->scanner);;}
02721     break;
02722 
02723   case 90:
02724 #line 502 "ael.y"
02725     {
02726       char *bufx;
02727       int tot=0;
02728       pval *pptr;
02729       (yyval.pval) = npval2(PV_VARDEC, &(yylsp[(1) - (5)]), &(yylsp[(5) - (5)]));
02730       (yyval.pval)->u2.val=(yyvsp[(4) - (5)].str);
02731       /* rebuild the original string-- this is not an app call, it's an unwrapped vardec, with a func call on the LHS */
02732       /* string to big to fit in the buffer? */
02733       tot+=strlen((yyvsp[(1) - (5)].pval)->u1.str);
02734       for(pptr=(yyvsp[(1) - (5)].pval)->u2.arglist;pptr;pptr=pptr->next) {
02735          tot+=strlen(pptr->u1.str);
02736          tot++; /* for a sep like a comma */
02737       }
02738       tot+=4; /* for safety */
02739       bufx = calloc(1, tot);
02740       strcpy(bufx,(yyvsp[(1) - (5)].pval)->u1.str);
02741       strcat(bufx,"(");
02742       /* XXX need to advance the pointer or the loop is very inefficient */
02743       for (pptr=(yyvsp[(1) - (5)].pval)->u2.arglist;pptr;pptr=pptr->next) {
02744          if ( pptr != (yyvsp[(1) - (5)].pval)->u2.arglist )
02745             strcat(bufx,",");
02746          strcat(bufx,pptr->u1.str);
02747       }
02748       strcat(bufx,")");
02749 #ifdef AAL_ARGCHECK
02750       if ( !ael_is_funcname((yyvsp[(1) - (5)].pval)->u1.str) )
02751          ast_log(LOG_WARNING, "==== File: %s, Line %d, Cols: %d-%d: Function call? The name %s is not in my internal list of function names\n",
02752             my_file, (yylsp[(1) - (5)]).first_line, (yylsp[(1) - (5)]).first_column, (yylsp[(1) - (5)]).last_column, (yyvsp[(1) - (5)].pval)->u1.str);
02753 #endif
02754       (yyval.pval)->u1.str = bufx;
02755       destroy_pval((yyvsp[(1) - (5)].pval)); /* the app call it is not, get rid of that chain */
02756       prev_word = 0;
02757    ;}
02758     break;
02759 
02760   case 91:
02761 #line 535 "ael.y"
02762     { (yyval.pval) = npval2(PV_BREAK, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)])); ;}
02763     break;
02764 
02765   case 92:
02766 #line 536 "ael.y"
02767     { (yyval.pval) = npval2(PV_RETURN, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)])); ;}
02768     break;
02769 
02770   case 93:
02771 #line 537 "ael.y"
02772     { (yyval.pval) = npval2(PV_CONTINUE, &(yylsp[(1) - (2)]), &(yylsp[(2) - (2)])); ;}
02773     break;
02774 
02775   case 94:
02776 #line 538 "ael.y"
02777     {
02778       (yyval.pval) = update_last((yyvsp[(1) - (3)].pval), &(yylsp[(2) - (3)]));
02779       (yyval.pval)->u2.statements = (yyvsp[(2) - (3)].pval); set_dads((yyval.pval),(yyvsp[(2) - (3)].pval));
02780       (yyval.pval)->u3.else_statements = (yyvsp[(3) - (3)].pval);set_dads((yyval.pval),(yyvsp[(3) - (3)].pval));;}
02781     break;
02782 
02783   case 95:
02784 #line 542 "ael.y"
02785     { (yyval.pval)=0; ;}
02786     break;
02787 
02788   case 96:
02789 #line 545 "ael.y"
02790     { (yyval.pval) = (yyvsp[(2) - (2)].pval); ;}
02791     break;
02792 
02793   case 97:
02794 #line 546 "ael.y"
02795     { (yyval.pval) = NULL ; ;}
02796     break;
02797 
02798   case 98:
02799 #line 549 "ael.y"
02800     { (yyval.pval) = nword((yyvsp[(1) - (1)].str), &(yylsp[(1) - (1)])); ;}
02801     break;
02802 
02803   case 99:
02804 #line 550 "ael.y"
02805     {
02806       (yyval.pval) = nword((yyvsp[(1) - (3)].str), &(yylsp[(1) - (3)]));
02807       (yyval.pval)->next = nword((yyvsp[(3) - (3)].str), &(yylsp[(3) - (3)])); ;}
02808     break;
02809 
02810   case 100:
02811 #line 553 "ael.y"
02812     {
02813       (yyval.pval) = nword((yyvsp[(1) - (3)].str), &(yylsp[(1) - (3)]));
02814       (yyval.pval)->next = nword((yyvsp[(3) - (3)].str), &(yylsp[(3) - (3)])); ;}
02815     break;
02816 
02817   case 101:
02818 #line 556 "ael.y"
02819     {
02820       (yyval.pval) = nword((yyvsp[(1) - (5)].str), &(yylsp[(1) - (5)]));
02821       (yyval.pval)->next = nword((yyvsp[(3) - (5)].str), &(yylsp[(3) - (5)]));
02822       (yyval.pval)->next->next = nword((yyvsp[(5) - (5)].str), &(yylsp[(5) - (5)])); ;}
02823     break;
02824 
02825   case 102:
02826 #line 560 "ael.y"
02827     {
02828       (yyval.pval) = nword((yyvsp[(1) - (5)].str), &(yylsp[(1) - (5)]));
02829       (yyval.pval)->next = nword((yyvsp[(3) - (5)].str), &(yylsp[(3) - (5)]));
02830       (yyval.pval)->next->next = nword((yyvsp[(5) - (5)].str), &(yylsp[(5) - (5)])); ;}
02831     break;
02832 
02833   case 103:
02834 #line 564 "ael.y"
02835     {
02836       (yyval.pval) = nword(strdup("default"), &(yylsp[(1) - (5)]));
02837       (yyval.pval)->next = nword((yyvsp[(3) - (5)].str), &(yylsp[(3) - (5)]));
02838       (yyval.pval)->next->next = nword((yyvsp[(5) - (5)].str), &(yylsp[(5) - (5)])); ;}
02839     break;
02840 
02841   case 104:
02842 #line 568 "ael.y"
02843     {
02844       (yyval.pval) = nword(strdup("default"), &(yylsp[(1) - (5)]));
02845       (yyval.pval)->next = nword((yyvsp[(3) - (5)].str), &(yylsp[(3) - (5)]));
02846       (yyval.pval)->next->next = nword((yyvsp[(5) - (5)].str), &(yylsp[(5) - (5)])); ;}
02847     break;
02848 
02849   case 105:
02850 #line 574 "ael.y"
02851     { (yyval.str) = strdup("1"); ;}
02852     break;
02853 
02854   case 106:
02855 #line 575 "ael.y"
02856     { (yyval.str) = (yyvsp[(2) - (2)].str); ;}
02857     break;
02858 
02859   case 107:
02860 #line 579 "ael.y"
02861     {       /* ext[, pri] default 1 */
02862       (yyval.pval) = nword((yyvsp[(1) - (2)].str), &(yylsp[(1) - (2)]));
02863       (yyval.pval)->next = nword((yyvsp[(2) - (2)].str), &(yylsp[(2) - (2)])); ;}
02864     break;
02865 
02866   case 108:
02867 #line 582 "ael.y"
02868     { /* context, ext, pri */
02869       (yyval.pval) = nword((yyvsp[(4) - (4)].str), &(yylsp[(4) - (4)]));
02870       (yyval.pval)->next = nword((yyvsp[(1) - (4)].str), &(yylsp[(1) - (4)]));
02871       (yyval.pval)->next->next = nword((yyvsp[(2) - (4)].str), &(yylsp[(2) - (4)])); ;}
02872     break;
02873 
02874   case 109:
02875 #line 588 "ael.y"
02876     {reset_argcount(parseio->scanner);;}
02877     break;
02878 
02879   case 110:
02880 #line 588 "ael.y"
02881     {
02882       /* XXX original code had @2 but i think we need @5 */
02883       (yyval.pval) = npval2(PV_MACRO_CALL, &(yylsp[(1) - (5)]), &(yylsp[(5) - (5)]));
02884       (yyval.pval)->u1.str = (yyvsp[(1) - (5)].str);
02885       (yyval.pval)->u2.arglist = (yyvsp[(4) - (5)].pval);;}
02886     break;
02887 
02888   case 111:
02889 #line 593 "ael.y"
02890     {
02891       (yyval.pval)= npval2(PV_MACRO_CALL, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
02892       (yyval.pval)->u1.str = (yyvsp[(1) - (3)].str); ;}
02893     break;
02894 
02895   case 112:
02896 #line 601 "ael.y"
02897     {reset_argcount(parseio->scanner);;}
02898     break;
02899 
02900   case 113:
02901 #line 601 "ael.y"
02902     {
02903       if (strcasecmp((yyvsp[(1) - (3)].str),"goto") == 0) {
02904          (yyval.pval) = npval2(PV_GOTO, &(yylsp[(1) - (3)]), &(yylsp[(2) - (3)]));
02905          free((yyvsp[(1) - (3)].str)); /* won't be using this */
02906          ast_log(LOG_WARNING, "==== File: %s, Line %d, Cols: %d-%d: Suggestion: Use the goto statement instead of the Goto() application call in AEL.\n", my_file, (yylsp[(1) - (3)]).first_line, (yylsp[(1) - (3)]).first_column, (yylsp[(1) - (3)]).last_column );
02907       } else {
02908          (yyval.pval)= npval2(PV_APPLICATION_CALL, &(yylsp[(1) - (3)]), &(yylsp[(2) - (3)]));
02909          (yyval.pval)->u1.str = (yyvsp[(1) - (3)].str);
02910       } ;}
02911     break;
02912 
02913   case 114:
02914 #line 612 "ael.y"
02915     {
02916       (yyval.pval) = update_last((yyvsp[(1) - (3)].pval), &(yylsp[(3) - (3)]));
02917       if( (yyval.pval)->type == PV_GOTO )
02918          (yyval.pval)->u1.list = (yyvsp[(2) - (3)].pval);
02919       else
02920          (yyval.pval)->u2.arglist = (yyvsp[(2) - (3)].pval);
02921    ;}
02922     break;
02923 
02924   case 115:
02925 #line 619 "ael.y"
02926     { (yyval.pval) = update_last((yyvsp[(1) - (2)].pval), &(yylsp[(2) - (2)])); ;}
02927     break;
02928 
02929   case 116:
02930 #line 622 "ael.y"
02931     { (yyval.str) = (yyvsp[(1) - (1)].str) ;}
02932     break;
02933 
02934   case 117:
02935 #line 623 "ael.y"
02936     { (yyval.str) = strdup(""); ;}
02937     break;
02938 
02939   case 118:
02940 #line 626 "ael.y"
02941     { (yyval.pval) = nword((yyvsp[(1) - (1)].str), &(yylsp[(1) - (1)])); ;}
02942     break;
02943 
02944   case 119:
02945 #line 627 "ael.y"
02946     {
02947       (yyval.pval)= npval(PV_WORD,0/*@1.first_line*/,0/*@1.last_line*/,0/* @1.first_column*/, 0/*@1.last_column*/);
02948       (yyval.pval)->u1.str = strdup(""); ;}
02949     break;
02950 
02951   case 120:
02952 #line 630 "ael.y"
02953     { (yyval.pval) = linku1((yyvsp[(1) - (3)].pval), nword((yyvsp[(3) - (3)].str), &(yylsp[(3) - (3)]))); ;}
02954     break;
02955 
02956   case 121:
02957 #line 633 "ael.y"
02958     { (yyval.pval) = NULL; ;}
02959     break;
02960 
02961   case 122:
02962 #line 634 "ael.y"
02963     { (yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
02964     break;
02965 
02966   case 123:
02967 #line 637 "ael.y"
02968     {
02969       (yyval.pval) = npval2(PV_CASE, &(yylsp[(1) - (4)]), &(yylsp[(3) - (4)])); /* XXX 3 or 4 ? */
02970       (yyval.pval)->u1.str = (yyvsp[(2) - (4)].str);
02971       (yyval.pval)->u2.statements = (yyvsp[(4) - (4)].pval); set_dads((yyval.pval),(yyvsp[(4) - (4)].pval));;}
02972     break;
02973 
02974   case 124:
02975 #line 641 "ael.y"
02976     {
02977       (yyval.pval) = npval2(PV_DEFAULT, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));
02978       (yyval.pval)->u1.str = NULL;
02979       (yyval.pval)->u2.statements = (yyvsp[(3) - (3)].pval);set_dads((yyval.pval),(yyvsp[(3) - (3)].pval));;}
02980     break;
02981 
02982   case 125:
02983 #line 645 "ael.y"
02984     {
02985       (yyval.pval) = npval2(PV_PATTERN, &(yylsp[(1) - (4)]), &(yylsp[(4) - (4)])); /* XXX@3 or @4 ? */
02986       (yyval.pval)->u1.str = (yyvsp[(2) - (4)].str);
02987       (yyval.pval)->u2.statements = (yyvsp[(4) - (4)].pval);set_dads((yyval.pval),(yyvsp[(4) - (4)].pval));;}
02988     break;
02989 
02990   case 126:
02991 #line 651 "ael.y"
02992     { (yyval.pval) = NULL; ;}
02993     break;
02994 
02995   case 127:
02996 #line 652 "ael.y"
02997     { (yyval.pval) = linku1((yyvsp[(1) - (2)].pval), (yyvsp[(2) - (2)].pval)); ;}
02998     break;
02999 
03000   case 128:
03001 #line 655 "ael.y"
03002     {(yyval.pval)=(yyvsp[(1) - (1)].pval);;}
03003     break;
03004 
03005   case 129:
03006 #line 656 "ael.y"
03007     { (yyval.pval)=(yyvsp[(1) - (1)].pval);;}
03008     break;
03009 
03010   case 130:
03011 #line 657 "ael.y"
03012     {
03013       (yyval.pval) = npval2(PV_CATCH, &(yylsp[(1) - (5)]), &(yylsp[(5) - (5)]));
03014       (yyval.pval)->u1.str = (yyvsp[(2) - (5)].str);
03015       (yyval.pval)->u2.statements = (yyvsp[(4) - (5)].pval); set_dads((yyval.pval),(yyvsp[(4) - (5)].pval));;}
03016     break;
03017 
03018   case 131:
03019 #line 663 "ael.y"
03020     {
03021       (yyval.pval) = npval2(PV_SWITCHES, &(yylsp[(1) - (4)]), &(yylsp[(2) - (4)]));
03022       (yyval.pval)->u1.list = (yyvsp[(3) - (4)].pval); set_dads((yyval.pval),(yyvsp[(3) - (4)].pval));;}
03023     break;
03024 
03025   case 132:
03026 #line 668 "ael.y"
03027     {
03028       (yyval.pval) = npval2(PV_ESWITCHES, &(yylsp[(1) - (4)]), &(yylsp[(2) - (4)]));
03029       (yyval.pval)->u1.list = (yyvsp[(3) - (4)].pval); set_dads((yyval.pval),(yyvsp[(3) - (4)].pval));;}
03030     break;
03031 
03032   case 133:
03033 #line 673 "ael.y"
03034     { (yyval.pval) = NULL; ;}
03035     break;
03036 
03037   case 134:
03038 #line 674 "ael.y"
03039     { (yyval.pval) = linku1((yyvsp[(1) - (3)].pval),nword((yyvsp[(2) - (3)].str), &(yylsp[(2) - (3)]))); ;}
03040     break;
03041 
03042   case 135:
03043 #line 675 "ael.y"
03044     {
03045      char *x;
03046      if (asprintf(&x,"%s@%s", (yyvsp[(2) - (5)].str), (yyvsp[(4) - (5)].str)) < 0) {
03047       ast_log(LOG_WARNING, "asprintf() failed\n");
03048       (yyval.pval) = NULL;
03049      } else {
03050       free((yyvsp[(2) - (5)].str));
03051       free((yyvsp[(4) - (5)].str));
03052       (yyval.pval) = linku1((yyvsp[(1) - (5)].pval),nword(x, &(yylsp[(2) - (5)])));
03053      }
03054    ;}
03055     break;
03056 
03057   case 136:
03058 #line 686 "ael.y"
03059     {(yyval.pval)=(yyvsp[(2) - (2)].pval);;}
03060     break;
03061 
03062   case 137:
03063 #line 689 "ael.y"
03064     { (yyval.pval) = nword((yyvsp[(1) - (1)].str), &(yylsp[(1) - (1)])); ;}
03065     break;
03066 
03067   case 138:
03068 #line 690 "ael.y"
03069     {
03070       (yyval.pval) = nword((yyvsp[(1) - (3)].str), &(yylsp[(1) - (3)]));
03071       (yyval.pval)->u2.arglist = (yyvsp[(3) - (3)].pval);
03072       prev_word=0; /* XXX sure ? */ ;}
03073     break;
03074 
03075   case 139:
03076 #line 697 "ael.y"
03077     { (yyval.pval) = (yyvsp[(1) - (2)].pval); ;}
03078     break;
03079 
03080   case 140:
03081 #line 698 "ael.y"
03082     { (yyval.pval) = linku1((yyvsp[(1) - (3)].pval), (yyvsp[(2) - (3)].pval)); ;}
03083     break;
03084 
03085   case 141:
03086 #line 699 "ael.y"
03087     {(yyval.pval)=(yyvsp[(1) - (2)].pval);;}
03088     break;
03089 
03090   case 142:
03091 #line 702 "ael.y"
03092     {
03093       (yyval.pval) = npval2(PV_INCLUDES, &(yylsp[(1) - (4)]), &(yylsp[(4) - (4)]));
03094       (yyval.pval)->u1.list = (yyvsp[(3) - (4)].pval);set_dads((yyval.pval),(yyvsp[(3) - (4)].pval));;}
03095     break;
03096 
03097   case 143:
03098 #line 705 "ael.y"
03099     {
03100       (yyval.pval) = npval2(PV_INCLUDES, &(yylsp[(1) - (3)]), &(yylsp[(3) - (3)]));;}
03101     break;
03102 
03103 
03104 /* Line 1267 of yacc.c.  */
03105 #line 3106 "ael.tab.c"
03106       default: break;
03107     }
03108   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
03109 
03110   YYPOPSTACK (yylen);
03111   yylen = 0;
03112   YY_STACK_PRINT (yyss, yyssp);
03113 
03114   *++yyvsp = yyval;
03115   *++yylsp = yyloc;
03116 
03117   /* Now `shift' the result of the reduction.  Determine what state
03118      that goes to, based on the state we popped back to and the rule
03119      number reduced by.  */
03120 
03121   yyn = yyr1[yyn];
03122 
03123   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
03124   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
03125     yystate = yytable[yystate];
03126   else
03127     yystate = yydefgoto[yyn - YYNTOKENS];
03128 
03129   goto yynewstate;
03130 
03131 
03132 /*------------------------------------.
03133 | yyerrlab -- here on detecting error |
03134 `------------------------------------*/
03135 yyerrlab:
03136   /* If not already recovering from an error, report this error.  */
03137   if (!yyerrstatus)
03138     {
03139       ++yynerrs;
03140 #if ! YYERROR_VERBOSE
03141       yyerror (&yylloc, parseio, YY_("syntax error"));
03142 #else
03143       {
03144    YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
03145    if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
03146      {
03147        YYSIZE_T yyalloc = 2 * yysize;
03148        if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
03149          yyalloc = YYSTACK_ALLOC_MAXIMUM;
03150        if (yymsg != yymsgbuf)
03151          YYSTACK_FREE (yymsg);
03152        yymsg = (char *) YYSTACK_ALLOC (yyalloc);
03153        if (yymsg)
03154          yymsg_alloc = yyalloc;
03155        else
03156          {
03157       yymsg = yymsgbuf;
03158       yymsg_alloc = sizeof yymsgbuf;
03159          }
03160      }
03161 
03162    if (0 < yysize && yysize <= yymsg_alloc)
03163      {
03164        (void) yysyntax_error (yymsg, yystate, yychar);
03165        yyerror (&yylloc, parseio, yymsg);
03166      }
03167    else
03168      {
03169        yyerror (&yylloc, parseio, YY_("syntax error"));
03170        if (yysize != 0)
03171          goto yyexhaustedlab;
03172      }
03173       }
03174 #endif
03175     }
03176 
03177   yyerror_range[0] = yylloc;
03178 
03179   if (yyerrstatus == 3)
03180     {
03181       /* If just tried and failed to reuse look-ahead token after an
03182     error, discard it.  */
03183 
03184       if (yychar <= YYEOF)
03185    {
03186      /* Return failure if at end of input.  */
03187      if (yychar == YYEOF)
03188        YYABORT;
03189    }
03190       else
03191    {
03192      yydestruct ("Error: discarding",
03193             yytoken, &yylval, &yylloc, parseio);
03194      yychar = YYEMPTY;
03195    }
03196     }
03197 
03198   /* Else will try to reuse look-ahead token after shifting the error
03199      token.  */
03200   goto yyerrlab1;
03201 
03202 
03203 /*---------------------------------------------------.
03204 | yyerrorlab -- error raised explicitly by YYERROR.  |
03205 `---------------------------------------------------*/
03206 yyerrorlab:
03207 
03208   /* Pacify compilers like GCC when the user code never invokes
03209      YYERROR and the label yyerrorlab therefore never appears in user
03210      code.  */
03211   if (/*CONSTCOND*/ 0)
03212      goto yyerrorlab;
03213 
03214   yyerror_range[0] = yylsp[1-yylen];
03215   /* Do not reclaim the symbols of the rule which action triggered
03216      this YYERROR.  */
03217   YYPOPSTACK (yylen);
03218   yylen = 0;
03219   YY_STACK_PRINT (yyss, yyssp);
03220   yystate = *yyssp;
03221   goto yyerrlab1;
03222 
03223 
03224 /*-------------------------------------------------------------.
03225 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
03226 `-------------------------------------------------------------*/
03227 yyerrlab1:
03228   yyerrstatus = 3;   /* Each real token shifted decrements this.  */
03229 
03230   for (;;)
03231     {
03232       yyn = yypact[yystate];
03233       if (yyn != YYPACT_NINF)
03234    {
03235      yyn += YYTERROR;
03236      if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
03237        {
03238          yyn = yytable[yyn];
03239          if (0 < yyn)
03240       break;
03241        }
03242    }
03243 
03244       /* Pop the current state because it cannot handle the error token.  */
03245       if (yyssp == yyss)
03246    YYABORT;
03247 
03248       yyerror_range[0] = *yylsp;
03249       yydestruct ("Error: popping",
03250         yystos[yystate], yyvsp, yylsp, parseio);
03251       YYPOPSTACK (1);
03252       yystate = *yyssp;
03253       YY_STACK_PRINT (yyss, yyssp);
03254     }
03255 
03256   if (yyn == YYFINAL)
03257     YYACCEPT;
03258 
03259   *++yyvsp = yylval;
03260 
03261   yyerror_range[1] = yylloc;
03262   /* Using YYLLOC is tempting, but would change the location of
03263      the look-ahead.  YYLOC is available though.  */
03264   YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
03265   *++yylsp = yyloc;
03266 
03267   /* Shift the error token.  */
03268   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
03269 
03270   yystate = yyn;
03271   goto yynewstate;
03272 
03273 
03274 /*-------------------------------------.
03275 | yyacceptlab -- YYACCEPT comes here.  |
03276 `-------------------------------------*/
03277 yyacceptlab:
03278   yyresult = 0;
03279   goto yyreturn;
03280 
03281 /*-----------------------------------.
03282 | yyabortlab -- YYABORT comes here.  |
03283 `-----------------------------------*/
03284 yyabortlab:
03285   yyresult = 1;
03286   goto yyreturn;
03287 
03288 #ifndef yyoverflow
03289 /*-------------------------------------------------.
03290 | yyexhaustedlab -- memory exhaustion comes here.  |
03291 `-------------------------------------------------*/
03292 yyexhaustedlab:
03293   yyerror (&yylloc, parseio, YY_("memory exhausted"));
03294   yyresult = 2;
03295   /* Fall through.  */
03296 #endif
03297 
03298 yyreturn:
03299   if (yychar != YYEOF && yychar != YYEMPTY)
03300      yydestruct ("Cleanup: discarding lookahead",
03301        yytoken, &yylval, &yylloc, parseio);
03302   /* Do not reclaim the symbols of the rule which action triggered
03303      this YYABORT or YYACCEPT.  */
03304   YYPOPSTACK (yylen);
03305   YY_STACK_PRINT (yyss, yyssp);
03306   while (yyssp != yyss)
03307     {
03308       yydestruct ("Cleanup: popping",
03309         yystos[*yyssp], yyvsp, yylsp, parseio);
03310       YYPOPSTACK (1);
03311     }
03312 #ifndef yyoverflow
03313   if (yyss != yyssa)
03314     YYSTACK_FREE (yyss);
03315 #endif
03316 #if YYERROR_VERBOSE
03317   if (yymsg != yymsgbuf)
03318     YYSTACK_FREE (yymsg);
03319 #endif
03320   /* Make sure YYID is used.  */
03321   return YYID (yyresult);
03322 }
03323 
03324 
03325 #line 710 "ael.y"
03326 
03327 
03328 static char *token_equivs1[] =
03329 {
03330    "AMPER",
03331    "AT",
03332    "BAR",
03333    "COLON",
03334    "COMMA",
03335    "EQ",
03336    "EXTENMARK",
03337    "KW_BREAK",
03338    "KW_CASE",
03339    "KW_CATCH",
03340    "KW_CONTEXT",
03341    "KW_CONTINUE",
03342    "KW_DEFAULT",
03343    "KW_ELSE",
03344    "KW_ESWITCHES",
03345    "KW_FOR",
03346    "KW_GLOBALS",
03347    "KW_GOTO",
03348    "KW_HINT",
03349    "KW_IFTIME",
03350    "KW_IF",
03351    "KW_IGNOREPAT",
03352    "KW_INCLUDES"
03353    "KW_JUMP",
03354    "KW_MACRO",
03355    "KW_PATTERN",
03356    "KW_REGEXTEN",
03357    "KW_RETURN",
03358    "KW_SWITCHES",
03359    "KW_SWITCH",
03360    "KW_WHILE",
03361    "LC",
03362    "LP",
03363    "RC",
03364    "RP",
03365    "SEMI",
03366 };
03367 
03368 static char *token_equivs2[] =
03369 {
03370    "&",
03371    "@",
03372    "|",
03373    ":",
03374    ",",
03375    "=",
03376    "=>",
03377    "break",
03378    "case",
03379    "catch",
03380    "context",
03381    "continue",
03382    "default",
03383    "else",
03384    "eswitches",
03385    "for",
03386    "globals",
03387    "goto",
03388    "hint",
03389    "ifTime",
03390    "if",
03391    "ignorepat",
03392    "includes"
03393    "jump",
03394    "macro",
03395    "pattern",
03396    "regexten",
03397    "return",
03398    "switches",
03399    "switch",
03400    "while",
03401    "{",
03402    "(",
03403    "}",
03404    ")",
03405    ";",
03406 };
03407 
03408 
03409 static char *ael_token_subst(const char *mess)
03410 {
03411    /* calc a length, malloc, fill, and return; yyerror had better free it! */
03412    int len=0,i;
03413    const char *p;
03414    char *res, *s,*t;
03415    int token_equivs_entries = sizeof(token_equivs1)/sizeof(char*);
03416 
03417    for (p=mess; *p; p++) {
03418       for (i=0; i<token_equivs_entries; i++) {
03419          if ( strncmp(p,token_equivs1[i],strlen(token_equivs1[i])) == 0 )
03420          {
03421             len+=strlen(token_equivs2[i])+2;
03422             p += strlen(token_equivs1[i])-1;
03423             break;
03424          }
03425       }
03426       len++;
03427    }
03428    res = calloc(1, len+1);
03429    res[0] = 0;
03430    s = res;
03431    for (p=mess; *p;) {
03432       int found = 0;
03433       for (i=0; i<token_equivs_entries; i++) {
03434          if ( strncmp(p,token_equivs1[i],strlen(token_equivs1[i])) == 0 ) {
03435             *s++ = '\'';
03436             for (t=token_equivs2[i]; *t;) {
03437                *s++ = *t++;
03438             }
03439             *s++ = '\'';
03440             p += strlen(token_equivs1[i]);
03441             found = 1;
03442             break;
03443          }
03444       }
03445       if( !found )
03446          *s++ = *p++;
03447    }
03448    *s++ = 0;
03449    return res;
03450 }
03451 
03452 void yyerror(YYLTYPE *locp, struct parse_io *parseio,  char const *s)
03453 {
03454    char *s2 = ael_token_subst((char *)s);
03455    if (locp->first_line == locp->last_line) {
03456       ast_log(LOG_ERROR, "==== File: %s, Line %d, Cols: %d-%d: Error: %s\n", my_file, locp->first_line, locp->first_column, locp->last_column, s2);
03457    } else {
03458       ast_log(LOG_ERROR, "==== File: %s, Line %d Col %d  to Line %d Col %d: Error: %s\n", my_file, locp->first_line, locp->first_column, locp->last_line, locp->last_column, s2);
03459    }
03460    free(s2);
03461    parseio->syntax_error_count++;
03462 }
03463 
03464 struct pval *npval(pvaltype type, int first_line, int last_line,
03465    int first_column, int last_column)
03466 {
03467    pval *z = calloc(1, sizeof(struct pval));
03468    z->type = type;
03469    z->startline = first_line;
03470    z->endline = last_line;
03471    z->startcol = first_column;
03472    z->endcol = last_column;
03473    z->filename = strdup(my_file);
03474    return z;
03475 }
03476 
03477 static struct pval *npval2(pvaltype type, YYLTYPE *first, YYLTYPE *last)
03478 {
03479    return npval(type, first->first_line, last->last_line,
03480          first->first_column, last->last_column);
03481 }
03482 
03483 static struct pval *update_last(pval *obj, YYLTYPE *last)
03484 {
03485    obj->endline = last->last_line;
03486    obj->endcol = last->last_column;
03487    return obj;
03488 }
03489 
03490 /* frontend for npval to create a PV_WORD string from the given token */
03491 static pval *nword(char *string, YYLTYPE *pos)
03492 {
03493    pval *p = npval2(PV_WORD, pos, pos);
03494    if (p)
03495       p->u1.str = string;
03496    return p;
03497 }
03498 
03499 /* this routine adds a dad ptr to each element in the list */
03500 static void set_dads(struct pval *dad, struct pval *child_list)
03501 {
03502    struct pval *t;
03503    
03504    for(t=child_list;t;t=t->next)  /* simple stuff */
03505       t->dad = dad;
03506 }
03507 
03508