initparse.c revision 250881
1250881Sjkim/* $FreeBSD: head/usr.bin/lex/initparse.c 250881 2013-05-21 19:32:35Z jkim $ */ 2250881Sjkim#ifndef lint 3250881Sjkimstatic const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; 4250881Sjkim#endif 5250881Sjkim 6250881Sjkim#define YYBYACC 1 7250881Sjkim#define YYMAJOR 1 8250881Sjkim#define YYMINOR 9 9250881Sjkim 10250881Sjkim#define YYEMPTY (-1) 11250881Sjkim#define yyclearin (yychar = YYEMPTY) 12250881Sjkim#define yyerrok (yyerrflag = 0) 13250881Sjkim#define YYRECOVERING() (yyerrflag != 0) 14250881Sjkim 15250881Sjkim#define YYPREFIX "yy" 16250881Sjkim 17250881Sjkim#define YYPURE 0 18250881Sjkim 19250881Sjkim#line 35 "parse.y" 20250881Sjkim/* Copyright (c) 1990 The Regents of the University of California. */ 21250881Sjkim/* All rights reserved. */ 22250881Sjkim 23250881Sjkim/* This code is derived from software contributed to Berkeley by */ 24250881Sjkim/* Vern Paxson. */ 25250881Sjkim 26250881Sjkim/* The United States Government has rights in this work pursuant */ 27250881Sjkim/* to contract no. DE-AC03-76SF00098 between the United States */ 28250881Sjkim/* Department of Energy and the University of California. */ 29250881Sjkim 30250881Sjkim/* This file is part of flex. */ 31250881Sjkim 32250881Sjkim/* Redistribution and use in source and binary forms, with or without */ 33250881Sjkim/* modification, are permitted provided that the following conditions */ 34250881Sjkim/* are met: */ 35250881Sjkim 36250881Sjkim/* 1. Redistributions of source code must retain the above copyright */ 37250881Sjkim/* notice, this list of conditions and the following disclaimer. */ 38250881Sjkim/* 2. Redistributions in binary form must reproduce the above copyright */ 39250881Sjkim/* notice, this list of conditions and the following disclaimer in the */ 40250881Sjkim/* documentation and/or other materials provided with the distribution. */ 41250881Sjkim 42250881Sjkim/* Neither the name of the University nor the names of its contributors */ 43250881Sjkim/* may be used to endorse or promote products derived from this software */ 44250881Sjkim/* without specific prior written permission. */ 45250881Sjkim 46250881Sjkim/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */ 47250881Sjkim/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */ 48250881Sjkim/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ 49250881Sjkim/* PURPOSE. */ 50250881Sjkim 51250881Sjkim#include "flexdef.h" 52250881Sjkim#include "tables.h" 53250881Sjkim 54250881Sjkimint pat, scnum, eps, headcnt, trailcnt, lastchar, i, rulelen; 55250881Sjkimint trlcontxt, xcluflg, currccl, cclsorted, varlength, variable_trail_rule; 56250881Sjkim 57250881Sjkimint *scon_stk; 58250881Sjkimint scon_stk_ptr; 59250881Sjkim 60250881Sjkimstatic int madeany = false; /* whether we've made the '.' character class */ 61250881Sjkimstatic int ccldot, cclany; 62250881Sjkimint previous_continued_action; /* whether the previous rule's action was '|' */ 63250881Sjkim 64250881Sjkim#define format_warn3(fmt, a1, a2) \ 65250881Sjkim do{ \ 66250881Sjkim char fw3_msg[MAXLINE];\ 67250881Sjkim snprintf( fw3_msg, MAXLINE,(fmt), (a1), (a2) );\ 68250881Sjkim warn( fw3_msg );\ 69250881Sjkim }while(0) 70250881Sjkim 71250881Sjkim/* Expand a POSIX character class expression. */ 72250881Sjkim#define CCL_EXPR(func) \ 73250881Sjkim do{ \ 74250881Sjkim int c; \ 75250881Sjkim for ( c = 0; c < csize; ++c ) \ 76250881Sjkim if ( isascii(c) && func(c) ) \ 77250881Sjkim ccladd( currccl, c ); \ 78250881Sjkim }while(0) 79250881Sjkim 80250881Sjkim/* negated class */ 81250881Sjkim#define CCL_NEG_EXPR(func) \ 82250881Sjkim do{ \ 83250881Sjkim int c; \ 84250881Sjkim for ( c = 0; c < csize; ++c ) \ 85250881Sjkim if ( !func(c) ) \ 86250881Sjkim ccladd( currccl, c ); \ 87250881Sjkim }while(0) 88250881Sjkim 89250881Sjkim/* While POSIX defines isblank(), it's not ANSI C. */ 90250881Sjkim#define IS_BLANK(c) ((c) == ' ' || (c) == '\t') 91250881Sjkim 92250881Sjkim/* On some over-ambitious machines, such as DEC Alpha's, the default 93250881Sjkim * token type is "long" instead of "int"; this leads to problems with 94250881Sjkim * declaring yylval in flexdef.h. But so far, all the yacc's I've seen 95250881Sjkim * wrap their definitions of YYSTYPE with "#ifndef YYSTYPE"'s, so the 96250881Sjkim * following should ensure that the default token type is "int". 97250881Sjkim */ 98250881Sjkim#define YYSTYPE int 99250881Sjkim 100250881Sjkim#line 99 "parse.c" 101250881Sjkim 102250881Sjkim#ifndef YYSTYPE 103250881Sjkimtypedef int YYSTYPE; 104250881Sjkim#endif 105250881Sjkim 106250881Sjkim/* compatibility with bison */ 107250881Sjkim#ifdef YYPARSE_PARAM 108250881Sjkim/* compatibility with FreeBSD */ 109250881Sjkim# ifdef YYPARSE_PARAM_TYPE 110250881Sjkim# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) 111250881Sjkim# else 112250881Sjkim# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) 113250881Sjkim# endif 114250881Sjkim#else 115250881Sjkim# define YYPARSE_DECL() yyparse(void) 116250881Sjkim#endif 117250881Sjkim 118250881Sjkim/* Parameters sent to lex. */ 119250881Sjkim#ifdef YYLEX_PARAM 120250881Sjkim# define YYLEX_DECL() yylex(void *YYLEX_PARAM) 121250881Sjkim# define YYLEX yylex(YYLEX_PARAM) 122250881Sjkim#else 123250881Sjkim# define YYLEX_DECL() yylex(void) 124250881Sjkim# define YYLEX yylex() 125250881Sjkim#endif 126250881Sjkim 127250881Sjkim/* Parameters sent to yyerror. */ 128250881Sjkim#ifndef YYERROR_DECL 129250881Sjkim#define YYERROR_DECL() yyerror(const char *s) 130250881Sjkim#endif 131250881Sjkim#ifndef YYERROR_CALL 132250881Sjkim#define YYERROR_CALL(msg) yyerror(msg) 133250881Sjkim#endif 134250881Sjkim 135250881Sjkimextern int YYPARSE_DECL(); 136250881Sjkim 137250881Sjkim#define CHAR 257 138250881Sjkim#define NUMBER 258 139250881Sjkim#define SECTEND 259 140250881Sjkim#define SCDECL 260 141250881Sjkim#define XSCDECL 261 142250881Sjkim#define NAME 262 143250881Sjkim#define PREVCCL 263 144250881Sjkim#define EOF_OP 264 145250881Sjkim#define OPTION_OP 265 146250881Sjkim#define OPT_OUTFILE 266 147250881Sjkim#define OPT_PREFIX 267 148250881Sjkim#define OPT_YYCLASS 268 149250881Sjkim#define OPT_HEADER 269 150250881Sjkim#define OPT_EXTRA_TYPE 270 151250881Sjkim#define OPT_TABLES 271 152250881Sjkim#define CCE_ALNUM 272 153250881Sjkim#define CCE_ALPHA 273 154250881Sjkim#define CCE_BLANK 274 155250881Sjkim#define CCE_CNTRL 275 156250881Sjkim#define CCE_DIGIT 276 157250881Sjkim#define CCE_GRAPH 277 158250881Sjkim#define CCE_LOWER 278 159250881Sjkim#define CCE_PRINT 279 160250881Sjkim#define CCE_PUNCT 280 161250881Sjkim#define CCE_SPACE 281 162250881Sjkim#define CCE_UPPER 282 163250881Sjkim#define CCE_XDIGIT 283 164250881Sjkim#define CCE_NEG_ALNUM 284 165250881Sjkim#define CCE_NEG_ALPHA 285 166250881Sjkim#define CCE_NEG_BLANK 286 167250881Sjkim#define CCE_NEG_CNTRL 287 168250881Sjkim#define CCE_NEG_DIGIT 288 169250881Sjkim#define CCE_NEG_GRAPH 289 170250881Sjkim#define CCE_NEG_LOWER 290 171250881Sjkim#define CCE_NEG_PRINT 291 172250881Sjkim#define CCE_NEG_PUNCT 292 173250881Sjkim#define CCE_NEG_SPACE 293 174250881Sjkim#define CCE_NEG_UPPER 294 175250881Sjkim#define CCE_NEG_XDIGIT 295 176250881Sjkim#define CCL_OP_DIFF 296 177250881Sjkim#define CCL_OP_UNION 297 178250881Sjkim#define BEGIN_REPEAT_POSIX 298 179250881Sjkim#define END_REPEAT_POSIX 299 180250881Sjkim#define BEGIN_REPEAT_FLEX 300 181250881Sjkim#define END_REPEAT_FLEX 301 182250881Sjkim#define YYERRCODE 256 183250881Sjkimstatic const short yylhs[] = { -1, 184250881Sjkim 0, 1, 2, 2, 2, 2, 3, 6, 6, 7, 185250881Sjkim 7, 7, 8, 9, 9, 10, 10, 10, 10, 10, 186250881Sjkim 10, 4, 4, 4, 5, 12, 12, 12, 12, 14, 187250881Sjkim 11, 11, 11, 15, 15, 15, 16, 13, 13, 13, 188250881Sjkim 13, 18, 18, 17, 19, 19, 19, 19, 19, 20, 189250881Sjkim 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 190250881Sjkim 20, 21, 21, 21, 23, 23, 24, 24, 24, 24, 191250881Sjkim 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 192250881Sjkim 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 193250881Sjkim 25, 25, 25, 25, 22, 22, 194250881Sjkim}; 195250881Sjkimstatic const short yylen[] = { 2, 196250881Sjkim 5, 0, 3, 2, 0, 1, 1, 1, 1, 2, 197250881Sjkim 1, 1, 2, 2, 0, 3, 3, 3, 3, 3, 198250881Sjkim 3, 5, 5, 0, 0, 2, 1, 1, 1, 0, 199250881Sjkim 4, 3, 0, 3, 1, 1, 1, 2, 3, 2, 200250881Sjkim 1, 3, 1, 2, 2, 1, 6, 5, 4, 2, 201250881Sjkim 2, 2, 6, 5, 4, 1, 1, 1, 3, 3, 202250881Sjkim 1, 3, 3, 1, 3, 4, 4, 2, 2, 0, 203250881Sjkim 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 204250881Sjkim 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 205250881Sjkim 1, 1, 1, 1, 2, 0, 206250881Sjkim}; 207250881Sjkimstatic const short yydefred[] = { 2, 208250881Sjkim 0, 0, 6, 0, 7, 8, 9, 15, 24, 0, 209250881Sjkim 4, 0, 0, 12, 11, 0, 0, 0, 0, 0, 210250881Sjkim 0, 0, 14, 0, 1, 0, 10, 0, 0, 0, 211250881Sjkim 0, 0, 0, 0, 0, 24, 0, 16, 18, 19, 212250881Sjkim 20, 17, 21, 32, 36, 37, 0, 35, 0, 29, 213250881Sjkim 61, 58, 28, 0, 56, 96, 0, 0, 0, 27, 214250881Sjkim 0, 0, 0, 0, 0, 64, 31, 0, 23, 26, 215250881Sjkim 0, 0, 70, 0, 22, 0, 40, 0, 44, 0, 216250881Sjkim 0, 0, 50, 51, 52, 0, 0, 34, 95, 59, 217250881Sjkim 60, 0, 0, 71, 72, 73, 74, 75, 76, 77, 218250881Sjkim 78, 79, 80, 82, 81, 83, 84, 85, 86, 87, 219250881Sjkim 88, 93, 89, 90, 91, 94, 92, 65, 69, 39, 220250881Sjkim 0, 0, 0, 62, 63, 66, 0, 49, 0, 55, 221250881Sjkim 0, 67, 0, 48, 0, 54, 47, 53, 222250881Sjkim}; 223250881Sjkimstatic const short yydgoto[] = { 1, 224250881Sjkim 2, 4, 9, 13, 25, 10, 16, 11, 12, 23, 225250881Sjkim 26, 59, 60, 35, 47, 48, 61, 62, 63, 64, 226250881Sjkim 65, 71, 66, 74, 119, 227250881Sjkim}; 228250881Sjkimstatic const short yysindex[] = { 0, 229250881Sjkim 0, -222, 0, -155, 0, 0, 0, 0, 0, -215, 230250881Sjkim 0, -123, 6, 0, 0, -193, 10, 21, 26, 31, 231250881Sjkim 35, 37, 0, 59, 0, -44, 0, -147, -145, -140, 232250881Sjkim -133, -132, -129, 75, -214, 0, -19, 0, 0, 0, 233250881Sjkim 0, 0, 0, 0, 0, 0, 23, 0, -48, 0, 234250881Sjkim 0, 0, 0, -17, 0, 0, -17, 27, 128, 0, 235250881Sjkim -17, -1, -30, -41, -189, 0, 0, -121, 0, 0, 236250881Sjkim -31, -34, 0, -87, 0, -25, 0, -17, 0, -109, 237250881Sjkim -41, -108, 0, 0, 0, 60, 60, 0, 0, 0, 238250881Sjkim 0, 46, 107, 0, 0, 0, 0, 0, 0, 0, 239250881Sjkim 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240250881Sjkim 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241250881Sjkim -30, -36, -39, 0, 0, 0, -104, 0, -219, 0, 242250881Sjkim -238, 0, -144, 0, -143, 0, 0, 0, 243250881Sjkim}; 244250881Sjkimstatic const short yyrindex[] = { 0, 245250881Sjkim 0, -141, 0, 0, 0, 0, 0, 0, 0, 0, 246250881Sjkim 0, -134, 9, 0, 0, -125, 0, 0, 0, 0, 247250881Sjkim 0, 0, 0, -178, 0, 22, 0, 0, 0, 0, 248250881Sjkim 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249250881Sjkim 0, 0, 0, 0, 0, 0, 0, 0, -21, 0, 250250881Sjkim 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 251250881Sjkim 0, 144, 47, 4, -10, 0, 0, 0, 0, 0, 252250881Sjkim 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 253250881Sjkim 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254250881Sjkim 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 255250881Sjkim 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256250881Sjkim 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257250881Sjkim 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258250881Sjkim 0, 0, 0, 0, 0, 0, 0, 0, 259250881Sjkim}; 260250881Sjkimstatic const short yygindex[] = { 0, 261250881Sjkim 0, 0, 0, 121, 133, 0, 0, 0, 0, 0, 262250881Sjkim 0, 0, 106, 0, 0, 93, 0, 32, 84, -45, 263250881Sjkim 0, 0, 25, 90, 0, 264250881Sjkim}; 265250881Sjkim#define YYTABLESIZE 419 266250881Sjkimstatic const short yytable[] = { 57, 267250881Sjkim 83, 84, 90, 56, 131, 118, 91, 129, 25, 57, 268250881Sjkim 120, 24, 33, 46, 56, 55, 56, 81, 33, 135, 269250881Sjkim 57, 85, 57, 57, 33, 57, 55, 45, 55, 57, 270250881Sjkim 57, 57, 57, 3, 77, 57, 57, 46, 133, 46, 271250881Sjkim 14, 45, 33, 46, 46, 79, 15, 46, 33, 46, 272250881Sjkim 46, 45, 57, 45, 33, 25, 43, 45, 45, 42, 273250881Sjkim 58, 25, 136, 45, 45, 24, 68, 25, 27, 33, 274250881Sjkim 28, 58, 33, 58, 54, 81, 69, 30, 36, 134, 275250881Sjkim 57, 29, 43, 30, 67, 42, 30, 43, 72, 78, 276250881Sjkim 42, 31, 76, 43, 46, 32, 42, 33, 78, 33, 277250881Sjkim 34, 33, 33, 5, 6, 7, 86, 87, 45, 8, 278250881Sjkim 124, 125, 25, 57, 38, 25, 39, 5, 5, 5, 279250881Sjkim 73, 40, 78, 5, 13, 13, 13, 46, 41, 42, 280250881Sjkim 13, 33, 43, 3, 3, 3, 44, 75, 126, 3, 281250881Sjkim 46, 45, 17, 18, 19, 20, 21, 22, 122, 123, 282250881Sjkim 58, 127, 132, 41, 137, 38, 49, 138, 37, 70, 283250881Sjkim 88, 121, 92, 0, 0, 0, 0, 0, 0, 93, 284250881Sjkim 43, 0, 0, 42, 0, 0, 0, 70, 0, 0, 285250881Sjkim 0, 0, 0, 0, 94, 95, 96, 97, 98, 99, 286250881Sjkim 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 287250881Sjkim 110, 111, 112, 113, 114, 115, 116, 117, 0, 0, 288250881Sjkim 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 289250881Sjkim 0, 0, 0, 0, 0, 89, 51, 0, 0, 0, 290250881Sjkim 0, 0, 52, 0, 33, 33, 50, 51, 0, 51, 291250881Sjkim 0, 33, 33, 52, 53, 52, 57, 0, 0, 0, 292250881Sjkim 0, 0, 57, 0, 0, 0, 0, 0, 82, 0, 293250881Sjkim 46, 130, 128, 0, 33, 33, 46, 80, 0, 0, 294250881Sjkim 0, 33, 33, 0, 45, 0, 0, 25, 25, 0, 295250881Sjkim 45, 0, 0, 0, 25, 25, 0, 57, 0, 57, 296250881Sjkim 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297250881Sjkim 0, 46, 93, 0, 0, 0, 0, 0, 0, 0, 298250881Sjkim 0, 0, 0, 0, 0, 45, 0, 94, 95, 96, 299250881Sjkim 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 300250881Sjkim 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 301250881Sjkim 117, 70, 0, 0, 0, 0, 0, 0, 0, 0, 302250881Sjkim 0, 0, 0, 0, 0, 0, 70, 70, 70, 70, 303250881Sjkim 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 304250881Sjkim 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 305250881Sjkim 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306250881Sjkim 0, 0, 0, 0, 0, 68, 68, 68, 68, 68, 307250881Sjkim 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 308250881Sjkim 68, 68, 68, 68, 68, 68, 68, 68, 68, 309250881Sjkim}; 310250881Sjkimstatic const short yycheck[] = { 10, 311250881Sjkim 42, 43, 34, 34, 44, 93, 41, 44, 0, 40, 312250881Sjkim 36, 60, 34, 10, 34, 46, 34, 63, 40, 258, 313250881Sjkim 40, 63, 40, 34, 46, 36, 46, 10, 46, 40, 314250881Sjkim 41, 42, 43, 256, 36, 46, 47, 34, 258, 36, 315250881Sjkim 256, 256, 34, 40, 41, 47, 262, 262, 40, 46, 316250881Sjkim 47, 34, 63, 36, 46, 34, 10, 40, 41, 10, 317250881Sjkim 91, 40, 301, 46, 47, 60, 44, 46, 262, 91, 318250881Sjkim 61, 91, 94, 91, 94, 121, 125, 256, 123, 299, 319250881Sjkim 91, 61, 36, 262, 62, 36, 61, 41, 57, 124, 320250881Sjkim 41, 61, 61, 47, 91, 61, 47, 61, 124, 91, 321250881Sjkim 42, 123, 94, 259, 260, 261, 296, 297, 91, 265, 322250881Sjkim 86, 87, 91, 124, 262, 94, 262, 259, 260, 261, 323250881Sjkim 94, 262, 124, 265, 259, 260, 261, 124, 262, 262, 324250881Sjkim 265, 123, 262, 259, 260, 261, 62, 10, 93, 265, 325250881Sjkim 262, 124, 266, 267, 268, 269, 270, 271, 258, 258, 326250881Sjkim 91, 45, 257, 10, 299, 10, 36, 301, 26, 54, 327250881Sjkim 68, 78, 73, -1, -1, -1, -1, -1, -1, 257, 328250881Sjkim 124, -1, -1, 124, -1, -1, -1, 93, -1, -1, 329250881Sjkim -1, -1, -1, -1, 272, 273, 274, 275, 276, 277, 330250881Sjkim 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 331250881Sjkim 288, 289, 290, 291, 292, 293, 294, 295, -1, -1, 332250881Sjkim -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, 333250881Sjkim -1, -1, -1, -1, -1, 257, 257, -1, -1, -1, 334250881Sjkim -1, -1, 263, -1, 256, 257, 256, 257, -1, 257, 335250881Sjkim -1, 263, 264, 263, 264, 263, 257, -1, -1, -1, 336250881Sjkim -1, -1, 263, -1, -1, -1, -1, -1, 300, -1, 337250881Sjkim 257, 301, 299, -1, 256, 257, 263, 298, -1, -1, 338250881Sjkim -1, 263, 264, -1, 257, -1, -1, 256, 257, -1, 339250881Sjkim 263, -1, -1, -1, 263, 264, -1, 298, -1, 300, 340250881Sjkim -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 341250881Sjkim -1, 298, 257, -1, -1, -1, -1, -1, -1, -1, 342250881Sjkim -1, -1, -1, -1, -1, 298, -1, 272, 273, 274, 343250881Sjkim 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 344250881Sjkim 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 345250881Sjkim 295, 257, -1, -1, -1, -1, -1, -1, -1, -1, 346250881Sjkim -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, 347250881Sjkim 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 348250881Sjkim 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 349250881Sjkim 257, -1, -1, -1, -1, -1, -1, -1, -1, -1, 350250881Sjkim -1, -1, -1, -1, -1, 272, 273, 274, 275, 276, 351250881Sjkim 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 352250881Sjkim 287, 288, 289, 290, 291, 292, 293, 294, 295, 353250881Sjkim}; 354250881Sjkim#define YYFINAL 1 355250881Sjkim#ifndef YYDEBUG 356250881Sjkim#define YYDEBUG 0 357250881Sjkim#endif 358250881Sjkim#define YYMAXTOKEN 301 359250881Sjkim#if YYDEBUG 360250881Sjkimstatic const char *yyname[] = { 361250881Sjkim 362250881Sjkim"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 363250881Sjkim0,0,0,"'\"'",0,"'$'",0,0,0,"'('","')'","'*'","'+'","','","'-'","'.'","'/'",0,0, 364250881Sjkim0,0,0,0,0,0,0,0,0,0,"'<'","'='","'>'","'?'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 365250881Sjkim0,0,0,0,0,0,0,0,0,"'['",0,"']'","'^'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 366250881Sjkim0,0,0,0,0,0,0,"'{'","'|'","'}'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 367250881Sjkim0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 368250881Sjkim0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 369250881Sjkim0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"CHAR","NUMBER","SECTEND", 370250881Sjkim"SCDECL","XSCDECL","NAME","PREVCCL","EOF_OP","OPTION_OP","OPT_OUTFILE", 371250881Sjkim"OPT_PREFIX","OPT_YYCLASS","OPT_HEADER","OPT_EXTRA_TYPE","OPT_TABLES", 372250881Sjkim"CCE_ALNUM","CCE_ALPHA","CCE_BLANK","CCE_CNTRL","CCE_DIGIT","CCE_GRAPH", 373250881Sjkim"CCE_LOWER","CCE_PRINT","CCE_PUNCT","CCE_SPACE","CCE_UPPER","CCE_XDIGIT", 374250881Sjkim"CCE_NEG_ALNUM","CCE_NEG_ALPHA","CCE_NEG_BLANK","CCE_NEG_CNTRL","CCE_NEG_DIGIT", 375250881Sjkim"CCE_NEG_GRAPH","CCE_NEG_LOWER","CCE_NEG_PRINT","CCE_NEG_PUNCT","CCE_NEG_SPACE", 376250881Sjkim"CCE_NEG_UPPER","CCE_NEG_XDIGIT","CCL_OP_DIFF","CCL_OP_UNION", 377250881Sjkim"BEGIN_REPEAT_POSIX","END_REPEAT_POSIX","BEGIN_REPEAT_FLEX","END_REPEAT_FLEX", 378250881Sjkim}; 379250881Sjkimstatic const char *yyrule[] = { 380250881Sjkim"$accept : goal", 381250881Sjkim"goal : initlex sect1 sect1end sect2 initforrule", 382250881Sjkim"initlex :", 383250881Sjkim"sect1 : sect1 startconddecl namelist1", 384250881Sjkim"sect1 : sect1 options", 385250881Sjkim"sect1 :", 386250881Sjkim"sect1 : error", 387250881Sjkim"sect1end : SECTEND", 388250881Sjkim"startconddecl : SCDECL", 389250881Sjkim"startconddecl : XSCDECL", 390250881Sjkim"namelist1 : namelist1 NAME", 391250881Sjkim"namelist1 : NAME", 392250881Sjkim"namelist1 : error", 393250881Sjkim"options : OPTION_OP optionlist", 394250881Sjkim"optionlist : optionlist option", 395250881Sjkim"optionlist :", 396250881Sjkim"option : OPT_OUTFILE '=' NAME", 397250881Sjkim"option : OPT_EXTRA_TYPE '=' NAME", 398250881Sjkim"option : OPT_PREFIX '=' NAME", 399250881Sjkim"option : OPT_YYCLASS '=' NAME", 400250881Sjkim"option : OPT_HEADER '=' NAME", 401250881Sjkim"option : OPT_TABLES '=' NAME", 402250881Sjkim"sect2 : sect2 scon initforrule flexrule '\\n'", 403250881Sjkim"sect2 : sect2 scon '{' sect2 '}'", 404250881Sjkim"sect2 :", 405250881Sjkim"initforrule :", 406250881Sjkim"flexrule : '^' rule", 407250881Sjkim"flexrule : rule", 408250881Sjkim"flexrule : EOF_OP", 409250881Sjkim"flexrule : error", 410250881Sjkim"scon_stk_ptr :", 411250881Sjkim"scon : '<' scon_stk_ptr namelist2 '>'", 412250881Sjkim"scon : '<' '*' '>'", 413250881Sjkim"scon :", 414250881Sjkim"namelist2 : namelist2 ',' sconname", 415250881Sjkim"namelist2 : sconname", 416250881Sjkim"namelist2 : error", 417250881Sjkim"sconname : NAME", 418250881Sjkim"rule : re2 re", 419250881Sjkim"rule : re2 re '$'", 420250881Sjkim"rule : re '$'", 421250881Sjkim"rule : re", 422250881Sjkim"re : re '|' series", 423250881Sjkim"re : series", 424250881Sjkim"re2 : re '/'", 425250881Sjkim"series : series singleton", 426250881Sjkim"series : singleton", 427250881Sjkim"series : series BEGIN_REPEAT_POSIX NUMBER ',' NUMBER END_REPEAT_POSIX", 428250881Sjkim"series : series BEGIN_REPEAT_POSIX NUMBER ',' END_REPEAT_POSIX", 429250881Sjkim"series : series BEGIN_REPEAT_POSIX NUMBER END_REPEAT_POSIX", 430250881Sjkim"singleton : singleton '*'", 431250881Sjkim"singleton : singleton '+'", 432250881Sjkim"singleton : singleton '?'", 433250881Sjkim"singleton : singleton BEGIN_REPEAT_FLEX NUMBER ',' NUMBER END_REPEAT_FLEX", 434250881Sjkim"singleton : singleton BEGIN_REPEAT_FLEX NUMBER ',' END_REPEAT_FLEX", 435250881Sjkim"singleton : singleton BEGIN_REPEAT_FLEX NUMBER END_REPEAT_FLEX", 436250881Sjkim"singleton : '.'", 437250881Sjkim"singleton : fullccl", 438250881Sjkim"singleton : PREVCCL", 439250881Sjkim"singleton : '\"' string '\"'", 440250881Sjkim"singleton : '(' re ')'", 441250881Sjkim"singleton : CHAR", 442250881Sjkim"fullccl : fullccl CCL_OP_DIFF braceccl", 443250881Sjkim"fullccl : fullccl CCL_OP_UNION braceccl", 444250881Sjkim"fullccl : braceccl", 445250881Sjkim"braceccl : '[' ccl ']'", 446250881Sjkim"braceccl : '[' '^' ccl ']'", 447250881Sjkim"ccl : ccl CHAR '-' CHAR", 448250881Sjkim"ccl : ccl CHAR", 449250881Sjkim"ccl : ccl ccl_expr", 450250881Sjkim"ccl :", 451250881Sjkim"ccl_expr : CCE_ALNUM", 452250881Sjkim"ccl_expr : CCE_ALPHA", 453250881Sjkim"ccl_expr : CCE_BLANK", 454250881Sjkim"ccl_expr : CCE_CNTRL", 455250881Sjkim"ccl_expr : CCE_DIGIT", 456250881Sjkim"ccl_expr : CCE_GRAPH", 457250881Sjkim"ccl_expr : CCE_LOWER", 458250881Sjkim"ccl_expr : CCE_PRINT", 459250881Sjkim"ccl_expr : CCE_PUNCT", 460250881Sjkim"ccl_expr : CCE_SPACE", 461250881Sjkim"ccl_expr : CCE_XDIGIT", 462250881Sjkim"ccl_expr : CCE_UPPER", 463250881Sjkim"ccl_expr : CCE_NEG_ALNUM", 464250881Sjkim"ccl_expr : CCE_NEG_ALPHA", 465250881Sjkim"ccl_expr : CCE_NEG_BLANK", 466250881Sjkim"ccl_expr : CCE_NEG_CNTRL", 467250881Sjkim"ccl_expr : CCE_NEG_DIGIT", 468250881Sjkim"ccl_expr : CCE_NEG_GRAPH", 469250881Sjkim"ccl_expr : CCE_NEG_PRINT", 470250881Sjkim"ccl_expr : CCE_NEG_PUNCT", 471250881Sjkim"ccl_expr : CCE_NEG_SPACE", 472250881Sjkim"ccl_expr : CCE_NEG_XDIGIT", 473250881Sjkim"ccl_expr : CCE_NEG_LOWER", 474250881Sjkim"ccl_expr : CCE_NEG_UPPER", 475250881Sjkim"string : string CHAR", 476250881Sjkim"string :", 477250881Sjkim 478250881Sjkim}; 479250881Sjkim#endif 480250881Sjkim 481250881Sjkimint yydebug; 482250881Sjkimint yynerrs; 483250881Sjkim 484250881Sjkimint yyerrflag; 485250881Sjkimint yychar; 486250881SjkimYYSTYPE yyval; 487250881SjkimYYSTYPE yylval; 488250881Sjkim 489250881Sjkim/* define the initial stack-sizes */ 490250881Sjkim#ifdef YYSTACKSIZE 491250881Sjkim#undef YYMAXDEPTH 492250881Sjkim#define YYMAXDEPTH YYSTACKSIZE 493250881Sjkim#else 494250881Sjkim#ifdef YYMAXDEPTH 495250881Sjkim#define YYSTACKSIZE YYMAXDEPTH 496250881Sjkim#else 497250881Sjkim#define YYSTACKSIZE 500 498250881Sjkim#define YYMAXDEPTH 500 499250881Sjkim#endif 500250881Sjkim#endif 501250881Sjkim 502250881Sjkim#define YYINITSTACKSIZE 500 503250881Sjkim 504250881Sjkimtypedef struct { 505250881Sjkim unsigned stacksize; 506250881Sjkim short *s_base; 507250881Sjkim short *s_mark; 508250881Sjkim short *s_last; 509250881Sjkim YYSTYPE *l_base; 510250881Sjkim YYSTYPE *l_mark; 511250881Sjkim} YYSTACKDATA; 512250881Sjkim/* variables for the parser stack */ 513250881Sjkimstatic YYSTACKDATA yystack; 514250881Sjkim#line 948 "parse.y" 515250881Sjkim 516250881Sjkim 517250881Sjkim/* build_eof_action - build the "<<EOF>>" action for the active start 518250881Sjkim * conditions 519250881Sjkim */ 520250881Sjkim 521250881Sjkimvoid build_eof_action() 522250881Sjkim { 523250881Sjkim int i; 524250881Sjkim char action_text[MAXLINE]; 525250881Sjkim 526250881Sjkim for ( i = 1; i <= scon_stk_ptr; ++i ) 527250881Sjkim { 528250881Sjkim if ( sceof[scon_stk[i]] ) 529250881Sjkim format_pinpoint_message( 530250881Sjkim "multiple <<EOF>> rules for start condition %s", 531250881Sjkim scname[scon_stk[i]] ); 532250881Sjkim 533250881Sjkim else 534250881Sjkim { 535250881Sjkim sceof[scon_stk[i]] = true; 536250881Sjkim 537250881Sjkim if (previous_continued_action /* && previous action was regular */) 538250881Sjkim add_action("YY_RULE_SETUP\n"); 539250881Sjkim 540250881Sjkim snprintf( action_text, sizeof(action_text), "case YY_STATE_EOF(%s):\n", 541250881Sjkim scname[scon_stk[i]] ); 542250881Sjkim add_action( action_text ); 543250881Sjkim } 544250881Sjkim } 545250881Sjkim 546250881Sjkim line_directive_out( (FILE *) 0, 1 ); 547250881Sjkim 548250881Sjkim /* This isn't a normal rule after all - don't count it as 549250881Sjkim * such, so we don't have any holes in the rule numbering 550250881Sjkim * (which make generating "rule can never match" warnings 551250881Sjkim * more difficult. 552250881Sjkim */ 553250881Sjkim --num_rules; 554250881Sjkim ++num_eof_rules; 555250881Sjkim } 556250881Sjkim 557250881Sjkim 558250881Sjkim/* format_synerr - write out formatted syntax error */ 559250881Sjkim 560250881Sjkimvoid format_synerr( msg, arg ) 561250881Sjkimconst char *msg, arg[]; 562250881Sjkim { 563250881Sjkim char errmsg[MAXLINE]; 564250881Sjkim 565250881Sjkim (void) snprintf( errmsg, sizeof(errmsg), msg, arg ); 566250881Sjkim synerr( errmsg ); 567250881Sjkim } 568250881Sjkim 569250881Sjkim 570250881Sjkim/* synerr - report a syntax error */ 571250881Sjkim 572250881Sjkimvoid synerr( str ) 573250881Sjkimconst char *str; 574250881Sjkim { 575250881Sjkim syntaxerror = true; 576250881Sjkim pinpoint_message( str ); 577250881Sjkim } 578250881Sjkim 579250881Sjkim 580250881Sjkim/* format_warn - write out formatted warning */ 581250881Sjkim 582250881Sjkimvoid format_warn( msg, arg ) 583250881Sjkimconst char *msg, arg[]; 584250881Sjkim { 585250881Sjkim char warn_msg[MAXLINE]; 586250881Sjkim 587250881Sjkim snprintf( warn_msg, sizeof(warn_msg), msg, arg ); 588250881Sjkim warn( warn_msg ); 589250881Sjkim } 590250881Sjkim 591250881Sjkim 592250881Sjkim/* warn - report a warning, unless -w was given */ 593250881Sjkim 594250881Sjkimvoid warn( str ) 595250881Sjkimconst char *str; 596250881Sjkim { 597250881Sjkim line_warning( str, linenum ); 598250881Sjkim } 599250881Sjkim 600250881Sjkim/* format_pinpoint_message - write out a message formatted with one string, 601250881Sjkim * pinpointing its location 602250881Sjkim */ 603250881Sjkim 604250881Sjkimvoid format_pinpoint_message( msg, arg ) 605250881Sjkimconst char *msg, arg[]; 606250881Sjkim { 607250881Sjkim char errmsg[MAXLINE]; 608250881Sjkim 609250881Sjkim snprintf( errmsg, sizeof(errmsg), msg, arg ); 610250881Sjkim pinpoint_message( errmsg ); 611250881Sjkim } 612250881Sjkim 613250881Sjkim 614250881Sjkim/* pinpoint_message - write out a message, pinpointing its location */ 615250881Sjkim 616250881Sjkimvoid pinpoint_message( str ) 617250881Sjkimconst char *str; 618250881Sjkim { 619250881Sjkim line_pinpoint( str, linenum ); 620250881Sjkim } 621250881Sjkim 622250881Sjkim 623250881Sjkim/* line_warning - report a warning at a given line, unless -w was given */ 624250881Sjkim 625250881Sjkimvoid line_warning( str, line ) 626250881Sjkimconst char *str; 627250881Sjkimint line; 628250881Sjkim { 629250881Sjkim char warning[MAXLINE]; 630250881Sjkim 631250881Sjkim if ( ! nowarn ) 632250881Sjkim { 633250881Sjkim snprintf( warning, sizeof(warning), "warning, %s", str ); 634250881Sjkim line_pinpoint( warning, line ); 635250881Sjkim } 636250881Sjkim } 637250881Sjkim 638250881Sjkim 639250881Sjkim/* line_pinpoint - write out a message, pinpointing it at the given line */ 640250881Sjkim 641250881Sjkimvoid line_pinpoint( str, line ) 642250881Sjkimconst char *str; 643250881Sjkimint line; 644250881Sjkim { 645250881Sjkim fprintf( stderr, "%s:%d: %s\n", infilename, line, str ); 646250881Sjkim } 647250881Sjkim 648250881Sjkim 649250881Sjkim/* yyerror - eat up an error message from the parser; 650250881Sjkim * currently, messages are ignore 651250881Sjkim */ 652250881Sjkim 653250881Sjkimvoid yyerror( msg ) 654250881Sjkimconst char *msg; 655250881Sjkim { 656250881Sjkim } 657250881Sjkim#line 656 "parse.c" 658250881Sjkim 659250881Sjkim#if YYDEBUG 660250881Sjkim#include <stdio.h> /* needed for printf */ 661250881Sjkim#endif 662250881Sjkim 663250881Sjkim#include <stdlib.h> /* needed for malloc, etc */ 664250881Sjkim#include <string.h> /* needed for memset */ 665250881Sjkim 666250881Sjkim/* allocate initial stack or double stack size, up to YYMAXDEPTH */ 667250881Sjkimstatic int yygrowstack(YYSTACKDATA *data) 668250881Sjkim{ 669250881Sjkim int i; 670250881Sjkim unsigned newsize; 671250881Sjkim short *newss; 672250881Sjkim YYSTYPE *newvs; 673250881Sjkim 674250881Sjkim if ((newsize = data->stacksize) == 0) 675250881Sjkim newsize = YYINITSTACKSIZE; 676250881Sjkim else if (newsize >= YYMAXDEPTH) 677250881Sjkim return -1; 678250881Sjkim else if ((newsize *= 2) > YYMAXDEPTH) 679250881Sjkim newsize = YYMAXDEPTH; 680250881Sjkim 681250881Sjkim i = data->s_mark - data->s_base; 682250881Sjkim newss = (short *)realloc(data->s_base, newsize * sizeof(*newss)); 683250881Sjkim if (newss == 0) 684250881Sjkim return -1; 685250881Sjkim 686250881Sjkim data->s_base = newss; 687250881Sjkim data->s_mark = newss + i; 688250881Sjkim 689250881Sjkim newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 690250881Sjkim if (newvs == 0) 691250881Sjkim return -1; 692250881Sjkim 693250881Sjkim data->l_base = newvs; 694250881Sjkim data->l_mark = newvs + i; 695250881Sjkim 696250881Sjkim data->stacksize = newsize; 697250881Sjkim data->s_last = data->s_base + newsize - 1; 698250881Sjkim return 0; 699250881Sjkim} 700250881Sjkim 701250881Sjkim#if YYPURE || defined(YY_NO_LEAKS) 702250881Sjkimstatic void yyfreestack(YYSTACKDATA *data) 703250881Sjkim{ 704250881Sjkim free(data->s_base); 705250881Sjkim free(data->l_base); 706250881Sjkim memset(data, 0, sizeof(*data)); 707250881Sjkim} 708250881Sjkim#else 709250881Sjkim#define yyfreestack(data) /* nothing */ 710250881Sjkim#endif 711250881Sjkim 712250881Sjkim#define YYABORT goto yyabort 713250881Sjkim#define YYREJECT goto yyabort 714250881Sjkim#define YYACCEPT goto yyaccept 715250881Sjkim#define YYERROR goto yyerrlab 716250881Sjkim 717250881Sjkimint 718250881SjkimYYPARSE_DECL() 719250881Sjkim{ 720250881Sjkim int yym, yyn, yystate; 721250881Sjkim#if YYDEBUG 722250881Sjkim const char *yys; 723250881Sjkim 724250881Sjkim if ((yys = getenv("YYDEBUG")) != 0) 725250881Sjkim { 726250881Sjkim yyn = *yys; 727250881Sjkim if (yyn >= '0' && yyn <= '9') 728250881Sjkim yydebug = yyn - '0'; 729250881Sjkim } 730250881Sjkim#endif 731250881Sjkim 732250881Sjkim yynerrs = 0; 733250881Sjkim yyerrflag = 0; 734250881Sjkim yychar = YYEMPTY; 735250881Sjkim yystate = 0; 736250881Sjkim 737250881Sjkim#if YYPURE 738250881Sjkim memset(&yystack, 0, sizeof(yystack)); 739250881Sjkim#endif 740250881Sjkim 741250881Sjkim if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow; 742250881Sjkim yystack.s_mark = yystack.s_base; 743250881Sjkim yystack.l_mark = yystack.l_base; 744250881Sjkim yystate = 0; 745250881Sjkim *yystack.s_mark = 0; 746250881Sjkim 747250881Sjkimyyloop: 748250881Sjkim if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 749250881Sjkim if (yychar < 0) 750250881Sjkim { 751250881Sjkim if ((yychar = YYLEX) < 0) yychar = 0; 752250881Sjkim#if YYDEBUG 753250881Sjkim if (yydebug) 754250881Sjkim { 755250881Sjkim yys = 0; 756250881Sjkim if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; 757250881Sjkim if (!yys) yys = "illegal-symbol"; 758250881Sjkim printf("%sdebug: state %d, reading %d (%s)\n", 759250881Sjkim YYPREFIX, yystate, yychar, yys); 760250881Sjkim } 761250881Sjkim#endif 762250881Sjkim } 763250881Sjkim if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && 764250881Sjkim yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 765250881Sjkim { 766250881Sjkim#if YYDEBUG 767250881Sjkim if (yydebug) 768250881Sjkim printf("%sdebug: state %d, shifting to state %d\n", 769250881Sjkim YYPREFIX, yystate, yytable[yyn]); 770250881Sjkim#endif 771250881Sjkim if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack)) 772250881Sjkim { 773250881Sjkim goto yyoverflow; 774250881Sjkim } 775250881Sjkim yystate = yytable[yyn]; 776250881Sjkim *++yystack.s_mark = yytable[yyn]; 777250881Sjkim *++yystack.l_mark = yylval; 778250881Sjkim yychar = YYEMPTY; 779250881Sjkim if (yyerrflag > 0) --yyerrflag; 780250881Sjkim goto yyloop; 781250881Sjkim } 782250881Sjkim if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && 783250881Sjkim yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 784250881Sjkim { 785250881Sjkim yyn = yytable[yyn]; 786250881Sjkim goto yyreduce; 787250881Sjkim } 788250881Sjkim if (yyerrflag) goto yyinrecovery; 789250881Sjkim 790250881Sjkim yyerror("syntax error"); 791250881Sjkim 792250881Sjkim goto yyerrlab; 793250881Sjkim 794250881Sjkimyyerrlab: 795250881Sjkim ++yynerrs; 796250881Sjkim 797250881Sjkimyyinrecovery: 798250881Sjkim if (yyerrflag < 3) 799250881Sjkim { 800250881Sjkim yyerrflag = 3; 801250881Sjkim for (;;) 802250881Sjkim { 803250881Sjkim if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && 804250881Sjkim yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) 805250881Sjkim { 806250881Sjkim#if YYDEBUG 807250881Sjkim if (yydebug) 808250881Sjkim printf("%sdebug: state %d, error recovery shifting\ 809250881Sjkim to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); 810250881Sjkim#endif 811250881Sjkim if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack)) 812250881Sjkim { 813250881Sjkim goto yyoverflow; 814250881Sjkim } 815250881Sjkim yystate = yytable[yyn]; 816250881Sjkim *++yystack.s_mark = yytable[yyn]; 817250881Sjkim *++yystack.l_mark = yylval; 818250881Sjkim goto yyloop; 819250881Sjkim } 820250881Sjkim else 821250881Sjkim { 822250881Sjkim#if YYDEBUG 823250881Sjkim if (yydebug) 824250881Sjkim printf("%sdebug: error recovery discarding state %d\n", 825250881Sjkim YYPREFIX, *yystack.s_mark); 826250881Sjkim#endif 827250881Sjkim if (yystack.s_mark <= yystack.s_base) goto yyabort; 828250881Sjkim --yystack.s_mark; 829250881Sjkim --yystack.l_mark; 830250881Sjkim } 831250881Sjkim } 832250881Sjkim } 833250881Sjkim else 834250881Sjkim { 835250881Sjkim if (yychar == 0) goto yyabort; 836250881Sjkim#if YYDEBUG 837250881Sjkim if (yydebug) 838250881Sjkim { 839250881Sjkim yys = 0; 840250881Sjkim if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; 841250881Sjkim if (!yys) yys = "illegal-symbol"; 842250881Sjkim printf("%sdebug: state %d, error recovery discards token %d (%s)\n", 843250881Sjkim YYPREFIX, yystate, yychar, yys); 844250881Sjkim } 845250881Sjkim#endif 846250881Sjkim yychar = YYEMPTY; 847250881Sjkim goto yyloop; 848250881Sjkim } 849250881Sjkim 850250881Sjkimyyreduce: 851250881Sjkim#if YYDEBUG 852250881Sjkim if (yydebug) 853250881Sjkim printf("%sdebug: state %d, reducing by rule %d (%s)\n", 854250881Sjkim YYPREFIX, yystate, yyn, yyrule[yyn]); 855250881Sjkim#endif 856250881Sjkim yym = yylen[yyn]; 857250881Sjkim if (yym) 858250881Sjkim yyval = yystack.l_mark[1-yym]; 859250881Sjkim else 860250881Sjkim memset(&yyval, 0, sizeof yyval); 861250881Sjkim switch (yyn) 862250881Sjkim { 863250881Sjkimcase 1: 864250881Sjkim#line 119 "parse.y" 865250881Sjkim { /* add default rule */ 866250881Sjkim int def_rule; 867250881Sjkim 868250881Sjkim pat = cclinit(); 869250881Sjkim cclnegate( pat ); 870250881Sjkim 871250881Sjkim def_rule = mkstate( -pat ); 872250881Sjkim 873250881Sjkim /* Remember the number of the default rule so we 874250881Sjkim * don't generate "can't match" warnings for it. 875250881Sjkim */ 876250881Sjkim default_rule = num_rules; 877250881Sjkim 878250881Sjkim finish_rule( def_rule, false, 0, 0, 0); 879250881Sjkim 880250881Sjkim for ( i = 1; i <= lastsc; ++i ) 881250881Sjkim scset[i] = mkbranch( scset[i], def_rule ); 882250881Sjkim 883250881Sjkim if ( spprdflt ) 884250881Sjkim add_action( 885250881Sjkim "YY_FATAL_ERROR( \"flex scanner jammed\" )" ); 886250881Sjkim else 887250881Sjkim add_action( "ECHO" ); 888250881Sjkim 889250881Sjkim add_action( ";\n\tYY_BREAK\n" ); 890250881Sjkim } 891250881Sjkimbreak; 892250881Sjkimcase 2: 893250881Sjkim#line 148 "parse.y" 894250881Sjkim { /* initialize for processing rules */ 895250881Sjkim 896250881Sjkim /* Create default DFA start condition. */ 897250881Sjkim scinstal( "INITIAL", false ); 898250881Sjkim } 899250881Sjkimbreak; 900250881Sjkimcase 6: 901250881Sjkim#line 159 "parse.y" 902250881Sjkim { synerr( _("unknown error processing section 1") ); } 903250881Sjkimbreak; 904250881Sjkimcase 7: 905250881Sjkim#line 163 "parse.y" 906250881Sjkim { 907250881Sjkim check_options(); 908250881Sjkim scon_stk = allocate_integer_array( lastsc + 1 ); 909250881Sjkim scon_stk_ptr = 0; 910250881Sjkim } 911250881Sjkimbreak; 912250881Sjkimcase 8: 913250881Sjkim#line 171 "parse.y" 914250881Sjkim { xcluflg = false; } 915250881Sjkimbreak; 916250881Sjkimcase 9: 917250881Sjkim#line 174 "parse.y" 918250881Sjkim { xcluflg = true; } 919250881Sjkimbreak; 920250881Sjkimcase 10: 921250881Sjkim#line 178 "parse.y" 922250881Sjkim { scinstal( nmstr, xcluflg ); } 923250881Sjkimbreak; 924250881Sjkimcase 11: 925250881Sjkim#line 181 "parse.y" 926250881Sjkim { scinstal( nmstr, xcluflg ); } 927250881Sjkimbreak; 928250881Sjkimcase 12: 929250881Sjkim#line 184 "parse.y" 930250881Sjkim { synerr( _("bad start condition list") ); } 931250881Sjkimbreak; 932250881Sjkimcase 16: 933250881Sjkim#line 195 "parse.y" 934250881Sjkim { 935250881Sjkim outfilename = copy_string( nmstr ); 936250881Sjkim did_outfilename = 1; 937250881Sjkim } 938250881Sjkimbreak; 939250881Sjkimcase 17: 940250881Sjkim#line 200 "parse.y" 941250881Sjkim { extra_type = copy_string( nmstr ); } 942250881Sjkimbreak; 943250881Sjkimcase 18: 944250881Sjkim#line 202 "parse.y" 945250881Sjkim { prefix = copy_string( nmstr ); } 946250881Sjkimbreak; 947250881Sjkimcase 19: 948250881Sjkim#line 204 "parse.y" 949250881Sjkim { yyclass = copy_string( nmstr ); } 950250881Sjkimbreak; 951250881Sjkimcase 20: 952250881Sjkim#line 206 "parse.y" 953250881Sjkim { headerfilename = copy_string( nmstr ); } 954250881Sjkimbreak; 955250881Sjkimcase 21: 956250881Sjkim#line 208 "parse.y" 957250881Sjkim { tablesext = true; tablesfilename = copy_string( nmstr ); } 958250881Sjkimbreak; 959250881Sjkimcase 22: 960250881Sjkim#line 212 "parse.y" 961250881Sjkim { scon_stk_ptr = yystack.l_mark[-3]; } 962250881Sjkimbreak; 963250881Sjkimcase 23: 964250881Sjkim#line 214 "parse.y" 965250881Sjkim { scon_stk_ptr = yystack.l_mark[-3]; } 966250881Sjkimbreak; 967250881Sjkimcase 25: 968250881Sjkim#line 219 "parse.y" 969250881Sjkim { 970250881Sjkim /* Initialize for a parse of one rule. */ 971250881Sjkim trlcontxt = variable_trail_rule = varlength = false; 972250881Sjkim trailcnt = headcnt = rulelen = 0; 973250881Sjkim current_state_type = STATE_NORMAL; 974250881Sjkim previous_continued_action = continued_action; 975250881Sjkim in_rule = true; 976250881Sjkim 977250881Sjkim new_rule(); 978250881Sjkim } 979250881Sjkimbreak; 980250881Sjkimcase 26: 981250881Sjkim#line 232 "parse.y" 982250881Sjkim { 983250881Sjkim pat = yystack.l_mark[0]; 984250881Sjkim finish_rule( pat, variable_trail_rule, 985250881Sjkim headcnt, trailcnt , previous_continued_action); 986250881Sjkim 987250881Sjkim if ( scon_stk_ptr > 0 ) 988250881Sjkim { 989250881Sjkim for ( i = 1; i <= scon_stk_ptr; ++i ) 990250881Sjkim scbol[scon_stk[i]] = 991250881Sjkim mkbranch( scbol[scon_stk[i]], 992250881Sjkim pat ); 993250881Sjkim } 994250881Sjkim 995250881Sjkim else 996250881Sjkim { 997250881Sjkim /* Add to all non-exclusive start conditions, 998250881Sjkim * including the default (0) start condition. 999250881Sjkim */ 1000250881Sjkim 1001250881Sjkim for ( i = 1; i <= lastsc; ++i ) 1002250881Sjkim if ( ! scxclu[i] ) 1003250881Sjkim scbol[i] = mkbranch( scbol[i], 1004250881Sjkim pat ); 1005250881Sjkim } 1006250881Sjkim 1007250881Sjkim if ( ! bol_needed ) 1008250881Sjkim { 1009250881Sjkim bol_needed = true; 1010250881Sjkim 1011250881Sjkim if ( performance_report > 1 ) 1012250881Sjkim pinpoint_message( 1013250881Sjkim "'^' operator results in sub-optimal performance" ); 1014250881Sjkim } 1015250881Sjkim } 1016250881Sjkimbreak; 1017250881Sjkimcase 27: 1018250881Sjkim#line 268 "parse.y" 1019250881Sjkim { 1020250881Sjkim pat = yystack.l_mark[0]; 1021250881Sjkim finish_rule( pat, variable_trail_rule, 1022250881Sjkim headcnt, trailcnt , previous_continued_action); 1023250881Sjkim 1024250881Sjkim if ( scon_stk_ptr > 0 ) 1025250881Sjkim { 1026250881Sjkim for ( i = 1; i <= scon_stk_ptr; ++i ) 1027250881Sjkim scset[scon_stk[i]] = 1028250881Sjkim mkbranch( scset[scon_stk[i]], 1029250881Sjkim pat ); 1030250881Sjkim } 1031250881Sjkim 1032250881Sjkim else 1033250881Sjkim { 1034250881Sjkim for ( i = 1; i <= lastsc; ++i ) 1035250881Sjkim if ( ! scxclu[i] ) 1036250881Sjkim scset[i] = 1037250881Sjkim mkbranch( scset[i], 1038250881Sjkim pat ); 1039250881Sjkim } 1040250881Sjkim } 1041250881Sjkimbreak; 1042250881Sjkimcase 28: 1043250881Sjkim#line 292 "parse.y" 1044250881Sjkim { 1045250881Sjkim if ( scon_stk_ptr > 0 ) 1046250881Sjkim build_eof_action(); 1047250881Sjkim 1048250881Sjkim else 1049250881Sjkim { 1050250881Sjkim /* This EOF applies to all start conditions 1051250881Sjkim * which don't already have EOF actions. 1052250881Sjkim */ 1053250881Sjkim for ( i = 1; i <= lastsc; ++i ) 1054250881Sjkim if ( ! sceof[i] ) 1055250881Sjkim scon_stk[++scon_stk_ptr] = i; 1056250881Sjkim 1057250881Sjkim if ( scon_stk_ptr == 0 ) 1058250881Sjkim warn( 1059250881Sjkim "all start conditions already have <<EOF>> rules" ); 1060250881Sjkim 1061250881Sjkim else 1062250881Sjkim build_eof_action(); 1063250881Sjkim } 1064250881Sjkim } 1065250881Sjkimbreak; 1066250881Sjkimcase 29: 1067250881Sjkim#line 315 "parse.y" 1068250881Sjkim { synerr( _("unrecognized rule") ); } 1069250881Sjkimbreak; 1070250881Sjkimcase 30: 1071250881Sjkim#line 319 "parse.y" 1072250881Sjkim { yyval = scon_stk_ptr; } 1073250881Sjkimbreak; 1074250881Sjkimcase 31: 1075250881Sjkim#line 323 "parse.y" 1076250881Sjkim { yyval = yystack.l_mark[-2]; } 1077250881Sjkimbreak; 1078250881Sjkimcase 32: 1079250881Sjkim#line 326 "parse.y" 1080250881Sjkim { 1081250881Sjkim yyval = scon_stk_ptr; 1082250881Sjkim 1083250881Sjkim for ( i = 1; i <= lastsc; ++i ) 1084250881Sjkim { 1085250881Sjkim int j; 1086250881Sjkim 1087250881Sjkim for ( j = 1; j <= scon_stk_ptr; ++j ) 1088250881Sjkim if ( scon_stk[j] == i ) 1089250881Sjkim break; 1090250881Sjkim 1091250881Sjkim if ( j > scon_stk_ptr ) 1092250881Sjkim scon_stk[++scon_stk_ptr] = i; 1093250881Sjkim } 1094250881Sjkim } 1095250881Sjkimbreak; 1096250881Sjkimcase 33: 1097250881Sjkim#line 343 "parse.y" 1098250881Sjkim { yyval = scon_stk_ptr; } 1099250881Sjkimbreak; 1100250881Sjkimcase 36: 1101250881Sjkim#line 351 "parse.y" 1102250881Sjkim { synerr( _("bad start condition list") ); } 1103250881Sjkimbreak; 1104250881Sjkimcase 37: 1105250881Sjkim#line 355 "parse.y" 1106250881Sjkim { 1107250881Sjkim if ( (scnum = sclookup( nmstr )) == 0 ) 1108250881Sjkim format_pinpoint_message( 1109250881Sjkim "undeclared start condition %s", 1110250881Sjkim nmstr ); 1111250881Sjkim else 1112250881Sjkim { 1113250881Sjkim for ( i = 1; i <= scon_stk_ptr; ++i ) 1114250881Sjkim if ( scon_stk[i] == scnum ) 1115250881Sjkim { 1116250881Sjkim format_warn( 1117250881Sjkim "<%s> specified twice", 1118250881Sjkim scname[scnum] ); 1119250881Sjkim break; 1120250881Sjkim } 1121250881Sjkim 1122250881Sjkim if ( i > scon_stk_ptr ) 1123250881Sjkim scon_stk[++scon_stk_ptr] = scnum; 1124250881Sjkim } 1125250881Sjkim } 1126250881Sjkimbreak; 1127250881Sjkimcase 38: 1128250881Sjkim#line 378 "parse.y" 1129250881Sjkim { 1130250881Sjkim if ( transchar[lastst[yystack.l_mark[0]]] != SYM_EPSILON ) 1131250881Sjkim /* Provide final transition \now/ so it 1132250881Sjkim * will be marked as a trailing context 1133250881Sjkim * state. 1134250881Sjkim */ 1135250881Sjkim yystack.l_mark[0] = link_machines( yystack.l_mark[0], 1136250881Sjkim mkstate( SYM_EPSILON ) ); 1137250881Sjkim 1138250881Sjkim mark_beginning_as_normal( yystack.l_mark[0] ); 1139250881Sjkim current_state_type = STATE_NORMAL; 1140250881Sjkim 1141250881Sjkim if ( previous_continued_action ) 1142250881Sjkim { 1143250881Sjkim /* We need to treat this as variable trailing 1144250881Sjkim * context so that the backup does not happen 1145250881Sjkim * in the action but before the action switch 1146250881Sjkim * statement. If the backup happens in the 1147250881Sjkim * action, then the rules "falling into" this 1148250881Sjkim * one's action will *also* do the backup, 1149250881Sjkim * erroneously. 1150250881Sjkim */ 1151250881Sjkim if ( ! varlength || headcnt != 0 ) 1152250881Sjkim warn( 1153250881Sjkim "trailing context made variable due to preceding '|' action" ); 1154250881Sjkim 1155250881Sjkim /* Mark as variable. */ 1156250881Sjkim varlength = true; 1157250881Sjkim headcnt = 0; 1158250881Sjkim 1159250881Sjkim } 1160250881Sjkim 1161250881Sjkim if ( lex_compat || (varlength && headcnt == 0) ) 1162250881Sjkim { /* variable trailing context rule */ 1163250881Sjkim /* Mark the first part of the rule as the 1164250881Sjkim * accepting "head" part of a trailing 1165250881Sjkim * context rule. 1166250881Sjkim * 1167250881Sjkim * By the way, we didn't do this at the 1168250881Sjkim * beginning of this production because back 1169250881Sjkim * then current_state_type was set up for a 1170250881Sjkim * trail rule, and add_accept() can create 1171250881Sjkim * a new state ... 1172250881Sjkim */ 1173250881Sjkim add_accept( yystack.l_mark[-1], 1174250881Sjkim num_rules | YY_TRAILING_HEAD_MASK ); 1175250881Sjkim variable_trail_rule = true; 1176250881Sjkim } 1177250881Sjkim 1178250881Sjkim else 1179250881Sjkim trailcnt = rulelen; 1180250881Sjkim 1181250881Sjkim yyval = link_machines( yystack.l_mark[-1], yystack.l_mark[0] ); 1182250881Sjkim } 1183250881Sjkimbreak; 1184250881Sjkimcase 39: 1185250881Sjkim#line 434 "parse.y" 1186250881Sjkim { synerr( _("trailing context used twice") ); } 1187250881Sjkimbreak; 1188250881Sjkimcase 40: 1189250881Sjkim#line 437 "parse.y" 1190250881Sjkim { 1191250881Sjkim headcnt = 0; 1192250881Sjkim trailcnt = 1; 1193250881Sjkim rulelen = 1; 1194250881Sjkim varlength = false; 1195250881Sjkim 1196250881Sjkim current_state_type = STATE_TRAILING_CONTEXT; 1197250881Sjkim 1198250881Sjkim if ( trlcontxt ) 1199250881Sjkim { 1200250881Sjkim synerr( _("trailing context used twice") ); 1201250881Sjkim yyval = mkstate( SYM_EPSILON ); 1202250881Sjkim } 1203250881Sjkim 1204250881Sjkim else if ( previous_continued_action ) 1205250881Sjkim { 1206250881Sjkim /* See the comment in the rule for "re2 re" 1207250881Sjkim * above. 1208250881Sjkim */ 1209250881Sjkim warn( 1210250881Sjkim "trailing context made variable due to preceding '|' action" ); 1211250881Sjkim 1212250881Sjkim varlength = true; 1213250881Sjkim } 1214250881Sjkim 1215250881Sjkim if ( lex_compat || varlength ) 1216250881Sjkim { 1217250881Sjkim /* Again, see the comment in the rule for 1218250881Sjkim * "re2 re" above. 1219250881Sjkim */ 1220250881Sjkim add_accept( yystack.l_mark[-1], 1221250881Sjkim num_rules | YY_TRAILING_HEAD_MASK ); 1222250881Sjkim variable_trail_rule = true; 1223250881Sjkim } 1224250881Sjkim 1225250881Sjkim trlcontxt = true; 1226250881Sjkim 1227250881Sjkim eps = mkstate( SYM_EPSILON ); 1228250881Sjkim yyval = link_machines( yystack.l_mark[-1], 1229250881Sjkim link_machines( eps, mkstate( '\n' ) ) ); 1230250881Sjkim } 1231250881Sjkimbreak; 1232250881Sjkimcase 41: 1233250881Sjkim#line 480 "parse.y" 1234250881Sjkim { 1235250881Sjkim yyval = yystack.l_mark[0]; 1236250881Sjkim 1237250881Sjkim if ( trlcontxt ) 1238250881Sjkim { 1239250881Sjkim if ( lex_compat || (varlength && headcnt == 0) ) 1240250881Sjkim /* Both head and trail are 1241250881Sjkim * variable-length. 1242250881Sjkim */ 1243250881Sjkim variable_trail_rule = true; 1244250881Sjkim else 1245250881Sjkim trailcnt = rulelen; 1246250881Sjkim } 1247250881Sjkim } 1248250881Sjkimbreak; 1249250881Sjkimcase 42: 1250250881Sjkim#line 498 "parse.y" 1251250881Sjkim { 1252250881Sjkim varlength = true; 1253250881Sjkim yyval = mkor( yystack.l_mark[-2], yystack.l_mark[0] ); 1254250881Sjkim } 1255250881Sjkimbreak; 1256250881Sjkimcase 43: 1257250881Sjkim#line 504 "parse.y" 1258250881Sjkim { yyval = yystack.l_mark[0]; } 1259250881Sjkimbreak; 1260250881Sjkimcase 44: 1261250881Sjkim#line 509 "parse.y" 1262250881Sjkim { 1263250881Sjkim /* This rule is written separately so the 1264250881Sjkim * reduction will occur before the trailing 1265250881Sjkim * series is parsed. 1266250881Sjkim */ 1267250881Sjkim 1268250881Sjkim if ( trlcontxt ) 1269250881Sjkim synerr( _("trailing context used twice") ); 1270250881Sjkim else 1271250881Sjkim trlcontxt = true; 1272250881Sjkim 1273250881Sjkim if ( varlength ) 1274250881Sjkim /* We hope the trailing context is 1275250881Sjkim * fixed-length. 1276250881Sjkim */ 1277250881Sjkim varlength = false; 1278250881Sjkim else 1279250881Sjkim headcnt = rulelen; 1280250881Sjkim 1281250881Sjkim rulelen = 0; 1282250881Sjkim 1283250881Sjkim current_state_type = STATE_TRAILING_CONTEXT; 1284250881Sjkim yyval = yystack.l_mark[-1]; 1285250881Sjkim } 1286250881Sjkimbreak; 1287250881Sjkimcase 45: 1288250881Sjkim#line 536 "parse.y" 1289250881Sjkim { 1290250881Sjkim /* This is where concatenation of adjacent patterns 1291250881Sjkim * gets done. 1292250881Sjkim */ 1293250881Sjkim yyval = link_machines( yystack.l_mark[-1], yystack.l_mark[0] ); 1294250881Sjkim } 1295250881Sjkimbreak; 1296250881Sjkimcase 46: 1297250881Sjkim#line 544 "parse.y" 1298250881Sjkim { yyval = yystack.l_mark[0]; } 1299250881Sjkimbreak; 1300250881Sjkimcase 47: 1301250881Sjkim#line 547 "parse.y" 1302250881Sjkim { 1303250881Sjkim varlength = true; 1304250881Sjkim 1305250881Sjkim if ( yystack.l_mark[-3] > yystack.l_mark[-1] || yystack.l_mark[-3] < 0 ) 1306250881Sjkim { 1307250881Sjkim synerr( _("bad iteration values") ); 1308250881Sjkim yyval = yystack.l_mark[-5]; 1309250881Sjkim } 1310250881Sjkim else 1311250881Sjkim { 1312250881Sjkim if ( yystack.l_mark[-3] == 0 ) 1313250881Sjkim { 1314250881Sjkim if ( yystack.l_mark[-1] <= 0 ) 1315250881Sjkim { 1316250881Sjkim synerr( 1317250881Sjkim _("bad iteration values") ); 1318250881Sjkim yyval = yystack.l_mark[-5]; 1319250881Sjkim } 1320250881Sjkim else 1321250881Sjkim yyval = mkopt( 1322250881Sjkim mkrep( yystack.l_mark[-5], 1, yystack.l_mark[-1] ) ); 1323250881Sjkim } 1324250881Sjkim else 1325250881Sjkim yyval = mkrep( yystack.l_mark[-5], yystack.l_mark[-3], yystack.l_mark[-1] ); 1326250881Sjkim } 1327250881Sjkim } 1328250881Sjkimbreak; 1329250881Sjkimcase 48: 1330250881Sjkim#line 575 "parse.y" 1331250881Sjkim { 1332250881Sjkim varlength = true; 1333250881Sjkim 1334250881Sjkim if ( yystack.l_mark[-2] <= 0 ) 1335250881Sjkim { 1336250881Sjkim synerr( _("iteration value must be positive") ); 1337250881Sjkim yyval = yystack.l_mark[-4]; 1338250881Sjkim } 1339250881Sjkim 1340250881Sjkim else 1341250881Sjkim yyval = mkrep( yystack.l_mark[-4], yystack.l_mark[-2], INFINITE_REPEAT ); 1342250881Sjkim } 1343250881Sjkimbreak; 1344250881Sjkimcase 49: 1345250881Sjkim#line 589 "parse.y" 1346250881Sjkim { 1347250881Sjkim /* The series could be something like "(foo)", 1348250881Sjkim * in which case we have no idea what its length 1349250881Sjkim * is, so we punt here. 1350250881Sjkim */ 1351250881Sjkim varlength = true; 1352250881Sjkim 1353250881Sjkim if ( yystack.l_mark[-1] <= 0 ) 1354250881Sjkim { 1355250881Sjkim synerr( _("iteration value must be positive") 1356250881Sjkim ); 1357250881Sjkim yyval = yystack.l_mark[-3]; 1358250881Sjkim } 1359250881Sjkim 1360250881Sjkim else 1361250881Sjkim yyval = link_machines( yystack.l_mark[-3], 1362250881Sjkim copysingl( yystack.l_mark[-3], yystack.l_mark[-1] - 1 ) ); 1363250881Sjkim } 1364250881Sjkimbreak; 1365250881Sjkimcase 50: 1366250881Sjkim#line 611 "parse.y" 1367250881Sjkim { 1368250881Sjkim varlength = true; 1369250881Sjkim 1370250881Sjkim yyval = mkclos( yystack.l_mark[-1] ); 1371250881Sjkim } 1372250881Sjkimbreak; 1373250881Sjkimcase 51: 1374250881Sjkim#line 618 "parse.y" 1375250881Sjkim { 1376250881Sjkim varlength = true; 1377250881Sjkim yyval = mkposcl( yystack.l_mark[-1] ); 1378250881Sjkim } 1379250881Sjkimbreak; 1380250881Sjkimcase 52: 1381250881Sjkim#line 624 "parse.y" 1382250881Sjkim { 1383250881Sjkim varlength = true; 1384250881Sjkim yyval = mkopt( yystack.l_mark[-1] ); 1385250881Sjkim } 1386250881Sjkimbreak; 1387250881Sjkimcase 53: 1388250881Sjkim#line 630 "parse.y" 1389250881Sjkim { 1390250881Sjkim varlength = true; 1391250881Sjkim 1392250881Sjkim if ( yystack.l_mark[-3] > yystack.l_mark[-1] || yystack.l_mark[-3] < 0 ) 1393250881Sjkim { 1394250881Sjkim synerr( _("bad iteration values") ); 1395250881Sjkim yyval = yystack.l_mark[-5]; 1396250881Sjkim } 1397250881Sjkim else 1398250881Sjkim { 1399250881Sjkim if ( yystack.l_mark[-3] == 0 ) 1400250881Sjkim { 1401250881Sjkim if ( yystack.l_mark[-1] <= 0 ) 1402250881Sjkim { 1403250881Sjkim synerr( 1404250881Sjkim _("bad iteration values") ); 1405250881Sjkim yyval = yystack.l_mark[-5]; 1406250881Sjkim } 1407250881Sjkim else 1408250881Sjkim yyval = mkopt( 1409250881Sjkim mkrep( yystack.l_mark[-5], 1, yystack.l_mark[-1] ) ); 1410250881Sjkim } 1411250881Sjkim else 1412250881Sjkim yyval = mkrep( yystack.l_mark[-5], yystack.l_mark[-3], yystack.l_mark[-1] ); 1413250881Sjkim } 1414250881Sjkim } 1415250881Sjkimbreak; 1416250881Sjkimcase 54: 1417250881Sjkim#line 658 "parse.y" 1418250881Sjkim { 1419250881Sjkim varlength = true; 1420250881Sjkim 1421250881Sjkim if ( yystack.l_mark[-2] <= 0 ) 1422250881Sjkim { 1423250881Sjkim synerr( _("iteration value must be positive") ); 1424250881Sjkim yyval = yystack.l_mark[-4]; 1425250881Sjkim } 1426250881Sjkim 1427250881Sjkim else 1428250881Sjkim yyval = mkrep( yystack.l_mark[-4], yystack.l_mark[-2], INFINITE_REPEAT ); 1429250881Sjkim } 1430250881Sjkimbreak; 1431250881Sjkimcase 55: 1432250881Sjkim#line 672 "parse.y" 1433250881Sjkim { 1434250881Sjkim /* The singleton could be something like "(foo)", 1435250881Sjkim * in which case we have no idea what its length 1436250881Sjkim * is, so we punt here. 1437250881Sjkim */ 1438250881Sjkim varlength = true; 1439250881Sjkim 1440250881Sjkim if ( yystack.l_mark[-1] <= 0 ) 1441250881Sjkim { 1442250881Sjkim synerr( _("iteration value must be positive") ); 1443250881Sjkim yyval = yystack.l_mark[-3]; 1444250881Sjkim } 1445250881Sjkim 1446250881Sjkim else 1447250881Sjkim yyval = link_machines( yystack.l_mark[-3], 1448250881Sjkim copysingl( yystack.l_mark[-3], yystack.l_mark[-1] - 1 ) ); 1449250881Sjkim } 1450250881Sjkimbreak; 1451250881Sjkimcase 56: 1452250881Sjkim#line 691 "parse.y" 1453250881Sjkim { 1454250881Sjkim if ( ! madeany ) 1455250881Sjkim { 1456250881Sjkim /* Create the '.' character class. */ 1457250881Sjkim ccldot = cclinit(); 1458250881Sjkim ccladd( ccldot, '\n' ); 1459250881Sjkim cclnegate( ccldot ); 1460250881Sjkim 1461250881Sjkim if ( useecs ) 1462250881Sjkim mkeccl( ccltbl + cclmap[ccldot], 1463250881Sjkim ccllen[ccldot], nextecm, 1464250881Sjkim ecgroup, csize, csize ); 1465250881Sjkim 1466250881Sjkim /* Create the (?s:'.') character class. */ 1467250881Sjkim cclany = cclinit(); 1468250881Sjkim cclnegate( cclany ); 1469250881Sjkim 1470250881Sjkim if ( useecs ) 1471250881Sjkim mkeccl( ccltbl + cclmap[cclany], 1472250881Sjkim ccllen[cclany], nextecm, 1473250881Sjkim ecgroup, csize, csize ); 1474250881Sjkim 1475250881Sjkim madeany = true; 1476250881Sjkim } 1477250881Sjkim 1478250881Sjkim ++rulelen; 1479250881Sjkim 1480250881Sjkim if (sf_dot_all()) 1481250881Sjkim yyval = mkstate( -cclany ); 1482250881Sjkim else 1483250881Sjkim yyval = mkstate( -ccldot ); 1484250881Sjkim } 1485250881Sjkimbreak; 1486250881Sjkimcase 57: 1487250881Sjkim#line 725 "parse.y" 1488250881Sjkim { 1489250881Sjkim /* Sort characters for fast searching. 1490250881Sjkim */ 1491250881Sjkim qsort( ccltbl + cclmap[yystack.l_mark[0]], ccllen[yystack.l_mark[0]], sizeof (*ccltbl), cclcmp ); 1492250881Sjkim 1493250881Sjkim if ( useecs ) 1494250881Sjkim mkeccl( ccltbl + cclmap[yystack.l_mark[0]], ccllen[yystack.l_mark[0]], 1495250881Sjkim nextecm, ecgroup, csize, csize ); 1496250881Sjkim 1497250881Sjkim ++rulelen; 1498250881Sjkim 1499250881Sjkim if (ccl_has_nl[yystack.l_mark[0]]) 1500250881Sjkim rule_has_nl[num_rules] = true; 1501250881Sjkim 1502250881Sjkim yyval = mkstate( -yystack.l_mark[0] ); 1503250881Sjkim } 1504250881Sjkimbreak; 1505250881Sjkimcase 58: 1506250881Sjkim#line 743 "parse.y" 1507250881Sjkim { 1508250881Sjkim ++rulelen; 1509250881Sjkim 1510250881Sjkim if (ccl_has_nl[yystack.l_mark[0]]) 1511250881Sjkim rule_has_nl[num_rules] = true; 1512250881Sjkim 1513250881Sjkim yyval = mkstate( -yystack.l_mark[0] ); 1514250881Sjkim } 1515250881Sjkimbreak; 1516250881Sjkimcase 59: 1517250881Sjkim#line 753 "parse.y" 1518250881Sjkim { yyval = yystack.l_mark[-1]; } 1519250881Sjkimbreak; 1520250881Sjkimcase 60: 1521250881Sjkim#line 756 "parse.y" 1522250881Sjkim { yyval = yystack.l_mark[-1]; } 1523250881Sjkimbreak; 1524250881Sjkimcase 61: 1525250881Sjkim#line 759 "parse.y" 1526250881Sjkim { 1527250881Sjkim ++rulelen; 1528250881Sjkim 1529250881Sjkim if (yystack.l_mark[0] == nlch) 1530250881Sjkim rule_has_nl[num_rules] = true; 1531250881Sjkim 1532250881Sjkim if (sf_case_ins() && has_case(yystack.l_mark[0])) 1533250881Sjkim /* create an alternation, as in (a|A) */ 1534250881Sjkim yyval = mkor (mkstate(yystack.l_mark[0]), mkstate(reverse_case(yystack.l_mark[0]))); 1535250881Sjkim else 1536250881Sjkim yyval = mkstate( yystack.l_mark[0] ); 1537250881Sjkim } 1538250881Sjkimbreak; 1539250881Sjkimcase 62: 1540250881Sjkim#line 773 "parse.y" 1541250881Sjkim { yyval = ccl_set_diff (yystack.l_mark[-2], yystack.l_mark[0]); } 1542250881Sjkimbreak; 1543250881Sjkimcase 63: 1544250881Sjkim#line 774 "parse.y" 1545250881Sjkim { yyval = ccl_set_union (yystack.l_mark[-2], yystack.l_mark[0]); } 1546250881Sjkimbreak; 1547250881Sjkimcase 65: 1548250881Sjkim#line 780 "parse.y" 1549250881Sjkim { yyval = yystack.l_mark[-1]; } 1550250881Sjkimbreak; 1551250881Sjkimcase 66: 1552250881Sjkim#line 783 "parse.y" 1553250881Sjkim { 1554250881Sjkim cclnegate( yystack.l_mark[-1] ); 1555250881Sjkim yyval = yystack.l_mark[-1]; 1556250881Sjkim } 1557250881Sjkimbreak; 1558250881Sjkimcase 67: 1559250881Sjkim#line 790 "parse.y" 1560250881Sjkim { 1561250881Sjkim 1562250881Sjkim if (sf_case_ins()) 1563250881Sjkim { 1564250881Sjkim 1565250881Sjkim /* If one end of the range has case and the other 1566250881Sjkim * does not, or the cases are different, then we're not 1567250881Sjkim * sure what range the user is trying to express. 1568250881Sjkim * Examples: [@-z] or [S-t] 1569250881Sjkim */ 1570250881Sjkim if (has_case (yystack.l_mark[-2]) != has_case (yystack.l_mark[0]) 1571250881Sjkim || (has_case (yystack.l_mark[-2]) && (b_islower (yystack.l_mark[-2]) != b_islower (yystack.l_mark[0]))) 1572250881Sjkim || (has_case (yystack.l_mark[-2]) && (b_isupper (yystack.l_mark[-2]) != b_isupper (yystack.l_mark[0])))) 1573250881Sjkim format_warn3 ( 1574250881Sjkim _("the character range [%c-%c] is ambiguous in a case-insensitive scanner"), 1575250881Sjkim yystack.l_mark[-2], yystack.l_mark[0]); 1576250881Sjkim 1577250881Sjkim /* If the range spans uppercase characters but not 1578250881Sjkim * lowercase (or vice-versa), then should we automatically 1579250881Sjkim * include lowercase characters in the range? 1580250881Sjkim * Example: [@-_] spans [a-z] but not [A-Z] 1581250881Sjkim */ 1582250881Sjkim else if (!has_case (yystack.l_mark[-2]) && !has_case (yystack.l_mark[0]) && !range_covers_case (yystack.l_mark[-2], yystack.l_mark[0])) 1583250881Sjkim format_warn3 ( 1584250881Sjkim _("the character range [%c-%c] is ambiguous in a case-insensitive scanner"), 1585250881Sjkim yystack.l_mark[-2], yystack.l_mark[0]); 1586250881Sjkim } 1587250881Sjkim 1588250881Sjkim if ( yystack.l_mark[-2] > yystack.l_mark[0] ) 1589250881Sjkim synerr( _("negative range in character class") ); 1590250881Sjkim 1591250881Sjkim else 1592250881Sjkim { 1593250881Sjkim for ( i = yystack.l_mark[-2]; i <= yystack.l_mark[0]; ++i ) 1594250881Sjkim ccladd( yystack.l_mark[-3], i ); 1595250881Sjkim 1596250881Sjkim /* Keep track if this ccl is staying in 1597250881Sjkim * alphabetical order. 1598250881Sjkim */ 1599250881Sjkim cclsorted = cclsorted && (yystack.l_mark[-2] > lastchar); 1600250881Sjkim lastchar = yystack.l_mark[0]; 1601250881Sjkim 1602250881Sjkim /* Do it again for upper/lowercase */ 1603250881Sjkim if (sf_case_ins() && has_case(yystack.l_mark[-2]) && has_case(yystack.l_mark[0])){ 1604250881Sjkim yystack.l_mark[-2] = reverse_case (yystack.l_mark[-2]); 1605250881Sjkim yystack.l_mark[0] = reverse_case (yystack.l_mark[0]); 1606250881Sjkim 1607250881Sjkim for ( i = yystack.l_mark[-2]; i <= yystack.l_mark[0]; ++i ) 1608250881Sjkim ccladd( yystack.l_mark[-3], i ); 1609250881Sjkim 1610250881Sjkim cclsorted = cclsorted && (yystack.l_mark[-2] > lastchar); 1611250881Sjkim lastchar = yystack.l_mark[0]; 1612250881Sjkim } 1613250881Sjkim 1614250881Sjkim } 1615250881Sjkim 1616250881Sjkim yyval = yystack.l_mark[-3]; 1617250881Sjkim } 1618250881Sjkimbreak; 1619250881Sjkimcase 68: 1620250881Sjkim#line 850 "parse.y" 1621250881Sjkim { 1622250881Sjkim ccladd( yystack.l_mark[-1], yystack.l_mark[0] ); 1623250881Sjkim cclsorted = cclsorted && (yystack.l_mark[0] > lastchar); 1624250881Sjkim lastchar = yystack.l_mark[0]; 1625250881Sjkim 1626250881Sjkim /* Do it again for upper/lowercase */ 1627250881Sjkim if (sf_case_ins() && has_case(yystack.l_mark[0])){ 1628250881Sjkim yystack.l_mark[0] = reverse_case (yystack.l_mark[0]); 1629250881Sjkim ccladd (yystack.l_mark[-1], yystack.l_mark[0]); 1630250881Sjkim 1631250881Sjkim cclsorted = cclsorted && (yystack.l_mark[0] > lastchar); 1632250881Sjkim lastchar = yystack.l_mark[0]; 1633250881Sjkim } 1634250881Sjkim 1635250881Sjkim yyval = yystack.l_mark[-1]; 1636250881Sjkim } 1637250881Sjkimbreak; 1638250881Sjkimcase 69: 1639250881Sjkim#line 868 "parse.y" 1640250881Sjkim { 1641250881Sjkim /* Too hard to properly maintain cclsorted. */ 1642250881Sjkim cclsorted = false; 1643250881Sjkim yyval = yystack.l_mark[-1]; 1644250881Sjkim } 1645250881Sjkimbreak; 1646250881Sjkimcase 70: 1647250881Sjkim#line 875 "parse.y" 1648250881Sjkim { 1649250881Sjkim cclsorted = true; 1650250881Sjkim lastchar = 0; 1651250881Sjkim currccl = yyval = cclinit(); 1652250881Sjkim } 1653250881Sjkimbreak; 1654250881Sjkimcase 71: 1655250881Sjkim#line 883 "parse.y" 1656250881Sjkim { CCL_EXPR(isalnum); } 1657250881Sjkimbreak; 1658250881Sjkimcase 72: 1659250881Sjkim#line 884 "parse.y" 1660250881Sjkim { CCL_EXPR(isalpha); } 1661250881Sjkimbreak; 1662250881Sjkimcase 73: 1663250881Sjkim#line 885 "parse.y" 1664250881Sjkim { CCL_EXPR(IS_BLANK); } 1665250881Sjkimbreak; 1666250881Sjkimcase 74: 1667250881Sjkim#line 886 "parse.y" 1668250881Sjkim { CCL_EXPR(iscntrl); } 1669250881Sjkimbreak; 1670250881Sjkimcase 75: 1671250881Sjkim#line 887 "parse.y" 1672250881Sjkim { CCL_EXPR(isdigit); } 1673250881Sjkimbreak; 1674250881Sjkimcase 76: 1675250881Sjkim#line 888 "parse.y" 1676250881Sjkim { CCL_EXPR(isgraph); } 1677250881Sjkimbreak; 1678250881Sjkimcase 77: 1679250881Sjkim#line 889 "parse.y" 1680250881Sjkim { 1681250881Sjkim CCL_EXPR(islower); 1682250881Sjkim if (sf_case_ins()) 1683250881Sjkim CCL_EXPR(isupper); 1684250881Sjkim } 1685250881Sjkimbreak; 1686250881Sjkimcase 78: 1687250881Sjkim#line 894 "parse.y" 1688250881Sjkim { CCL_EXPR(isprint); } 1689250881Sjkimbreak; 1690250881Sjkimcase 79: 1691250881Sjkim#line 895 "parse.y" 1692250881Sjkim { CCL_EXPR(ispunct); } 1693250881Sjkimbreak; 1694250881Sjkimcase 80: 1695250881Sjkim#line 896 "parse.y" 1696250881Sjkim { CCL_EXPR(isspace); } 1697250881Sjkimbreak; 1698250881Sjkimcase 81: 1699250881Sjkim#line 897 "parse.y" 1700250881Sjkim { CCL_EXPR(isxdigit); } 1701250881Sjkimbreak; 1702250881Sjkimcase 82: 1703250881Sjkim#line 898 "parse.y" 1704250881Sjkim { 1705250881Sjkim CCL_EXPR(isupper); 1706250881Sjkim if (sf_case_ins()) 1707250881Sjkim CCL_EXPR(islower); 1708250881Sjkim } 1709250881Sjkimbreak; 1710250881Sjkimcase 83: 1711250881Sjkim#line 904 "parse.y" 1712250881Sjkim { CCL_NEG_EXPR(isalnum); } 1713250881Sjkimbreak; 1714250881Sjkimcase 84: 1715250881Sjkim#line 905 "parse.y" 1716250881Sjkim { CCL_NEG_EXPR(isalpha); } 1717250881Sjkimbreak; 1718250881Sjkimcase 85: 1719250881Sjkim#line 906 "parse.y" 1720250881Sjkim { CCL_NEG_EXPR(IS_BLANK); } 1721250881Sjkimbreak; 1722250881Sjkimcase 86: 1723250881Sjkim#line 907 "parse.y" 1724250881Sjkim { CCL_NEG_EXPR(iscntrl); } 1725250881Sjkimbreak; 1726250881Sjkimcase 87: 1727250881Sjkim#line 908 "parse.y" 1728250881Sjkim { CCL_NEG_EXPR(isdigit); } 1729250881Sjkimbreak; 1730250881Sjkimcase 88: 1731250881Sjkim#line 909 "parse.y" 1732250881Sjkim { CCL_NEG_EXPR(isgraph); } 1733250881Sjkimbreak; 1734250881Sjkimcase 89: 1735250881Sjkim#line 910 "parse.y" 1736250881Sjkim { CCL_NEG_EXPR(isprint); } 1737250881Sjkimbreak; 1738250881Sjkimcase 90: 1739250881Sjkim#line 911 "parse.y" 1740250881Sjkim { CCL_NEG_EXPR(ispunct); } 1741250881Sjkimbreak; 1742250881Sjkimcase 91: 1743250881Sjkim#line 912 "parse.y" 1744250881Sjkim { CCL_NEG_EXPR(isspace); } 1745250881Sjkimbreak; 1746250881Sjkimcase 92: 1747250881Sjkim#line 913 "parse.y" 1748250881Sjkim { CCL_NEG_EXPR(isxdigit); } 1749250881Sjkimbreak; 1750250881Sjkimcase 93: 1751250881Sjkim#line 914 "parse.y" 1752250881Sjkim { 1753250881Sjkim if ( sf_case_ins() ) 1754250881Sjkim warn(_("[:^lower:] is ambiguous in case insensitive scanner")); 1755250881Sjkim else 1756250881Sjkim CCL_NEG_EXPR(islower); 1757250881Sjkim } 1758250881Sjkimbreak; 1759250881Sjkimcase 94: 1760250881Sjkim#line 920 "parse.y" 1761250881Sjkim { 1762250881Sjkim if ( sf_case_ins() ) 1763250881Sjkim warn(_("[:^upper:] ambiguous in case insensitive scanner")); 1764250881Sjkim else 1765250881Sjkim CCL_NEG_EXPR(isupper); 1766250881Sjkim } 1767250881Sjkimbreak; 1768250881Sjkimcase 95: 1769250881Sjkim#line 929 "parse.y" 1770250881Sjkim { 1771250881Sjkim if ( yystack.l_mark[0] == nlch ) 1772250881Sjkim rule_has_nl[num_rules] = true; 1773250881Sjkim 1774250881Sjkim ++rulelen; 1775250881Sjkim 1776250881Sjkim if (sf_case_ins() && has_case(yystack.l_mark[0])) 1777250881Sjkim yyval = mkor (mkstate(yystack.l_mark[0]), mkstate(reverse_case(yystack.l_mark[0]))); 1778250881Sjkim else 1779250881Sjkim yyval = mkstate (yystack.l_mark[0]); 1780250881Sjkim 1781250881Sjkim yyval = link_machines( yystack.l_mark[-1], yyval); 1782250881Sjkim } 1783250881Sjkimbreak; 1784250881Sjkimcase 96: 1785250881Sjkim#line 944 "parse.y" 1786250881Sjkim { yyval = mkstate( SYM_EPSILON ); } 1787250881Sjkimbreak; 1788250881Sjkim#line 1787 "parse.c" 1789250881Sjkim } 1790250881Sjkim yystack.s_mark -= yym; 1791250881Sjkim yystate = *yystack.s_mark; 1792250881Sjkim yystack.l_mark -= yym; 1793250881Sjkim yym = yylhs[yyn]; 1794250881Sjkim if (yystate == 0 && yym == 0) 1795250881Sjkim { 1796250881Sjkim#if YYDEBUG 1797250881Sjkim if (yydebug) 1798250881Sjkim printf("%sdebug: after reduction, shifting from state 0 to\ 1799250881Sjkim state %d\n", YYPREFIX, YYFINAL); 1800250881Sjkim#endif 1801250881Sjkim yystate = YYFINAL; 1802250881Sjkim *++yystack.s_mark = YYFINAL; 1803250881Sjkim *++yystack.l_mark = yyval; 1804250881Sjkim if (yychar < 0) 1805250881Sjkim { 1806250881Sjkim if ((yychar = YYLEX) < 0) yychar = 0; 1807250881Sjkim#if YYDEBUG 1808250881Sjkim if (yydebug) 1809250881Sjkim { 1810250881Sjkim yys = 0; 1811250881Sjkim if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; 1812250881Sjkim if (!yys) yys = "illegal-symbol"; 1813250881Sjkim printf("%sdebug: state %d, reading %d (%s)\n", 1814250881Sjkim YYPREFIX, YYFINAL, yychar, yys); 1815250881Sjkim } 1816250881Sjkim#endif 1817250881Sjkim } 1818250881Sjkim if (yychar == 0) goto yyaccept; 1819250881Sjkim goto yyloop; 1820250881Sjkim } 1821250881Sjkim if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && 1822250881Sjkim yyn <= YYTABLESIZE && yycheck[yyn] == yystate) 1823250881Sjkim yystate = yytable[yyn]; 1824250881Sjkim else 1825250881Sjkim yystate = yydgoto[yym]; 1826250881Sjkim#if YYDEBUG 1827250881Sjkim if (yydebug) 1828250881Sjkim printf("%sdebug: after reduction, shifting from state %d \ 1829250881Sjkimto state %d\n", YYPREFIX, *yystack.s_mark, yystate); 1830250881Sjkim#endif 1831250881Sjkim if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack)) 1832250881Sjkim { 1833250881Sjkim goto yyoverflow; 1834250881Sjkim } 1835250881Sjkim *++yystack.s_mark = (short) yystate; 1836250881Sjkim *++yystack.l_mark = yyval; 1837250881Sjkim goto yyloop; 1838250881Sjkim 1839250881Sjkimyyoverflow: 1840250881Sjkim yyerror("yacc stack overflow"); 1841250881Sjkim 1842250881Sjkimyyabort: 1843250881Sjkim yyfreestack(&yystack); 1844250881Sjkim return (1); 1845250881Sjkim 1846250881Sjkimyyaccept: 1847250881Sjkim yyfreestack(&yystack); 1848250881Sjkim return (0); 1849250881Sjkim} 1850