2
0
mirror of https://github.com/boostorg/build.git synced 2026-02-12 12:02:24 +00:00
Files
build/src/engine/jamgram.c
Dave Abrahams f5663382cb tru64cxx6.5 fixes
[SVN r14421]
2002-07-12 14:32:20 +00:00

1102 lines
35 KiB
C

# define _BANG_t 257
# define _BANG_EQUALS_t 258
# define _AMPER_t 259
# define _AMPERAMPER_t 260
# define _LPAREN_t 261
# define _RPAREN_t 262
# define _PLUS_EQUALS_t 263
# define _COLON_t 264
# define _SEMIC_t 265
# define _LANGLE_t 266
# define _LANGLE_EQUALS_t 267
# define _EQUALS_t 268
# define _RANGLE_t 269
# define _RANGLE_EQUALS_t 270
# define _QUESTION_EQUALS_t 271
# define _LBRACKET_t 272
# define _RBRACKET_t 273
# define ACTIONS_t 274
# define BIND_t 275
# define CASE_t 276
# define DEFAULT_t 277
# define ELSE_t 278
# define EXISTING_t 279
# define FOR_t 280
# define IF_t 281
# define IGNORE_t 282
# define IN_t 283
# define INCLUDE_t 284
# define LOCAL_t 285
# define MODULE_t 286
# define ON_t 287
# define PIECEMEAL_t 288
# define QUIETLY_t 289
# define RETURN_t 290
# define RULE_t 291
# define SWITCH_t 292
# define TOGETHER_t 293
# define UPDATED_t 294
# define WHILE_t 295
# define _LBRACE_t 296
# define _BAR_t 297
# define _BARBAR_t 298
# define _RBRACE_t 299
# define ARG 300
# define STRING 301
# line 98 "jamgram.y"
#include "jam.h"
#include "lists.h"
#include "parse.h"
#include "scan.h"
#include "compile.h"
#include "newstr.h"
#include "rules.h"
# define YYMAXDEPTH 10000 /* for OSF and other less endowed yaccs */
# define F0 (LIST *(*)(PARSE *, FRAME *))0
# define P0 (PARSE *)0
# define S0 (char *)0
# define pappend( l,r ) parse_make( compile_append,l,r,P0,S0,S0,0 )
# define peval( c,l,r ) parse_make( compile_eval,l,r,P0,S0,S0,c )
# define pfor( s,l,r,x ) parse_make( compile_foreach,l,r,P0,s,S0,x )
# define pif( l,r,t ) parse_make( compile_if,l,r,t,S0,S0,0 )
# define pincl( l ) parse_make( compile_include,l,P0,P0,S0,S0,0 )
# define plist( s ) parse_make( compile_list,P0,P0,P0,s,S0,0 )
# define plocal( l,r,t ) parse_make( compile_local,l,r,t,S0,S0,0 )
# define pmodule( l,r ) parse_make( compile_module,l,r,P0,S0,S0,0 )
# define pnull() parse_make( compile_null,P0,P0,P0,S0,S0,0 )
# define pon( l,r ) parse_make( compile_on,l,r,P0,S0,S0,0 )
# define prule( s,p ) parse_make( compile_rule,p,P0,P0,s,S0,0 )
# define prules( l,r ) parse_make( compile_rules,l,r,P0,S0,S0,0 )
# define pset( l,r,a ) parse_make( compile_set,l,r,P0,S0,S0,a )
# define pset1( l,r,t,a ) parse_make( compile_settings,l,r,t,S0,S0,a )
# define psetc( s,p,a,l ) parse_make( compile_setcomp,p,a,P0,s,S0,l )
# define psete( s,l,s1,f ) parse_make( compile_setexec,l,P0,P0,s,s1,f )
# define pswitch( l,r ) parse_make( compile_switch,l,r,P0,S0,S0,0 )
# define pwhile( l,r ) parse_make( compile_while,l,r,P0,S0,S0,0 )
# define pnode( l,r ) parse_make( F0,l,r,P0,S0,S0,0 )
# define psnode( s,l ) parse_make( F0,l,P0,P0,s,S0,0 )
#define yyclearin yychar = -1
#define yyerrok yyerrflag = 0
extern int yychar;
extern int yyerrflag;
#ifndef YYMAXDEPTH
#define YYMAXDEPTH 150
#endif
#ifndef YYSTYPE
#define YYSTYPE long
#endif
YYSTYPE yylval, yyval;
typedef int yytabelem;
# define YYERRCODE 256
static const yytabelem yyexca[] ={
-1, 0,
291, 14,
-2, 1,
-1, 1,
0, -1,
-2, 0,
-1, 3,
291, 14,
-2, 5,
-1, 4,
291, 13,
-2, 56,
-1, 5,
299, 8,
-2, 14,
-1, 7,
264, 56,
265, 56,
272, 56,
300, 56,
-2, 58,
-1, 63,
299, 8,
-2, 14,
-1, 77,
299, 8,
-2, 14,
-1, 78,
299, 8,
-2, 14,
-1, 92,
291, 14,
-2, 8,
-1, 139,
299, 8,
-2, 14,
-1, 140,
291, 14,
-2, 8,
};
# define YYNPROD 74
# define YYLAST 301
static const yytabelem yyact[]={
18, 149, 17, 128, 79, 18, 18, 61, 10, 12,
152, 150, 6, 36, 13, 16, 131, 18, 9, 17,
11, 91, 130, 14, 5, 10, 12, 139, 7, 6,
4, 13, 16, 42, 42, 9, 129, 11, 126, 53,
14, 5, 65, 70, 71, 7, 113, 65, 70, 71,
66, 67, 64, 68, 69, 66, 67, 64, 68, 69,
65, 70, 71, 40, 134, 77, 62, 41, 66, 67,
64, 68, 69, 18, 88, 36, 45, 85, 18, 97,
74, 72, 73, 87, 86, 78, 72, 73, 84, 83,
141, 137, 100, 119, 120, 81, 59, 31, 63, 72,
73, 42, 30, 50, 31, 32, 42, 138, 95, 30,
92, 33, 32, 60, 65, 70, 71, 55, 33, 65,
54, 29, 66, 67, 64, 68, 69, 66, 67, 64,
68, 69, 66, 67, 140, 68, 69, 56, 142, 117,
39, 8, 98, 22, 8, 23, 8, 3, 26, 27,
28, 24, 2, 15, 20, 19, 25, 46, 82, 34,
89, 37, 52, 43, 35, 48, 51, 21, 99, 151,
143, 118, 47, 116, 49, 1, 0, 0, 57, 58,
0, 0, 0, 0, 0, 0, 0, 8, 0, 90,
0, 0, 0, 0, 80, 0, 0, 0, 0, 0,
93, 0, 0, 0, 8, 94, 0, 101, 0, 96,
0, 0, 0, 0, 0, 0, 0, 0, 8, 8,
0, 114, 115, 0, 112, 0, 38, 0, 0, 0,
0, 0, 122, 8, 0, 0, 123, 0, 0, 121,
0, 44, 127, 0, 0, 0, 124, 125, 0, 0,
0, 0, 0, 0, 0, 0, 0, 8, 0, 0,
0, 0, 0, 136, 132, 0, 133, 75, 76, 135,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8, 8, 8, 146, 147, 144, 0, 145, 0, 148,
0, 102, 103, 104, 105, 106, 107, 108, 109, 110,
111 };
static const yytabelem yypact[]={
-255, -1000, -1000, -255, -1000, -255, -1000, -1000, -166, -1000,
-210, -1000, -194, -1000, -194, -215, -267, -1000, -1000, -1000,
-165, -267, -260, -1000, -1000, -145, -148, -127, -1000, -1000,
-1000, -1000, -1000, -172, -152, -293, -1000, -230, -198, -203,
-194, -194, -1000, -231, -211, -296, -272, -205, -266, -155,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -157, -159, -1000,
-1000, -204, -184, -255, -194, -194, -194, -194, -194, -194,
-194, -194, -194, -194, -1000, -1000, -216, -255, -255, -122,
-1000, -182, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -179,
-1000, -267, -255, -1000, -1000, -1000, -1000, -1000, -261, -184,
-297, -263, -134, -134, -1000, -1000, -1000, -1000, -139, -139,
-144, -144, -1000, -1000, -277, -283, -272, -1000, -232, -1000,
-1000, -1000, -199, -1000, -158, -269, -1000, -1000, -130, -188,
-1000, -1000, -1000, -124, -1000, -1000, -1000, -1000, -1000, -255,
-255, -272, -1000, -300, -1000, -1000, -288, -1000, -1000, -1000,
-1000, -289, -1000 };
static const yytabelem yypgo[]={
0, 175, 151, 143, 145, 147, 149, 174, 173, 148,
153, 140, 150, 142, 226, 172, 171, 170, 169, 168,
167, 165, 160, 158 };
static const yytabelem yyr1[]={
0, 1, 1, 3, 3, 2, 2, 2, 4, 7,
7, 8, 8, 10, 10, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 17,
18, 5, 12, 12, 12, 12, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
13, 13, 19, 9, 9, 6, 20, 20, 11, 21,
11, 22, 22, 22, 15, 15, 23, 23, 23, 23,
23, 23, 16, 16 };
static const yytabelem yyr2[]={
0, 0, 3, 3, 3, 3, 5, 11, 1, 5,
3, 7, 1, 3, 1, 7, 7, 7, 9, 13,
7, 17, 11, 11, 11, 11, 15, 11, 7, 1,
1, 19, 3, 3, 3, 5, 3, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 5, 7,
1, 5, 9, 3, 7, 3, 1, 5, 3, 1,
9, 5, 9, 9, 1, 5, 3, 3, 3, 3,
3, 3, 1, 5 };
static const yytabelem yychk[]={
-1000, -1, -2, -5, 285, 296, 284, 300, -11, 290,
280, 292, 281, 286, 295, -10, 287, 274, 272, -2,
-6, -20, -3, -4, -2, -6, -9, -6, -12, 287,
268, 263, 271, 277, -6, -10, 285, -6, -14, -11,
257, 261, 300, -6, -14, 291, -11, -15, -21, -7,
268, -4, -11, 299, 265, 265, 264, -6, -6, 268,
265, 300, 296, 296, 268, 258, 266, 267, 269, 270,
259, 260, 297, 298, 283, -14, -14, 296, 296, 300,
-5, 300, -23, 294, 293, 282, 289, 288, 279, -22,
-11, 287, 265, -6, -9, 265, -12, 283, -13, -19,
276, -3, -14, -14, -14, -14, -14, -14, -14, -14,
-14, -14, -6, 262, -3, -3, -8, 261, -16, 275,
273, -9, -11, -3, -6, -6, 299, -13, 300, 299,
299, 299, -5, -9, 296, -6, -11, 290, 265, 296,
264, 278, 262, -17, -9, -6, -3, -3, -5, 301,
299, -18, 299 };
static const yytabelem yydef[]={
-2, -2, 2, -2, -2, -2, 56, -2, 0, 56,
14, 56, 0, 56, 0, 0, 0, 64, 59, 6,
8, 55, 0, 3, 4, 0, 0, 53, 56, 56,
32, 33, 34, 0, 0, 0, 13, 0, 0, 36,
0, 0, 58, 0, 0, 0, 14, 0, 0, 0,
56, 10, 57, 15, 16, 17, 56, 0, 0, 35,
20, 0, 50, -2, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 56, 48, 0, -2, -2, 12,
28, 72, 65, 66, 67, 68, 69, 70, 71, 0,
56, 0, -2, 9, 54, 18, 56, 56, 0, 50,
0, 0, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 49, 0, 0, 14, 56, 0, 56,
60, 61, 0, 7, 0, 0, 22, 51, 0, 23,
24, 25, 27, 0, 29, 73, 56, 56, 19, -2,
-2, 14, 11, 0, 62, 63, 0, 52, 26, 30,
21, 0, 31 };
typedef struct { char *t_name; int t_val; } yytoktype;
#ifndef YYDEBUG
# define YYDEBUG 0 /* don't allow debugging */
#endif
#if YYDEBUG
yytoktype yytoks[] =
{
"_BANG_t", 257,
"_BANG_EQUALS_t", 258,
"_AMPER_t", 259,
"_AMPERAMPER_t", 260,
"_LPAREN_t", 261,
"_RPAREN_t", 262,
"_PLUS_EQUALS_t", 263,
"_COLON_t", 264,
"_SEMIC_t", 265,
"_LANGLE_t", 266,
"_LANGLE_EQUALS_t", 267,
"_EQUALS_t", 268,
"_RANGLE_t", 269,
"_RANGLE_EQUALS_t", 270,
"_QUESTION_EQUALS_t", 271,
"_LBRACKET_t", 272,
"_RBRACKET_t", 273,
"ACTIONS_t", 274,
"BIND_t", 275,
"CASE_t", 276,
"DEFAULT_t", 277,
"ELSE_t", 278,
"EXISTING_t", 279,
"FOR_t", 280,
"IF_t", 281,
"IGNORE_t", 282,
"IN_t", 283,
"INCLUDE_t", 284,
"LOCAL_t", 285,
"MODULE_t", 286,
"ON_t", 287,
"PIECEMEAL_t", 288,
"QUIETLY_t", 289,
"RETURN_t", 290,
"RULE_t", 291,
"SWITCH_t", 292,
"TOGETHER_t", 293,
"UPDATED_t", 294,
"WHILE_t", 295,
"_LBRACE_t", 296,
"_BAR_t", 297,
"_BARBAR_t", 298,
"_RBRACE_t", 299,
"ARG", 300,
"STRING", 301,
"-unknown-", -1 /* ends search */
};
char * yyreds[] =
{
"-no such reduction-",
"run : /* empty */",
"run : rules",
"block : null",
"block : rules",
"rules : rule",
"rules : rule rules",
"rules : LOCAL_t list assign_list_opt _SEMIC_t block",
"null : /* empty */",
"assign_list_opt : _EQUALS_t list",
"assign_list_opt : null",
"arglist_opt : _LPAREN_t lol _RPAREN_t",
"arglist_opt : /* empty */",
"local_opt : LOCAL_t",
"local_opt : /* empty */",
"rule : _LBRACE_t block _RBRACE_t",
"rule : INCLUDE_t list _SEMIC_t",
"rule : ARG lol _SEMIC_t",
"rule : arg assign list _SEMIC_t",
"rule : arg ON_t list assign list _SEMIC_t",
"rule : RETURN_t list _SEMIC_t",
"rule : FOR_t local_opt ARG IN_t list _LBRACE_t block _RBRACE_t",
"rule : SWITCH_t list _LBRACE_t cases _RBRACE_t",
"rule : IF_t expr _LBRACE_t block _RBRACE_t",
"rule : MODULE_t list _LBRACE_t block _RBRACE_t",
"rule : WHILE_t expr _LBRACE_t block _RBRACE_t",
"rule : IF_t expr _LBRACE_t block _RBRACE_t ELSE_t rule",
"rule : local_opt RULE_t ARG arglist_opt rule",
"rule : ON_t arg rule",
"rule : ACTIONS_t eflags ARG bindlist _LBRACE_t",
"rule : ACTIONS_t eflags ARG bindlist _LBRACE_t STRING",
"rule : ACTIONS_t eflags ARG bindlist _LBRACE_t STRING _RBRACE_t",
"assign : _EQUALS_t",
"assign : _PLUS_EQUALS_t",
"assign : _QUESTION_EQUALS_t",
"assign : DEFAULT_t _EQUALS_t",
"expr : arg",
"expr : expr _EQUALS_t expr",
"expr : expr _BANG_EQUALS_t expr",
"expr : expr _LANGLE_t expr",
"expr : expr _LANGLE_EQUALS_t expr",
"expr : expr _RANGLE_t expr",
"expr : expr _RANGLE_EQUALS_t expr",
"expr : expr _AMPER_t expr",
"expr : expr _AMPERAMPER_t expr",
"expr : expr _BAR_t expr",
"expr : expr _BARBAR_t expr",
"expr : arg IN_t list",
"expr : _BANG_t expr",
"expr : _LPAREN_t expr _RPAREN_t",
"cases : /* empty */",
"cases : case cases",
"case : CASE_t ARG _COLON_t block",
"lol : list",
"lol : list _COLON_t lol",
"list : listp",
"listp : /* empty */",
"listp : listp arg",
"arg : ARG",
"arg : _LBRACKET_t",
"arg : _LBRACKET_t func _RBRACKET_t",
"func : arg lol",
"func : ON_t arg arg lol",
"func : ON_t arg RETURN_t list",
"eflags : /* empty */",
"eflags : eflags eflag",
"eflag : UPDATED_t",
"eflag : TOGETHER_t",
"eflag : IGNORE_t",
"eflag : QUIETLY_t",
"eflag : PIECEMEAL_t",
"eflag : EXISTING_t",
"bindlist : /* empty */",
"bindlist : BIND_t list",
};
#endif /* YYDEBUG */
/*
* *****************************************************************
* * *
* * Copyright Compaq Computer Corporation, 2000 *
* * *
* * The software contained on this media is proprietary to *
* * and embodies the confidential technology of Compaq *
* * Computer Corporation. Possession, use, duplication or *
* * dissemination of the software and media is authorized only *
* * pursuant to a valid written license from Compaq Computer *
* * Corporation. *
* * *
* * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure *
* * by the U.S. Government is subject to restrictions as set *
* * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, *
* * or in FAR 52.227-19, as applicable. *
* * *
* *****************************************************************
*/
/*
* HISTORY
*/
/*
* @(#)$RCSfile$ $Revision$ (DEC) $Date$
*/
/*
** Skeleton parser driver for yacc output
*/
/* external references for c++ and ANSI C
* Define YY_NOPROTO to suppress the prototype declarations
* GNUC and DECC define __STDC__ differently
*/
#ifdef __GNUC__
#if !__STDC__
#define YY_NOPROTO
#endif /* __STDC__ */
#elif !defined(__STDC__) && !defined (__cplusplus)
#define YY_NOPROTO
#endif /* __STDC__ */
/* Disable array out of bounds info messages */
#if defined (__DECC)
#pragma message disable (badsubscript,subscrbounds,unreach)
#endif
#ifndef YY_NOPROTO
#if defined (__cplusplus)
extern "C" {
extern void yyerror(char *);
extern int yylex();
#else /* __cplusplus */
extern int yylex(void);
#endif /* __cplusplus */
#if defined (__cplusplus)
}
#endif /* __cplusplus */
#endif /* YY_NOPROTO */
/*
** yacc user known macros and defines
*/
#ifdef YYSPLIT
# define YYERROR return(-2)
#else
# define YYERROR goto yyerrlab
#endif
#define YYACCEPT return(0)
#define YYABORT return(1)
#define YYBACKUP( newtoken, newvalue )\
{\
if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\
{\
yyerror( "syntax error - cannot backup" );\
goto yyerrlab;\
}\
yychar = newtoken;\
yystate = *yyps;\
yylval = newvalue;\
goto yynewstate;\
}
#define YYRECOVERING() (!!yyerrflag)
#ifndef YYDEBUG
# define YYDEBUG 1 /* make debugging available */
#endif
/*
** user known globals
*/
int yydebug; /* set to 1 to get debugging */
/*
** driver internal defines
*/
#define YYFLAG (-1000)
#ifdef YYSPLIT
# define YYSCODE { \
extern int (*yyf[])(); \
register int yyret; \
if (yyf[yytmp]) \
if ((yyret=(*yyf[yytmp])()) == -2) \
goto yyerrlab; \
else if (yyret>=0) return(yyret); \
}
#endif
/*
** local variables used by the parser
* these should be static in order to support
* multiple parsers in a single executable program. POSIX 1003.2-1993
*/
static YYSTYPE yyv[ YYMAXDEPTH ]; /* value stack */
static int yys[ YYMAXDEPTH ]; /* state stack */
static YYSTYPE *yypv; /* top of value stack */
static YYSTYPE *yypvt; /* top of value stack for $vars */
static int *yyps; /* top of state stack */
static int yystate; /* current state */
static int yytmp; /* extra var (lasts between blocks) */
/*
** global variables used by the parser - renamed as a result of -p
*/
int yynerrs; /* number of errors */
int yyerrflag; /* error recovery flag */
int yychar; /* current input token number */
/*
** yyparse - return 0 if worked, 1 if syntax error not recovered from
*/
int
yyparse()
{
/*
** Initialize externals - yyparse may be called more than once
*/
yypv = &yyv[-1];
yyps = &yys[-1];
yystate = 0;
yytmp = 0;
yynerrs = 0;
yyerrflag = 0;
yychar = -1;
goto yystack;
{
register YYSTYPE *yy_pv; /* top of value stack */
register int *yy_ps; /* top of state stack */
register int yy_state; /* current state */
register int yy_n; /* internal state number info */
/*
** get globals into registers.
** branch to here only if YYBACKUP was called.
*/
yynewstate:
yy_pv = yypv;
yy_ps = yyps;
yy_state = yystate;
goto yy_newstate;
/*
** get globals into registers.
** either we just started, or we just finished a reduction
*/
yystack:
yy_pv = yypv;
yy_ps = yyps;
yy_state = yystate;
/*
** top of for (;;) loop while no reductions done
*/
yy_stack:
/*
** put a state and value onto the stacks
*/
#if YYDEBUG
/*
** if debugging, look up token value in list of value vs.
** name pairs. 0 and negative (-1) are special values.
** Note: linear search is used since time is not a real
** consideration while debugging.
*/
if ( yydebug )
{
register int yy_i;
printf( "State %d, token ", yy_state );
if ( yychar == 0 )
printf( "end-of-file\n" );
else if ( yychar < 0 )
printf( "-none-\n" );
else
{
for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
yy_i++ )
{
if ( yytoks[yy_i].t_val == yychar )
break;
}
printf( "%s\n", yytoks[yy_i].t_name );
}
}
#endif /* YYDEBUG */
if ( ++yy_ps >= &yys[ YYMAXDEPTH ] ) /* room on stack? */
{
yyerror( "yacc stack overflow" );
YYABORT;
}
*yy_ps = yy_state;
*++yy_pv = yyval;
/*
** we have a new state - find out what to do
*/
yy_newstate:
if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG )
goto yydefault; /* simple state */
#if YYDEBUG
/*
** if debugging, need to mark whether new token grabbed
*/
yytmp = yychar < 0;
#endif
if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
yychar = 0; /* reached EOF */
#if YYDEBUG
if ( yydebug && yytmp )
{
register int yy_i;
printf( "Received token " );
if ( yychar == 0 )
printf( "end-of-file\n" );
else if ( yychar < 0 )
printf( "-none-\n" );
else
{
for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
yy_i++ )
{
if ( yytoks[yy_i].t_val == yychar )
break;
}
printf( "%s\n", yytoks[yy_i].t_name );
}
}
#endif /* YYDEBUG */
if ( ( ( yy_n += yychar ) < 0 ) ||
( yy_n >= YYLAST ) ||
(yyact[yy_n ] < 0))
goto yydefault;
if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar ) /*valid shift*/
{
yychar = -1;
yyval = yylval;
yy_state = yy_n;
if ( yyerrflag > 0 )
yyerrflag--;
goto yy_stack;
}
yydefault:
if ( ( yy_n = yydef[ yy_state ] ) == -2 )
{
#if YYDEBUG
yytmp = yychar < 0;
#endif
if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
yychar = 0; /* reached EOF */
#if YYDEBUG
if ( yydebug && yytmp )
{
register int yy_i;
printf( "Received token " );
if ( yychar == 0 )
printf( "end-of-file\n" );
else if ( yychar < 0 )
printf( "-none-\n" );
else
{
for ( yy_i = 0;
yytoks[yy_i].t_val >= 0;
yy_i++ )
{
if ( yytoks[yy_i].t_val
== yychar )
{
break;
}
}
printf( "%s\n", yytoks[yy_i].t_name );
}
}
#endif /* YYDEBUG */
/*
** look through exception table
*/
{
register const int *yyxi = yyexca;
while ( ( *yyxi != -1 ) ||
( yyxi[1] != yy_state ) )
{
yyxi += 2;
}
while ( ( *(yyxi += 2) >= 0 ) &&
( *yyxi != yychar ) )
;
if ( ( yy_n = yyxi[1] ) < 0 )
YYACCEPT;
}
}
/*
** check for syntax error
*/
if ( yy_n == 0 ) /* have an error */
{
/* no worry about speed here! */
switch ( yyerrflag )
{
case 0: /* new error */
yyerror( "syntax error" );
goto skip_init;
yyerrlab:
/*
** get globals into registers.
** we have a user generated syntax type error
*/
yy_pv = yypv;
yy_ps = yyps;
yy_state = yystate;
yynerrs++;
skip_init:
case 1:
case 2: /* incompletely recovered error */
/* try again... */
yyerrflag = 3;
/*
** find state where "error" is a legal
** shift action
*/
while ( yy_ps >= yys )
{
yy_n = yypact[ *yy_ps ] + YYERRCODE;
if ( yy_n >= 0 && yy_n < YYLAST &&
yychk[yyact[yy_n]] == YYERRCODE) {
/*
** simulate shift of "error"
*/
yy_state = yyact[ yy_n ];
goto yy_stack;
}
/*
** current state has no shift on
** "error", pop stack
*/
#if YYDEBUG
# define _POP_ "Error recovery pops state %d, uncovers state %d\n"
if ( yydebug )
printf( _POP_, *yy_ps,
yy_ps[-1] );
# undef _POP_
#endif
yy_ps--;
yy_pv--;
}
/*
** there is no state on stack with "error" as
** a valid shift. give up.
*/
YYABORT;
case 3: /* no shift yet; eat a token */
#if YYDEBUG
/*
** if debugging, look up token in list of
** pairs. 0 and negative shouldn't occur,
** but since timing doesn't matter when
** debugging, it doesn't hurt to leave the
** tests here.
*/
if ( yydebug )
{
register int yy_i;
printf( "Error recovery discards " );
if ( yychar == 0 )
printf( "token end-of-file\n" );
else if ( yychar < 0 )
printf( "token -none-\n" );
else
{
for ( yy_i = 0;
yytoks[yy_i].t_val >= 0;
yy_i++ )
{
if ( yytoks[yy_i].t_val
== yychar )
{
break;
}
}
printf( "token %s\n",
yytoks[yy_i].t_name );
}
}
#endif /* YYDEBUG */
if ( yychar == 0 ) /* reached EOF. quit */
YYABORT;
yychar = -1;
goto yy_newstate;
}
}/* end if ( yy_n == 0 ) */
/*
** reduction by production yy_n
** put stack tops, etc. so things right after switch
*/
#if YYDEBUG
/*
** if debugging, print the string that is the user's
** specification of the reduction which is just about
** to be done.
*/
if ( yydebug )
printf( "Reduce by (%d) \"%s\"\n",
yy_n, yyreds[ yy_n ] );
#endif
yytmp = yy_n; /* value to switch over */
yypvt = yy_pv; /* $vars top of value stack */
/*
** Look in goto table for next state
** Sorry about using yy_state here as temporary
** register variable, but why not, if it works...
** If yyr2[ yy_n ] doesn't have the low order bit
** set, then there is no action to be done for
** this reduction. So, no saving & unsaving of
** registers done. The only difference between the
** code just after the if and the body of the if is
** the goto yy_stack in the body. This way the test
** can be made before the choice of what to do is needed.
*/
{
/* length of production doubled with extra bit */
register int yy_len = yyr2[ yy_n ];
if ( !( yy_len & 01 ) )
{
yy_len >>= 1;
yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
*( yy_ps -= yy_len ) + 1;
if ( yy_state >= YYLAST ||
yychk[ yy_state =
yyact[ yy_state ] ] != -yy_n )
{
yy_state = yyact[ yypgo[ yy_n ] ];
}
goto yy_stack;
}
yy_len >>= 1;
yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
*( yy_ps -= yy_len ) + 1;
if ( yy_state >= YYLAST ||
yychk[ yy_state = yyact[ yy_state ] ] != -yy_n )
{
yy_state = yyact[ yypgo[ yy_n ] ];
}
}
/* save until reenter driver code */
yystate = yy_state;
yyps = yy_ps;
yypv = yy_pv;
}
/*
** code supplied by user is placed in this switch
*/
switch(yytmp){
case 2: /* run : rules */
# line 142 "jamgram.y"
{ parse_save( yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 3: /* block : null */
# line 153 "jamgram.y"
{ yyval.parse = yypvt[-0].parse; } /*NOTREACHED*/ break;
case 4: /* block : rules */
# line 155 "jamgram.y"
{ yyval.parse = yypvt[-0].parse; } /*NOTREACHED*/ break;
case 5: /* rules : rule */
# line 159 "jamgram.y"
{ yyval.parse = yypvt[-0].parse; } /*NOTREACHED*/ break;
case 6: /* rules : rule rules */
# line 161 "jamgram.y"
{ yyval.parse = prules( yypvt[-1].parse, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 7: /* rules : LOCAL_t list assign_list_opt _SEMIC_t block */
# line 163 "jamgram.y"
{ yyval.parse = plocal( yypvt[-3].parse, yypvt[-2].parse, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 8: /* null : Empty */
# line 167 "jamgram.y"
{ yyval.parse = pnull(); } /*NOTREACHED*/ break;
case 9: /* assign_list_opt : _EQUALS_t list */
# line 171 "jamgram.y"
{ yyval.parse = yypvt[-0].parse; yyval.number = ASSIGN_SET; } /*NOTREACHED*/ break;
case 10: /* assign_list_opt : null */
# line 173 "jamgram.y"
{ yyval.parse = yypvt[-0].parse; yyval.number = ASSIGN_APPEND; } /*NOTREACHED*/ break;
case 11: /* arglist_opt : _LPAREN_t lol _RPAREN_t */
# line 177 "jamgram.y"
{ yyval.parse = yypvt[-1].parse; } /*NOTREACHED*/ break;
case 12: /* arglist_opt : Empty */
# line 179 "jamgram.y"
{ yyval.parse = P0; } /*NOTREACHED*/ break;
case 13: /* local_opt : LOCAL_t */
# line 183 "jamgram.y"
{ yyval.number = 1; } /*NOTREACHED*/ break;
case 14: /* local_opt : Empty */
# line 185 "jamgram.y"
{ yyval.number = 0; } /*NOTREACHED*/ break;
case 15: /* rule : _LBRACE_t block _RBRACE_t */
# line 189 "jamgram.y"
{ yyval.parse = yypvt[-1].parse; } /*NOTREACHED*/ break;
case 16: /* rule : INCLUDE_t list _SEMIC_t */
# line 191 "jamgram.y"
{ yyval.parse = pincl( yypvt[-1].parse ); } /*NOTREACHED*/ break;
case 17: /* rule : ARG lol _SEMIC_t */
# line 193 "jamgram.y"
{ yyval.parse = prule( yypvt[-2].string, yypvt[-1].parse ); } /*NOTREACHED*/ break;
case 18: /* rule : arg assign list _SEMIC_t */
# line 195 "jamgram.y"
{ yyval.parse = pset( yypvt[-3].parse, yypvt[-1].parse, yypvt[-2].number ); } /*NOTREACHED*/ break;
case 19: /* rule : arg ON_t list assign list _SEMIC_t */
# line 197 "jamgram.y"
{ yyval.parse = pset1( yypvt[-5].parse, yypvt[-3].parse, yypvt[-1].parse, yypvt[-2].number ); } /*NOTREACHED*/ break;
case 20: /* rule : RETURN_t list _SEMIC_t */
# line 199 "jamgram.y"
{ yyval.parse = yypvt[-1].parse; } /*NOTREACHED*/ break;
case 21: /* rule : FOR_t local_opt ARG IN_t list _LBRACE_t block _RBRACE_t */
# line 201 "jamgram.y"
{ yyval.parse = pfor( yypvt[-5].string, yypvt[-3].parse, yypvt[-1].parse, yypvt[-6].number ); } /*NOTREACHED*/ break;
case 22: /* rule : SWITCH_t list _LBRACE_t cases _RBRACE_t */
# line 203 "jamgram.y"
{ yyval.parse = pswitch( yypvt[-3].parse, yypvt[-1].parse ); } /*NOTREACHED*/ break;
case 23: /* rule : IF_t expr _LBRACE_t block _RBRACE_t */
# line 205 "jamgram.y"
{ yyval.parse = pif( yypvt[-3].parse, yypvt[-1].parse, pnull() ); } /*NOTREACHED*/ break;
case 24: /* rule : MODULE_t list _LBRACE_t block _RBRACE_t */
# line 207 "jamgram.y"
{ yyval.parse = pmodule( yypvt[-3].parse, yypvt[-1].parse ); } /*NOTREACHED*/ break;
case 25: /* rule : WHILE_t expr _LBRACE_t block _RBRACE_t */
# line 209 "jamgram.y"
{ yyval.parse = pwhile( yypvt[-3].parse, yypvt[-1].parse ); } /*NOTREACHED*/ break;
case 26: /* rule : IF_t expr _LBRACE_t block _RBRACE_t ELSE_t rule */
# line 211 "jamgram.y"
{ yyval.parse = pif( yypvt[-5].parse, yypvt[-3].parse, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 27: /* rule : local_opt RULE_t ARG arglist_opt rule */
# line 213 "jamgram.y"
{ yyval.parse = psetc( yypvt[-2].string, yypvt[-0].parse, yypvt[-1].parse, yypvt[-4].number ); } /*NOTREACHED*/ break;
case 28: /* rule : ON_t arg rule */
# line 215 "jamgram.y"
{ yyval.parse = pon( yypvt[-1].parse, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 29: /* rule : ACTIONS_t eflags ARG bindlist _LBRACE_t */
# line 217 "jamgram.y"
{ yymode( SCAN_STRING ); } /*NOTREACHED*/ break;
case 30: /* rule : ACTIONS_t eflags ARG bindlist _LBRACE_t STRING */
# line 219 "jamgram.y"
{ yymode( SCAN_NORMAL ); } /*NOTREACHED*/ break;
case 31: /* rule : ACTIONS_t eflags ARG bindlist _LBRACE_t STRING _RBRACE_t */
# line 221 "jamgram.y"
{ yyval.parse = psete( yypvt[-6].string,yypvt[-5].parse,yypvt[-2].string,yypvt[-7].number ); } /*NOTREACHED*/ break;
case 32: /* assign : _EQUALS_t */
# line 229 "jamgram.y"
{ yyval.number = ASSIGN_SET; } /*NOTREACHED*/ break;
case 33: /* assign : _PLUS_EQUALS_t */
# line 231 "jamgram.y"
{ yyval.number = ASSIGN_APPEND; } /*NOTREACHED*/ break;
case 34: /* assign : _QUESTION_EQUALS_t */
# line 233 "jamgram.y"
{ yyval.number = ASSIGN_DEFAULT; } /*NOTREACHED*/ break;
case 35: /* assign : DEFAULT_t _EQUALS_t */
# line 235 "jamgram.y"
{ yyval.number = ASSIGN_DEFAULT; } /*NOTREACHED*/ break;
case 36: /* expr : arg */
# line 242 "jamgram.y"
{ yyval.parse = peval( EXPR_EXISTS, yypvt[-0].parse, pnull() ); } /*NOTREACHED*/ break;
case 37: /* expr : expr _EQUALS_t expr */
# line 244 "jamgram.y"
{ yyval.parse = peval( EXPR_EQUALS, yypvt[-2].parse, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 38: /* expr : expr _BANG_EQUALS_t expr */
# line 246 "jamgram.y"
{ yyval.parse = peval( EXPR_NOTEQ, yypvt[-2].parse, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 39: /* expr : expr _LANGLE_t expr */
# line 248 "jamgram.y"
{ yyval.parse = peval( EXPR_LESS, yypvt[-2].parse, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 40: /* expr : expr _LANGLE_EQUALS_t expr */
# line 250 "jamgram.y"
{ yyval.parse = peval( EXPR_LESSEQ, yypvt[-2].parse, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 41: /* expr : expr _RANGLE_t expr */
# line 252 "jamgram.y"
{ yyval.parse = peval( EXPR_MORE, yypvt[-2].parse, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 42: /* expr : expr _RANGLE_EQUALS_t expr */
# line 254 "jamgram.y"
{ yyval.parse = peval( EXPR_MOREEQ, yypvt[-2].parse, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 43: /* expr : expr _AMPER_t expr */
# line 256 "jamgram.y"
{ yyval.parse = peval( EXPR_AND, yypvt[-2].parse, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 44: /* expr : expr _AMPERAMPER_t expr */
# line 258 "jamgram.y"
{ yyval.parse = peval( EXPR_AND, yypvt[-2].parse, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 45: /* expr : expr _BAR_t expr */
# line 260 "jamgram.y"
{ yyval.parse = peval( EXPR_OR, yypvt[-2].parse, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 46: /* expr : expr _BARBAR_t expr */
# line 262 "jamgram.y"
{ yyval.parse = peval( EXPR_OR, yypvt[-2].parse, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 47: /* expr : arg IN_t list */
# line 264 "jamgram.y"
{ yyval.parse = peval( EXPR_IN, yypvt[-2].parse, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 48: /* expr : _BANG_t expr */
# line 266 "jamgram.y"
{ yyval.parse = peval( EXPR_NOT, yypvt[-0].parse, pnull() ); } /*NOTREACHED*/ break;
case 49: /* expr : _LPAREN_t expr _RPAREN_t */
# line 268 "jamgram.y"
{ yyval.parse = yypvt[-1].parse; } /*NOTREACHED*/ break;
case 50: /* cases : Empty */
# line 279 "jamgram.y"
{ yyval.parse = P0; } /*NOTREACHED*/ break;
case 51: /* cases : case cases */
# line 281 "jamgram.y"
{ yyval.parse = pnode( yypvt[-1].parse, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 52: /* case : CASE_t ARG _COLON_t block */
# line 285 "jamgram.y"
{ yyval.parse = psnode( yypvt[-2].string, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 53: /* lol : list */
# line 294 "jamgram.y"
{ yyval.parse = pnode( P0, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 54: /* lol : list _COLON_t lol */
# line 296 "jamgram.y"
{ yyval.parse = pnode( yypvt[-0].parse, yypvt[-2].parse ); } /*NOTREACHED*/ break;
case 55: /* list : listp */
# line 306 "jamgram.y"
{ yyval.parse = yypvt[-0].parse; yymode( SCAN_NORMAL ); } /*NOTREACHED*/ break;
case 56: /* listp : Empty */
# line 310 "jamgram.y"
{ yyval.parse = pnull(); yymode( SCAN_PUNCT ); } /*NOTREACHED*/ break;
case 57: /* listp : listp arg */
# line 312 "jamgram.y"
{ yyval.parse = pappend( yypvt[-1].parse, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 58: /* arg : ARG */
# line 316 "jamgram.y"
{ yyval.parse = plist( yypvt[-0].string ); } /*NOTREACHED*/ break;
case 59: /* arg : _LBRACKET_t */
# line 317 "jamgram.y"
{ yymode( SCAN_NORMAL ); } /*NOTREACHED*/ break;
case 60: /* arg : _LBRACKET_t func _RBRACKET_t */
# line 318 "jamgram.y"
{ yyval.parse = yypvt[-1].parse; } /*NOTREACHED*/ break;
case 61: /* func : arg lol */
# line 327 "jamgram.y"
{ yyval.parse = prule( yypvt[-1].string, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 62: /* func : ON_t arg arg lol */
# line 329 "jamgram.y"
{ yyval.parse = pon( yypvt[-2].parse, prule( yypvt[-1].string, yypvt[-0].parse ) ); } /*NOTREACHED*/ break;
case 63: /* func : ON_t arg RETURN_t list */
# line 331 "jamgram.y"
{ yyval.parse = pon( yypvt[-2].parse, yypvt[-0].parse ); } /*NOTREACHED*/ break;
case 64: /* eflags : Empty */
# line 341 "jamgram.y"
{ yyval.number = 0; } /*NOTREACHED*/ break;
case 65: /* eflags : eflags eflag */
# line 343 "jamgram.y"
{ yyval.number = yypvt[-1].number | yypvt[-0].number; } /*NOTREACHED*/ break;
case 66: /* eflag : UPDATED_t */
# line 347 "jamgram.y"
{ yyval.number = EXEC_UPDATED; } /*NOTREACHED*/ break;
case 67: /* eflag : TOGETHER_t */
# line 349 "jamgram.y"
{ yyval.number = EXEC_TOGETHER; } /*NOTREACHED*/ break;
case 68: /* eflag : IGNORE_t */
# line 351 "jamgram.y"
{ yyval.number = EXEC_IGNORE; } /*NOTREACHED*/ break;
case 69: /* eflag : QUIETLY_t */
# line 353 "jamgram.y"
{ yyval.number = EXEC_QUIETLY; } /*NOTREACHED*/ break;
case 70: /* eflag : PIECEMEAL_t */
# line 355 "jamgram.y"
{ yyval.number = EXEC_PIECEMEAL; } /*NOTREACHED*/ break;
case 71: /* eflag : EXISTING_t */
# line 357 "jamgram.y"
{ yyval.number = EXEC_EXISTING; } /*NOTREACHED*/ break;
case 72: /* bindlist : Empty */
# line 366 "jamgram.y"
{ yyval.parse = pnull(); } /*NOTREACHED*/ break;
case 73: /* bindlist : BIND_t list */
# line 368 "jamgram.y"
{ yyval.parse = yypvt[-0].parse; } /*NOTREACHED*/ break;
}
goto yystack; /* reset registers in driver code */
}