2 ** Inserted at beginning of c files generated by bison
3 ** REMEMBER: Change bison.reset too.
42 /*@-unqualifiedtrans@*/
49 /*drl added 11/27/2001*/
51 /* < end of bison.head > */
54 /* A Bison parser, made from signature.y
55 by GNU Bison version 1.28 */
57 #define YYBISON 1 /* Identify Bison output. */
59 #define yyparse lslparse
61 #define yyerror lslerror
62 #define yylval lsllval
63 #define yychar lslchar
64 #define yydebug lsldebug
65 #define yynerrs lslnerrs
66 #define LST_SIMPLEID 257
67 #define LST_LOGICALOP 258
69 #define LST_SIMPLEOP 260
70 #define LST_MAPSYM 261
71 #define LST_FIELDMAPSYM 262
72 #define LST_MARKERSYM 263
73 #define LST_ifTOKEN 264
74 #define LST_thenTOKEN 265
75 #define LST_elseTOKEN 266
76 #define LST_LBRACKET 267
77 #define LST_RBRACKET 268
78 #define LST_SELECTSYM 269
79 #define LST_SEPSYM 270
80 #define LST_OPENSYM 271
81 #define LST_CLOSESYM 272
85 #define LST_COMMENTSYM 276
86 #define LST_WHITESPACE 277
87 #define LST_QUANTIFIERSYM 278
88 #define LST_EQUATIONSYM 279
89 #define LST_EQSEPSYM 280
90 #define LST_COMPOSESYM 281
93 #define LST_assertsTOKEN 284
94 #define LST_assumesTOKEN 285
95 #define LST_byTOKEN 286
96 #define LST_convertsTOKEN 287
97 #define LST_enumerationTOKEN 288
98 #define LST_equationsTOKEN 289
99 #define LST_exemptingTOKEN 290
100 #define LST_forTOKEN 291
101 #define LST_generatedTOKEN 292
102 #define LST_impliesTOKEN 293
103 #define LST_includesTOKEN 294
104 #define LST_introducesTOKEN 295
105 #define LST_ofTOKEN 296
106 #define LST_partitionedTOKEN 297
107 #define LST_traitTOKEN 298
108 #define LST_tupleTOKEN 299
109 #define LST_unionTOKEN 300
110 #define LST_BADTOKEN 301
115 # include "splintMacros.nf"
116 # include "llbasic.h"
117 # include "lslparse.h"
118 # include "signature.h"
120 static void lslerror (char *);
121 extern int lsllex ();
123 /*@dependent@*/ /*@null@*/ lslOp importedlslOp;
125 /*@-noparams@*/ /* Can't list params since YYSTYPE isn't defined yet. */
126 static void yyprint (/*FILE *p_file, int p_type, YYSTYPE p_value */);
129 # define YYPRINT(file, type, value) yyprint (file, type, value)
139 ltoken ltok; /* a leaf is also an ltoken */
141 /*@only@*/ ltokenList ltokenList;
142 /*@only@*/ opFormNode opform;
143 /*@owned@*/ sigNode signature;
144 /*@only@*/ nameNode name;
145 /*@owned@*/ lslOp operator;
146 /*@only@*/ lslOpList operators;
147 /*@-redef@*/ /*@-matchfields@*/
164 #define YYFLAG -32768
167 #define YYTRANSLATE(x) ((unsigned)(x) <= 301 ? yytranslate[x] : 62)
169 static const char yytranslate[] = { 0,
170 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
171 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
172 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
173 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
174 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
175 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
176 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
177 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
178 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
179 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
180 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
181 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
182 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
183 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
184 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
185 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
186 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
187 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
188 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
189 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
190 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
191 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
192 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
193 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
194 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
195 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
196 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
197 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
198 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
199 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
204 static const short yyprhs[] = { 0,
205 0, 2, 4, 7, 11, 13, 15, 22, 24, 27,
206 30, 34, 38, 43, 48, 54, 58, 63, 68, 74,
207 77, 81, 85, 87, 89, 91, 92, 94, 96, 100,
208 102, 104, 108, 109, 111, 113, 117, 119
211 static const short yyrhs[] = { 49,
212 0, 50, 0, 49, 50, 0, 51, 19, 57, 0,
213 61, 0, 52, 0, 10, 9, 11, 9, 12, 9,
214 0, 53, 0, 9, 53, 0, 53, 9, 0, 9,
215 53, 9, 0, 17, 54, 18, 0, 9, 17, 54,
216 18, 0, 17, 54, 18, 9, 0, 9, 17, 54,
217 18, 9, 0, 13, 54, 14, 0, 9, 13, 54,
218 14, 0, 13, 54, 14, 9, 0, 9, 13, 54,
219 14, 9, 0, 15, 3, 0, 9, 15, 3, 0,
220 9, 8, 3, 0, 6, 0, 4, 0, 5, 0,
221 0, 55, 0, 9, 0, 55, 56, 9, 0, 20,
222 0, 16, 0, 58, 7, 60, 0, 0, 59, 0,
223 60, 0, 59, 20, 60, 0, 3, 0, 3, 0
229 static const short yyrline[] = { 0,
230 139, 141, 146, 150, 156, 158, 162, 164, 166, 168,
231 170, 172, 174, 176, 178, 181, 184, 187, 190, 193,
232 196, 201, 206, 208, 210, 213, 215, 218, 220, 223,
233 225, 228, 231, 233, 236, 238, 241, 247
238 #if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
240 static const char * const yytname[] = { "$","error","$undefined.","LST_SIMPLEID",
241 "LST_LOGICALOP","LST_EQOP","LST_SIMPLEOP","LST_MAPSYM","LST_FIELDMAPSYM","LST_MARKERSYM",
242 "LST_ifTOKEN","LST_thenTOKEN","LST_elseTOKEN","LST_LBRACKET","LST_RBRACKET",
243 "LST_SELECTSYM","LST_SEPSYM","LST_OPENSYM","LST_CLOSESYM","LST_COLON","LST_COMMA",
244 "LST_EOL","LST_COMMENTSYM","LST_WHITESPACE","LST_QUANTIFIERSYM","LST_EQUATIONSYM",
245 "LST_EQSEPSYM","LST_COMPOSESYM","LST_LPAR","LST_RPAR","LST_assertsTOKEN","LST_assumesTOKEN",
246 "LST_byTOKEN","LST_convertsTOKEN","LST_enumerationTOKEN","LST_equationsTOKEN",
247 "LST_exemptingTOKEN","LST_forTOKEN","LST_generatedTOKEN","LST_impliesTOKEN",
248 "LST_includesTOKEN","LST_introducesTOKEN","LST_ofTOKEN","LST_partitionedTOKEN",
249 "LST_traitTOKEN","LST_tupleTOKEN","LST_unionTOKEN","LST_BADTOKEN","top","operatorList",
250 "operator","name","opForm","anyOp","middle","placeList","separator","signature",
251 "domain","sortList","sortId","opId", NULL
255 static const short yyr1[] = { 0,
256 48, 49, 49, 50, 51, 51, 52, 52, 52, 52,
257 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
258 52, 52, 53, 53, 53, 54, 54, 55, 55, 56,
259 56, 57, 58, 58, 59, 59, 60, 61
262 static const short yyr2[] = { 0,
263 1, 1, 2, 3, 1, 1, 6, 1, 2, 2,
264 3, 3, 4, 4, 5, 3, 4, 4, 5, 2,
265 3, 3, 1, 1, 1, 0, 1, 1, 3, 1,
266 1, 3, 0, 1, 1, 3, 1, 1
269 static const short yydefact[] = { 0,
270 38, 24, 25, 23, 0, 0, 26, 0, 26, 1,
271 2, 0, 6, 8, 5, 0, 26, 0, 26, 9,
272 0, 28, 0, 27, 20, 0, 3, 33, 10, 22,
273 0, 21, 0, 11, 0, 16, 31, 30, 0, 12,
274 37, 4, 0, 34, 35, 17, 13, 0, 18, 29,
275 14, 0, 0, 19, 15, 0, 32, 36, 7, 0,
279 static const short yydefgoto[] = { 60,
280 10, 11, 12, 13, 14, 23, 24, 39, 42, 43,
284 static const short yypact[] = { -3,
285 -32768,-32768,-32768,-32768, 11, -4, 0, 8, 0, -3,
286 -32768, -1,-32768, 13,-32768, 17, 0, 22, 0, 18,
287 20,-32768, 19, -12,-32768, 14,-32768, 31,-32768,-32768,
288 21,-32768, 23,-32768, 27, 28,-32768,-32768, 29, 30,
289 -32768,-32768, 33, 24,-32768, 34, 36, 35,-32768,-32768,
290 -32768, 31, 31,-32768,-32768, 37,-32768,-32768,-32768, 42,
294 static const short yypgoto[] = {-32768,
295 -32768, 39,-32768,-32768, 45, 4,-32768,-32768,-32768,-32768,
303 static const short yytable[] = { 1,
304 2, 3, 4, 37, 21, 5, 6, 38, 22, 7,
305 25, 8, 26, 9, 2, 3, 4, 28, 16, 30,
306 31, 29, 33, 17, 32, 18, 34, 19, 57, 58,
307 35, 40, 36, 41, 46, 48, 49, 50, 51, 52,
308 47, 61, 54, 53, 55, 59, 56, 62, 27, 20
311 static const short yycheck[] = { 3,
312 4, 5, 6, 16, 9, 9, 10, 20, 9, 13,
313 3, 15, 9, 17, 4, 5, 6, 19, 8, 3,
314 17, 9, 19, 13, 3, 15, 9, 17, 52, 53,
315 11, 18, 14, 3, 14, 9, 9, 9, 9, 7,
316 18, 0, 9, 20, 9, 9, 12, 0, 10, 5
320 /* -*-C-*- Note some compilers choke on comments on `#line' lines. */
322 /* This file comes from bison-1.28. */
324 /* Skeleton output parser for bison,
325 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
327 This program is free software; you can redistribute it and/or modify
328 it under the terms of the GNU General Public License as published by
329 the Free Software Foundation; either version 2, or (at your option)
332 This program is distributed in the hope that it will be useful,
333 but WITHOUT ANY WARRANTY; without even the implied warranty of
334 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
335 GNU General Public License for more details.
337 You should have received a copy of the GNU General Public License
338 along with this program; if not, write to the Free Software
339 Foundation, Inc., 59 Temple Place - Suite 330,
340 Boston, MA 02111-1307, USA. */
342 /* As a special exception, when this file is copied by Bison into a
343 Bison output file, you may use that output file without restriction.
344 This special exception was added by the Free Software Foundation
345 in version 1.24 of Bison. */
347 /* This is the parser code that is written into each bison parser
348 when the %semantic_parser declaration is not specified in the grammar.
349 It was written by Richard Stallman by simplifying the hairy parser
350 used when %semantic_parser is specified. */
352 #ifndef YYSTACK_USE_ALLOCA
354 #define YYSTACK_USE_ALLOCA
355 #else /* alloca not defined */
357 #define YYSTACK_USE_ALLOCA
358 #define alloca __builtin_alloca
359 #else /* not GNU C. */
360 #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
361 #define YYSTACK_USE_ALLOCA
363 #else /* not sparc */
364 /* We think this test detects Watcom and Microsoft C. */
365 /* This used to test MSDOS, but that is a bad idea
366 since that symbol is in the user namespace. */
367 #if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
368 #if 0 /* No need for malloc.h, which pollutes the namespace;
369 instead, just don't use alloca. */
372 #else /* not MSDOS, or __TURBOC__ */
374 /* I don't know what this was needed for, but it pollutes the namespace.
375 So I turned it off. rms, 2 May 1997. */
376 /* #include <malloc.h> */
378 #define YYSTACK_USE_ALLOCA
379 #else /* not MSDOS, or __TURBOC__, or _AIX */
381 #ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
382 and on HPUX 10. Eventually we can turn this on. */
383 #define YYSTACK_USE_ALLOCA
384 #define alloca __builtin_alloca
387 #endif /* not _AIX */
388 #endif /* not MSDOS, or __TURBOC__ */
389 #endif /* not sparc */
390 #endif /* not GNU C */
391 #endif /* alloca not defined */
392 #endif /* YYSTACK_USE_ALLOCA not defined */
394 #ifdef YYSTACK_USE_ALLOCA
395 #define YYSTACK_ALLOC alloca
397 #define YYSTACK_ALLOC malloc
400 /* Note: there must be only one dollar sign in this file.
401 It is replaced by the list of actions, each action
402 as one case of the switch. */
404 #define yyerrok (yyerrstatus = 0)
405 #define yyclearin (yychar = YYEMPTY)
408 #define YYACCEPT goto yyacceptlab
409 #define YYABORT goto yyabortlab
410 #define YYERROR goto yyerrlab1
411 /* Like YYERROR except do call yyerror.
412 This remains here temporarily to ease the
413 transition to the new meaning of YYERROR, for GCC.
414 Once GCC version 2 has supplanted version 1, this can go. */
415 #define YYFAIL goto yyerrlab
416 #define YYRECOVERING() (!!yyerrstatus)
417 #define YYBACKUP(token, value) \
419 if (yychar == YYEMPTY && yylen == 1) \
420 { yychar = (token), yylval = (value); \
421 yychar1 = YYTRANSLATE (yychar); \
426 { yyerror ("syntax error: cannot back up"); YYERROR; } \
430 #define YYERRCODE 256
433 #define YYLEX yylex()
439 #define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
441 #define YYLEX yylex(&yylval, &yylloc)
443 #else /* not YYLSP_NEEDED */
445 #define YYLEX yylex(&yylval, YYLEX_PARAM)
447 #define YYLEX yylex(&yylval)
449 #endif /* not YYLSP_NEEDED */
452 /* If nonreentrant, generate the variables here */
456 int yychar; /* the lookahead symbol */
457 YYSTYPE yylval; /* the semantic value of the */
458 /* lookahead symbol */
461 YYLTYPE yylloc; /* location data for the lookahead */
465 int yynerrs; /* number of parse errors so far */
466 #endif /* not YYPURE */
469 int yydebug; /* nonzero means print parse trace */
470 /* Since this is uninitialized, it does not stop multiple parsers
474 /* YYINITDEPTH indicates the initial size of the parser's stacks */
477 #define YYINITDEPTH 200
480 /* YYMAXDEPTH is the maximum size the stacks can grow to
481 (effective only if the built-in stack extension method is used). */
488 #define YYMAXDEPTH 10000
491 /* Define __yy_memcpy. Note that the size argument
492 should be passed with type unsigned int, because that is what the non-GCC
493 definitions require. With GCC, __builtin_memcpy takes an arg
494 of type size_t, but it can handle unsigned int. */
496 #if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
497 #define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
498 #else /* not GNU C or C++ */
501 /* This is the most reliable way to avoid incompatibilities
502 in available built-in functions on various systems. */
504 __yy_memcpy (to, from, count)
509 register char *f = from;
510 register char *t = to;
511 register int i = count;
517 #else /* __cplusplus */
519 /* This is the most reliable way to avoid incompatibilities
520 in available built-in functions on various systems. */
522 __yy_memcpy (char *to, char *from, unsigned int count)
524 register char *t = to;
525 register char *f = from;
526 register int i = count;
537 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
538 into yyparse. The argument should have type void *.
539 It should actually point to an object.
540 Grammar actions can access the variable by casting it
541 to the proper pointer type. */
545 #define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
546 #define YYPARSE_PARAM_DECL
547 #else /* not __cplusplus */
548 #define YYPARSE_PARAM_ARG YYPARSE_PARAM
549 #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
550 #endif /* not __cplusplus */
551 #else /* not YYPARSE_PARAM */
552 #define YYPARSE_PARAM_ARG
553 #define YYPARSE_PARAM_DECL
554 #endif /* not YYPARSE_PARAM */
556 /* Prevent warning if -Wstrict-prototypes. */
559 int yyparse (void *);
566 yyparse(YYPARSE_PARAM_ARG)
569 register int yystate;
571 register short *yyssp;
572 register YYSTYPE *yyvsp;
573 int yyerrstatus; /* number of tokens to shift before error messages enabled */
574 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
576 short yyssa[YYINITDEPTH]; /* the state stack */
577 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
579 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
580 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
583 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
584 YYLTYPE *yyls = yylsa;
587 #define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
589 #define YYPOPSTACK (yyvsp--, yyssp--)
592 int yystacksize = YYINITDEPTH;
593 int yyfree_stacks = 0;
604 YYSTYPE yyval; /* the variable used to return */
605 /* semantic values from the action */
612 fprintf(stderr, "Starting parse\n");
618 yychar = YYEMPTY; /* Cause a token to be read. */
620 /* Initialize stack pointers.
621 Waste one element of value and location stack
622 so that they stay on the same level as the state stack.
623 The wasted elements are never initialized. */
631 /* Push a new state, which is found in yystate . */
632 /* In all cases, when you get here, the value and location stacks
633 have just been pushed. so pushing a state here evens the stacks. */
638 if (yyssp >= yyss + yystacksize - 1)
640 /* Give user a chance to reallocate the stack */
641 /* Use copies of these so that the &'s don't force the real ones into memory. */
642 YYSTYPE *yyvs1 = yyvs;
645 YYLTYPE *yyls1 = yyls;
648 /* Get the current used size of the three stacks, in elements. */
649 int size = yyssp - yyss + 1;
652 /* Each stack pointer address is followed by the size of
653 the data in use in that stack, in bytes. */
655 /* This used to be a conditional around just the two extra args,
656 but that might be undefined if yyoverflow is a macro. */
657 yyoverflow("parser stack overflow",
658 &yyss1, size * sizeof (*yyssp),
659 &yyvs1, size * sizeof (*yyvsp),
660 &yyls1, size * sizeof (*yylsp),
663 yyoverflow("parser stack overflow",
664 &yyss1, size * sizeof (*yyssp),
665 &yyvs1, size * sizeof (*yyvsp),
669 yyss = yyss1; yyvs = yyvs1;
673 #else /* no yyoverflow */
674 /* Extend the stack our own way. */
675 if (yystacksize >= YYMAXDEPTH)
677 yyerror("parser stack overflow");
689 if (yystacksize > YYMAXDEPTH)
690 yystacksize = YYMAXDEPTH;
691 #ifndef YYSTACK_USE_ALLOCA
694 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
695 __yy_memcpy ((char *)yyss, (char *)yyss1,
696 size * (unsigned int) sizeof (*yyssp));
697 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
698 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
699 size * (unsigned int) sizeof (*yyvsp));
701 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
702 __yy_memcpy ((char *)yyls, (char *)yyls1,
703 size * (unsigned int) sizeof (*yylsp));
705 #endif /* no yyoverflow */
707 yyssp = yyss + size - 1;
708 yyvsp = yyvs + size - 1;
710 yylsp = yyls + size - 1;
715 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
718 if (yyssp >= yyss + yystacksize - 1)
724 fprintf(stderr, "Entering state %d\n", yystate);
730 /* Do appropriate processing given the current state. */
731 /* Read a lookahead token if we need one and don't already have one. */
734 /* First try to decide what to do without reference to lookahead token. */
736 yyn = yypact[yystate];
740 /* Not known => get a lookahead token if don't already have one. */
742 /* yychar is either YYEMPTY or YYEOF
743 or a valid token in external form. */
745 if (yychar == YYEMPTY)
749 fprintf(stderr, "Reading a token: ");
754 /* Convert token to internal form (in yychar1) for indexing tables with */
756 if (yychar <= 0) /* This means end of input. */
759 yychar = YYEOF; /* Don't call YYLEX any more */
763 fprintf(stderr, "Now at end of input.\n");
768 yychar1 = YYTRANSLATE(yychar);
773 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
774 /* Give the individual parser a way to print the precise meaning
775 of a token, for further debugging info. */
777 YYPRINT (stderr, yychar, yylval);
779 fprintf (stderr, ")\n");
785 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
790 /* yyn is what to do for this token type in this state.
791 Negative => reduce, -yyn is rule number.
792 Positive => shift, yyn is new state.
793 New state is final state => don't bother to shift,
795 0, or most negative number => error. */
810 /* Shift the lookahead token. */
814 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
817 /* Discard the token being shifted unless it is eof. */
826 /* count tokens shifted since error; after three, turn off error status. */
827 if (yyerrstatus) yyerrstatus--;
832 /* Do the default action for the current state. */
835 yyn = yydefact[yystate];
839 /* Do a reduction. yyn is the number of a rule to reduce with. */
843 yyval = yyvsp[1-yylen]; /* implement default value of the action */
850 fprintf (stderr, "Reducing via rule %d (line %d), ",
853 /* Print the symbols being reduced, and their result. */
854 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
855 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
856 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
864 { lslOpList_free (yyvsp[0].operators); ;
867 { lslOpList x = lslOpList_new ();
868 g_importedlslOp = yyvsp[0].operator;
869 lslOpList_add (x, yyvsp[0].operator);
870 yyval.operators = x; ;
873 { lslOpList_add (yyvsp[-1].operators, yyvsp[0].operator);
874 yyval.operators = yyvsp[-1].operators; ;
877 { yyval.operator = makelslOpNode (yyvsp[-2].name, yyvsp[0].signature); ;
880 { yyval.name = makeNameNodeId (yyvsp[0].ltok); ;
883 { yyval.name = makeNameNodeForm (yyvsp[0].opform); ;
886 { yyval.opform = makeOpFormNode (yyvsp[-5].ltok, OPF_IF, opFormUnion_createMiddle (0), ltoken_undefined); ;
889 { yyval.opform = makeOpFormNode (yyvsp[0].ltok, OPF_ANYOP, opFormUnion_createAnyOp (yyvsp[0].ltok), ltoken_undefined); ;
892 { yyval.opform = makeOpFormNode (yyvsp[-1].ltok, OPF_MANYOP, opFormUnion_createAnyOp (yyvsp[0].ltok), ltoken_undefined); ;
895 { yyval.opform = makeOpFormNode (yyvsp[-1].ltok, OPF_ANYOPM, opFormUnion_createAnyOp (yyvsp[-1].ltok), ltoken_undefined); ;
898 { yyval.opform = makeOpFormNode (yyvsp[-2].ltok, OPF_MANYOPM, opFormUnion_createAnyOp (yyvsp[-1].ltok), ltoken_undefined); ;
901 { yyval.opform = makeOpFormNode (yyvsp[-2].ltok, OPF_MIDDLE, opFormUnion_createMiddle (yyvsp[-1].count), yyvsp[0].ltok); ;
904 { yyval.opform = makeOpFormNode (yyvsp[-2].ltok, OPF_MMIDDLE, opFormUnion_createMiddle (yyvsp[-1].count), yyvsp[0].ltok); ;
907 { yyval.opform = makeOpFormNode (yyvsp[-3].ltok, OPF_MIDDLEM, opFormUnion_createMiddle (yyvsp[-2].count), yyvsp[-1].ltok); ;
910 { yyval.opform = makeOpFormNode (yyvsp[-3].ltok, OPF_MMIDDLEM,
911 opFormUnion_createMiddle (yyvsp[-2].count), yyvsp[-1].ltok); ;
914 { yyval.opform = makeOpFormNode (yyvsp[-2].ltok, OPF_BMIDDLE,
915 opFormUnion_createMiddle (yyvsp[-1].count), yyvsp[0].ltok); ;
918 { yyval.opform = makeOpFormNode (yyvsp[-2].ltok, OPF_BMMIDDLE,
919 opFormUnion_createMiddle (yyvsp[-1].count), yyvsp[0].ltok); ;
922 { yyval.opform = makeOpFormNode (yyvsp[-3].ltok, OPF_BMIDDLEM,
923 opFormUnion_createMiddle (yyvsp[-2].count), yyvsp[-1].ltok); ;
926 { yyval.opform = makeOpFormNode (yyvsp[-3].ltok, OPF_BMMIDDLEM,
927 opFormUnion_createMiddle (yyvsp[-2].count), yyvsp[-1].ltok); ;
930 { yyval.opform = makeOpFormNode (yyvsp[-1].ltok, OPF_SELECT,
931 opFormUnion_createAnyOp (yyvsp[0].ltok), ltoken_undefined); ;
934 { yyval.opform = makeOpFormNode (yyvsp[-2].ltok, OPF_MSELECT,
935 opFormUnion_createAnyOp (yyvsp[0].ltok), ltoken_undefined); ;
938 { yyval.opform = makeOpFormNode (yyvsp[-2].ltok, OPF_MMAP,
939 opFormUnion_createAnyOp (yyvsp[0].ltok), ltoken_undefined); ;
942 { yyval.ltok = yyvsp[0].ltok; ;
945 { yyval.ltok = yyvsp[0].ltok; ;
948 { yyval.ltok = yyvsp[0].ltok; ;
954 { yyval.count = yyvsp[0].count; ;
960 { yyval.count = yyvsp[-2].count + 1; ;
963 { yyval.ltok = yyvsp[0].ltok; ;
966 { yyval.ltok = yyvsp[0].ltok; ;
969 { yyval.signature = makesigNode (yyvsp[-1].ltok, yyvsp[-2].ltokenList, yyvsp[0].ltok); ;
972 { yyval.ltokenList = ltokenList_new (); ;
975 { yyval.ltokenList = yyvsp[0].ltokenList; ;
978 { yyval.ltokenList = ltokenList_singleton (yyvsp[0].ltok); ;
981 { yyval.ltokenList = ltokenList_push (yyvsp[-2].ltokenList, yyvsp[0].ltok); ;
985 yyval.ltok = yyvsp[0].ltok;
986 ltoken_setText (yyval.ltok, processTraitSortId (ltoken_getText (yyvsp[0].ltok)));
990 { yyval.ltok = yyvsp[0].ltok; ;
993 /* the action file gets copied in in place of this dollarsign */
1005 short *ssp1 = yyss - 1;
1006 fprintf (stderr, "state stack now");
1007 while (ssp1 != yyssp)
1008 fprintf (stderr, " %d", *++ssp1);
1009 fprintf (stderr, "\n");
1019 yylsp->first_line = yylloc.first_line;
1020 yylsp->first_column = yylloc.first_column;
1021 yylsp->last_line = (yylsp-1)->last_line;
1022 yylsp->last_column = (yylsp-1)->last_column;
1027 yylsp->last_line = (yylsp+yylen-1)->last_line;
1028 yylsp->last_column = (yylsp+yylen-1)->last_column;
1032 /* Now "shift" the result of the reduction.
1033 Determine what state that goes to,
1034 based on the state we popped back to
1035 and the rule number reduced by. */
1039 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
1040 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
1041 yystate = yytable[yystate];
1043 yystate = yydefgoto[yyn - YYNTBASE];
1047 yyerrlab: /* here on detecting error */
1050 /* If not already recovering from an error, report this error. */
1054 #ifdef YYERROR_VERBOSE
1055 yyn = yypact[yystate];
1057 if (yyn > YYFLAG && yyn < YYLAST)
1064 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
1065 for (x = (yyn < 0 ? -yyn : 0);
1066 x < (sizeof(yytname) / sizeof(char *)); x++)
1067 if (yycheck[x + yyn] == x)
1068 size += strlen(yytname[x]) + 15, count++;
1069 msg = (char *) malloc(size + 15);
1072 strcpy(msg, "parse error");
1077 for (x = (yyn < 0 ? -yyn : 0);
1078 x < (sizeof(yytname) / sizeof(char *)); x++)
1079 if (yycheck[x + yyn] == x)
1081 strcat(msg, count == 0 ? ", expecting `" : " or `");
1082 strcat(msg, yytname[x]);
1091 yyerror ("parse error; also virtual memory exceeded");
1094 #endif /* YYERROR_VERBOSE */
1095 yyerror("parse error");
1099 yyerrlab1: /* here on error raised explicitly by an action */
1101 if (yyerrstatus == 3)
1103 /* if just tried and failed to reuse lookahead token after an error, discard it. */
1105 /* return failure if at end of input */
1106 if (yychar == YYEOF)
1111 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
1117 /* Else will try to reuse lookahead token
1118 after shifting the error token. */
1120 yyerrstatus = 3; /* Each real token shifted decrements this */
1124 yyerrdefault: /* current state does not do anything special for the error token. */
1127 /* This is wrong; only states that explicitly want error tokens
1128 should shift them. */
1129 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
1130 if (yyn) goto yydefault;
1133 yyerrpop: /* pop the current state because it cannot handle the error token */
1135 if (yyssp == yyss) YYABORT;
1145 short *ssp1 = yyss - 1;
1146 fprintf (stderr, "Error: state stack now");
1147 while (ssp1 != yyssp)
1148 fprintf (stderr, " %d", *++ssp1);
1149 fprintf (stderr, "\n");
1155 yyn = yypact[yystate];
1160 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
1179 fprintf(stderr, "Shifting error token, ");
1191 /* YYACCEPT comes here. */
1203 /* YYABORT comes here. */
1216 # include "bison.reset"
1218 extern char *yytext;
1220 void lslerror (char *s)
1223 (cstring_makeLiteral
1224 ("There has been a problem in the parser with LSL signatures. This is believed to result "
1225 "from a problem with bison v. 1.25. Please try rebuidling Splint "
1226 "using the pre-compiled grammar files by commenting out the "
1227 "BISON= line in the top-level Makefile."));
1230 static void yyprint (FILE *file, int type, YYSTYPE value)
1232 fprintf (file, " (%u:%u type: %d; text: %s) ",
1233 ltoken_getLine (value.ltok),
1234 ltoken_getCol (value.ltok),
1236 ltoken_getRawTextChars (value.ltok));
1239 extern void PrintToken (ltoken tok) {
1242 switch (ltoken_getCode (tok))
1244 case NOTTOKEN: codStr = "*** NOTTOKEN ***"; break;
1245 case LST_QUANTIFIERSYM: codStr = "QUANTIFIERSYM"; break;
1246 case LST_LOGICALOP: codStr = "LOGICALOP: "; break;
1247 case LST_SELECTSYM: codStr = "LST_SELECTSYM"; break;
1248 case LST_OPENSYM: codStr = "LST_OPENSYM"; break;
1249 case LST_SEPSYM: codStr = "SEPSYM"; break;
1250 case LST_CLOSESYM: codStr = "LST_CLOSESYM"; break;
1251 case LST_SIMPLEID: codStr = "LST_SIMPLEID"; break;
1252 case LST_MAPSYM: codStr = "MAPSYM"; break;
1253 case LST_MARKERSYM: codStr = "LST_MARKERSYM"; break;
1254 case LST_COMMENTSYM: codStr = "COMMENTSYM"; break;
1255 case LST_SIMPLEOP: codStr = "SIMPLEOP"; break;
1256 case LST_COLON: codStr = "LST_COLON"; break;
1257 case LST_COMMA: codStr = "COMMA"; break;
1258 case LST_LBRACKET: codStr = "LST_LBRACKET"; break;
1259 case LST_LPAR: codStr = "LST_LPAR"; break;
1260 case LST_RBRACKET: codStr = "LST_RBRACKET"; break;
1261 case LST_RPAR: codStr = "LST_RPAR"; break;
1262 case LST_EQOP: codStr = "LST_EQOP"; break;
1263 case LST_WHITESPACE: codStr = "WHITESPACE,"; break;
1264 case LST_EOL: codStr = "LST_EOL"; break;
1265 case LST_elseTOKEN: codStr = "elseTOKEN"; break;
1266 case LST_ifTOKEN: codStr = "ifTOKEN"; break;
1267 case LST_thenTOKEN: codStr = "thenTOKEN"; break;
1268 case LST_BADTOKEN: codStr = "*** BADTOKEN ***"; break;
1269 case LEOFTOKEN: /* can't reach LEOFTOKEN easily */
1270 codStr = "LEOFTOKEN"; break;
1272 codStr = "*** invalid token code ***";
1276 /* only used for debugging */
1277 printf ("%u:%u: Token Code (%u): %s",
1278 ltoken_getLine (tok), ltoken_getCol (tok),
1279 ltoken_getCode (tok), codStr);
1280 if (ltoken_getRawText (tok) != 0)
1282 printf (", Token String (%lu): %s\n",
1283 ltoken_getRawText (tok), ltoken_getRawTextChars (tok));
1292 ** Resets all flags in bison.head
1314 /*@=evalorderuncon@*/
1323 /*@=elseifcomplete@*/
1327 /*@=readonlytrans@*/
1330 /*@=systemunrecog@*/
1331 /*@=dependenttrans@*/
1332 /*@=unqualifiedtrans@*/
1336 /*drl added 11/27/2001*/