Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/byacc/test/btyacc/calc.tab.c
48083 views
1
/* original parser id follows */
2
/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
3
/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
4
5
#define YYBYACC 1
6
#define YYMAJOR 2
7
#define YYMINOR 0
8
#define YYCHECK "yyyymmdd"
9
10
#define YYEMPTY (-1)
11
#define yyclearin (yychar = YYEMPTY)
12
#define yyerrok (yyerrflag = 0)
13
#define YYRECOVERING() (yyerrflag != 0)
14
#define YYENOMEM (-2)
15
#define YYEOF 0
16
#undef YYBTYACC
17
#define YYBTYACC 0
18
#define YYDEBUGSTR YYPREFIX "debug"
19
20
#ifndef yyparse
21
#define yyparse calc_parse
22
#endif /* yyparse */
23
24
#ifndef yylex
25
#define yylex calc_lex
26
#endif /* yylex */
27
28
#ifndef yyerror
29
#define yyerror calc_error
30
#endif /* yyerror */
31
32
#ifndef yychar
33
#define yychar calc_char
34
#endif /* yychar */
35
36
#ifndef yyval
37
#define yyval calc_val
38
#endif /* yyval */
39
40
#ifndef yylval
41
#define yylval calc_lval
42
#endif /* yylval */
43
44
#ifndef yydebug
45
#define yydebug calc_debug
46
#endif /* yydebug */
47
48
#ifndef yynerrs
49
#define yynerrs calc_nerrs
50
#endif /* yynerrs */
51
52
#ifndef yyerrflag
53
#define yyerrflag calc_errflag
54
#endif /* yyerrflag */
55
56
#ifndef yylhs
57
#define yylhs calc_lhs
58
#endif /* yylhs */
59
60
#ifndef yylen
61
#define yylen calc_len
62
#endif /* yylen */
63
64
#ifndef yydefred
65
#define yydefred calc_defred
66
#endif /* yydefred */
67
68
#ifndef yystos
69
#define yystos calc_stos
70
#endif /* yystos */
71
72
#ifndef yydgoto
73
#define yydgoto calc_dgoto
74
#endif /* yydgoto */
75
76
#ifndef yysindex
77
#define yysindex calc_sindex
78
#endif /* yysindex */
79
80
#ifndef yyrindex
81
#define yyrindex calc_rindex
82
#endif /* yyrindex */
83
84
#ifndef yygindex
85
#define yygindex calc_gindex
86
#endif /* yygindex */
87
88
#ifndef yytable
89
#define yytable calc_table
90
#endif /* yytable */
91
92
#ifndef yycheck
93
#define yycheck calc_check
94
#endif /* yycheck */
95
96
#ifndef yyname
97
#define yyname calc_name
98
#endif /* yyname */
99
100
#ifndef yyrule
101
#define yyrule calc_rule
102
#endif /* yyrule */
103
104
#if YYBTYACC
105
106
#ifndef yycindex
107
#define yycindex calc_cindex
108
#endif /* yycindex */
109
110
#ifndef yyctable
111
#define yyctable calc_ctable
112
#endif /* yyctable */
113
114
#endif /* YYBTYACC */
115
116
#define YYPREFIX "calc_"
117
118
#define YYPURE 0
119
120
#line 2 "calc.y"
121
# include <stdio.h>
122
# include <ctype.h>
123
124
int regs[26];
125
int base;
126
127
extern int yylex(void);
128
static void yyerror(const char *s);
129
130
#line 131 "calc.tab.c"
131
132
#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
133
/* Default: YYSTYPE is the semantic value type. */
134
typedef int YYSTYPE;
135
# define YYSTYPE_IS_DECLARED 1
136
#endif
137
138
/* compatibility with bison */
139
#ifdef YYPARSE_PARAM
140
/* compatibility with FreeBSD */
141
# ifdef YYPARSE_PARAM_TYPE
142
# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
143
# else
144
# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
145
# endif
146
#else
147
# define YYPARSE_DECL() yyparse(void)
148
#endif
149
150
/* Parameters sent to lex. */
151
#ifdef YYLEX_PARAM
152
# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
153
# define YYLEX yylex(YYLEX_PARAM)
154
#else
155
# define YYLEX_DECL() yylex(void)
156
# define YYLEX yylex()
157
#endif
158
159
/* Parameters sent to yyerror. */
160
#ifndef YYERROR_DECL
161
#define YYERROR_DECL() yyerror(const char *s)
162
#endif
163
#ifndef YYERROR_CALL
164
#define YYERROR_CALL(msg) yyerror(msg)
165
#endif
166
167
extern int YYPARSE_DECL();
168
169
#define DIGIT 257
170
#define LETTER 258
171
#define UMINUS 259
172
#define YYERRCODE 256
173
typedef int YYINT;
174
static const YYINT calc_lhs[] = { -1,
175
0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
176
2, 2, 2, 2, 2, 2, 3, 3,
177
};
178
static const YYINT calc_len[] = { 2,
179
0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
180
3, 3, 3, 2, 1, 1, 1, 2,
181
};
182
static const YYINT calc_defred[] = { 1,
183
0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
184
0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
185
0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
186
10, 11,
187
};
188
#if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING)
189
static const YYINT calc_stos[] = { 0,
190
261, 256, 257, 258, 45, 40, 262, 263, 264, 10,
191
61, 258, 263, 263, 10, 124, 38, 43, 45, 42,
192
47, 37, 257, 263, 41, 263, 263, 263, 263, 263,
193
263, 263,
194
};
195
#endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */
196
static const YYINT calc_dgoto[] = { 1,
197
7, 8, 9,
198
};
199
static const YYINT calc_sindex[] = { 0,
200
-40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
201
-38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
202
-38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
203
0, 0,
204
};
205
static const YYINT calc_rindex[] = { 0,
206
0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
207
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
208
0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
209
0, 0,
210
};
211
#if YYBTYACC
212
static const YYINT calc_cindex[] = { 0,
213
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
214
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
215
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
216
0, 0,
217
};
218
#endif
219
static const YYINT calc_gindex[] = { 0,
220
0, 65, 0,
221
};
222
#define YYTABLESIZE 220
223
static const YYINT calc_table[] = { 6,
224
16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
225
15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
226
0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
227
0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
228
0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
229
8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
230
0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
231
14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
232
26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
233
0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
234
0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
235
0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
236
0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
237
0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
238
0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
239
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
240
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
241
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
242
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
243
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
244
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
245
0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
246
};
247
static const YYINT calc_check[] = { 40,
248
10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
249
10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
250
-1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
251
-1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
252
-1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
253
38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
254
-1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
255
6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
256
16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
257
-1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
258
-1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
259
-1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
260
-1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
261
-1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
262
-1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
263
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
264
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
265
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
266
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
267
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
268
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
269
-1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
270
};
271
#if YYBTYACC
272
static const YYINT calc_ctable[] = { -1,
273
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
274
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
275
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
276
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
277
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
278
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
279
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
280
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
281
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
282
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
283
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
284
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
285
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
286
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
287
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
288
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
289
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
290
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
291
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
292
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
293
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
294
-1, -1, -1, -1, -1, -1, -1, -1, -1,
295
};
296
#endif
297
#define YYFINAL 1
298
#ifndef YYDEBUG
299
#define YYDEBUG 0
300
#endif
301
#define YYMAXTOKEN 259
302
#define YYUNDFTOKEN 265
303
#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
304
#if YYDEBUG
305
static const char *const calc_name[] = {
306
307
"$end",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,0,0,0,
308
0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,
309
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,
310
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,
311
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,0,
312
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,0,
313
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,0,
314
0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number",
315
"illegal-symbol",
316
};
317
static const char *const calc_rule[] = {
318
"$accept : list",
319
"list :",
320
"list : list stat '\\n'",
321
"list : list error '\\n'",
322
"stat : expr",
323
"stat : LETTER '=' expr",
324
"expr : '(' expr ')'",
325
"expr : expr '+' expr",
326
"expr : expr '-' expr",
327
"expr : expr '*' expr",
328
"expr : expr '/' expr",
329
"expr : expr '%' expr",
330
"expr : expr '&' expr",
331
"expr : expr '|' expr",
332
"expr : '-' expr",
333
"expr : LETTER",
334
"expr : number",
335
"number : DIGIT",
336
"number : number DIGIT",
337
338
};
339
#endif
340
341
#if YYDEBUG
342
int yydebug;
343
#endif
344
345
int yyerrflag;
346
int yychar;
347
YYSTYPE yyval;
348
YYSTYPE yylval;
349
int yynerrs;
350
351
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
352
YYLTYPE yyloc; /* position returned by actions */
353
YYLTYPE yylloc; /* position from the lexer */
354
#endif
355
356
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
357
#ifndef YYLLOC_DEFAULT
358
#define YYLLOC_DEFAULT(loc, rhs, n) \
359
do \
360
{ \
361
if (n == 0) \
362
{ \
363
(loc).first_line = YYRHSLOC(rhs, 0).last_line; \
364
(loc).first_column = YYRHSLOC(rhs, 0).last_column; \
365
(loc).last_line = YYRHSLOC(rhs, 0).last_line; \
366
(loc).last_column = YYRHSLOC(rhs, 0).last_column; \
367
} \
368
else \
369
{ \
370
(loc).first_line = YYRHSLOC(rhs, 1).first_line; \
371
(loc).first_column = YYRHSLOC(rhs, 1).first_column; \
372
(loc).last_line = YYRHSLOC(rhs, n).last_line; \
373
(loc).last_column = YYRHSLOC(rhs, n).last_column; \
374
} \
375
} while (0)
376
#endif /* YYLLOC_DEFAULT */
377
#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
378
#if YYBTYACC
379
380
#ifndef YYLVQUEUEGROWTH
381
#define YYLVQUEUEGROWTH 32
382
#endif
383
#endif /* YYBTYACC */
384
385
/* define the initial stack-sizes */
386
#ifdef YYSTACKSIZE
387
#undef YYMAXDEPTH
388
#define YYMAXDEPTH YYSTACKSIZE
389
#else
390
#ifdef YYMAXDEPTH
391
#define YYSTACKSIZE YYMAXDEPTH
392
#else
393
#define YYSTACKSIZE 10000
394
#define YYMAXDEPTH 10000
395
#endif
396
#endif
397
398
#ifndef YYINITSTACKSIZE
399
#define YYINITSTACKSIZE 200
400
#endif
401
402
typedef struct {
403
unsigned stacksize;
404
YYINT *s_base;
405
YYINT *s_mark;
406
YYINT *s_last;
407
YYSTYPE *l_base;
408
YYSTYPE *l_mark;
409
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
410
YYLTYPE *p_base;
411
YYLTYPE *p_mark;
412
#endif
413
} YYSTACKDATA;
414
#if YYBTYACC
415
416
struct YYParseState_s
417
{
418
struct YYParseState_s *save; /* Previously saved parser state */
419
YYSTACKDATA yystack; /* saved parser stack */
420
int state; /* saved parser state */
421
int errflag; /* saved error recovery status */
422
int lexeme; /* saved index of the conflict lexeme in the lexical queue */
423
YYINT ctry; /* saved index in yyctable[] for this conflict */
424
};
425
typedef struct YYParseState_s YYParseState;
426
#endif /* YYBTYACC */
427
/* variables for the parser stack */
428
static YYSTACKDATA yystack;
429
#if YYBTYACC
430
431
/* Current parser state */
432
static YYParseState *yyps = 0;
433
434
/* yypath != NULL: do the full parse, starting at *yypath parser state. */
435
static YYParseState *yypath = 0;
436
437
/* Base of the lexical value queue */
438
static YYSTYPE *yylvals = 0;
439
440
/* Current position at lexical value queue */
441
static YYSTYPE *yylvp = 0;
442
443
/* End position of lexical value queue */
444
static YYSTYPE *yylve = 0;
445
446
/* The last allocated position at the lexical value queue */
447
static YYSTYPE *yylvlim = 0;
448
449
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
450
/* Base of the lexical position queue */
451
static YYLTYPE *yylpsns = 0;
452
453
/* Current position at lexical position queue */
454
static YYLTYPE *yylpp = 0;
455
456
/* End position of lexical position queue */
457
static YYLTYPE *yylpe = 0;
458
459
/* The last allocated position at the lexical position queue */
460
static YYLTYPE *yylplim = 0;
461
#endif
462
463
/* Current position at lexical token queue */
464
static YYINT *yylexp = 0;
465
466
static YYINT *yylexemes = 0;
467
#endif /* YYBTYACC */
468
#line 66 "calc.y"
469
/* start of programs */
470
471
int
472
main (void)
473
{
474
while(!feof(stdin)) {
475
yyparse();
476
}
477
return 0;
478
}
479
480
static void
481
yyerror(const char *s)
482
{
483
fprintf(stderr, "%s\n", s);
484
}
485
486
int
487
yylex(void)
488
{
489
/* lexical analysis routine */
490
/* returns LETTER for a lower case letter, yylval = 0 through 25 */
491
/* return DIGIT for a digit, yylval = 0 through 9 */
492
/* all other characters are returned immediately */
493
494
int c;
495
496
while( (c=getchar()) == ' ' ) { /* skip blanks */ }
497
498
/* c is now nonblank */
499
500
if( islower( c )) {
501
yylval = c - 'a';
502
return ( LETTER );
503
}
504
if( isdigit( c )) {
505
yylval = c - '0';
506
return ( DIGIT );
507
}
508
return( c );
509
}
510
#line 511 "calc.tab.c"
511
512
/* For use in generated program */
513
#define yydepth (int)(yystack.s_mark - yystack.s_base)
514
#if YYBTYACC
515
#define yytrial (yyps->save)
516
#endif /* YYBTYACC */
517
518
#if YYDEBUG
519
#include <stdio.h> /* needed for printf */
520
#endif
521
522
#include <stdlib.h> /* needed for malloc, etc */
523
#include <string.h> /* needed for memset */
524
525
/* allocate initial stack or double stack size, up to YYMAXDEPTH */
526
static int yygrowstack(YYSTACKDATA *data)
527
{
528
int i;
529
unsigned newsize;
530
YYINT *newss;
531
YYSTYPE *newvs;
532
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
533
YYLTYPE *newps;
534
#endif
535
536
if ((newsize = data->stacksize) == 0)
537
newsize = YYINITSTACKSIZE;
538
else if (newsize >= YYMAXDEPTH)
539
return YYENOMEM;
540
else if ((newsize *= 2) > YYMAXDEPTH)
541
newsize = YYMAXDEPTH;
542
543
i = (int) (data->s_mark - data->s_base);
544
newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
545
if (newss == NULL)
546
return YYENOMEM;
547
548
data->s_base = newss;
549
data->s_mark = newss + i;
550
551
newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
552
if (newvs == NULL)
553
return YYENOMEM;
554
555
data->l_base = newvs;
556
data->l_mark = newvs + i;
557
558
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
559
newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));
560
if (newps == NULL)
561
return YYENOMEM;
562
563
data->p_base = newps;
564
data->p_mark = newps + i;
565
#endif
566
567
data->stacksize = newsize;
568
data->s_last = data->s_base + newsize - 1;
569
570
#if YYDEBUG
571
if (yydebug)
572
fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);
573
#endif
574
return 0;
575
}
576
577
#if YYPURE || defined(YY_NO_LEAKS)
578
static void yyfreestack(YYSTACKDATA *data)
579
{
580
free(data->s_base);
581
free(data->l_base);
582
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
583
free(data->p_base);
584
#endif
585
memset(data, 0, sizeof(*data));
586
}
587
#else
588
#define yyfreestack(data) /* nothing */
589
#endif /* YYPURE || defined(YY_NO_LEAKS) */
590
#if YYBTYACC
591
592
static YYParseState *
593
yyNewState(unsigned size)
594
{
595
YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));
596
if (p == NULL) return NULL;
597
598
p->yystack.stacksize = size;
599
if (size == 0)
600
{
601
p->yystack.s_base = NULL;
602
p->yystack.l_base = NULL;
603
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
604
p->yystack.p_base = NULL;
605
#endif
606
return p;
607
}
608
p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT));
609
if (p->yystack.s_base == NULL) return NULL;
610
p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));
611
if (p->yystack.l_base == NULL) return NULL;
612
memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));
613
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
614
p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));
615
if (p->yystack.p_base == NULL) return NULL;
616
memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));
617
#endif
618
619
return p;
620
}
621
622
static void
623
yyFreeState(YYParseState *p)
624
{
625
yyfreestack(&p->yystack);
626
free(p);
627
}
628
#endif /* YYBTYACC */
629
630
#define YYABORT goto yyabort
631
#define YYREJECT goto yyabort
632
#define YYACCEPT goto yyaccept
633
#define YYERROR goto yyerrlab
634
#if YYBTYACC
635
#define YYVALID do { if (yyps->save) goto yyvalid; } while(0)
636
#define YYVALID_NESTED do { if (yyps->save && \
637
yyps->save->save == 0) goto yyvalid; } while(0)
638
#endif /* YYBTYACC */
639
640
int
641
YYPARSE_DECL()
642
{
643
int yym, yyn, yystate, yyresult;
644
#if YYBTYACC
645
int yynewerrflag;
646
YYParseState *yyerrctx = NULL;
647
#endif /* YYBTYACC */
648
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
649
YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */
650
#endif
651
#if YYDEBUG
652
const char *yys;
653
654
if ((yys = getenv("YYDEBUG")) != NULL)
655
{
656
yyn = *yys;
657
if (yyn >= '0' && yyn <= '9')
658
yydebug = yyn - '0';
659
}
660
if (yydebug)
661
fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);
662
#endif
663
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
664
memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range));
665
#endif
666
667
#if YYBTYACC
668
yyps = yyNewState(0); if (yyps == 0) goto yyenomem;
669
yyps->save = 0;
670
#endif /* YYBTYACC */
671
yym = 0;
672
/* yyn is set below */
673
yynerrs = 0;
674
yyerrflag = 0;
675
yychar = YYEMPTY;
676
yystate = 0;
677
678
#if YYPURE
679
memset(&yystack, 0, sizeof(yystack));
680
#endif
681
682
if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
683
yystack.s_mark = yystack.s_base;
684
yystack.l_mark = yystack.l_base;
685
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
686
yystack.p_mark = yystack.p_base;
687
#endif
688
yystate = 0;
689
*yystack.s_mark = 0;
690
691
yyloop:
692
if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
693
if (yychar < 0)
694
{
695
#if YYBTYACC
696
do {
697
if (yylvp < yylve)
698
{
699
/* we're currently re-reading tokens */
700
yylval = *yylvp++;
701
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
702
yylloc = *yylpp++;
703
#endif
704
yychar = *yylexp++;
705
break;
706
}
707
if (yyps->save)
708
{
709
/* in trial mode; save scanner results for future parse attempts */
710
if (yylvp == yylvlim)
711
{ /* Enlarge lexical value queue */
712
size_t p = (size_t) (yylvp - yylvals);
713
size_t s = (size_t) (yylvlim - yylvals);
714
715
s += YYLVQUEUEGROWTH;
716
if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem;
717
if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;
718
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
719
if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;
720
#endif
721
yylvp = yylve = yylvals + p;
722
yylvlim = yylvals + s;
723
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
724
yylpp = yylpe = yylpsns + p;
725
yylplim = yylpsns + s;
726
#endif
727
yylexp = yylexemes + p;
728
}
729
*yylexp = (YYINT) YYLEX;
730
*yylvp++ = yylval;
731
yylve++;
732
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
733
*yylpp++ = yylloc;
734
yylpe++;
735
#endif
736
yychar = *yylexp++;
737
break;
738
}
739
/* normal operation, no conflict encountered */
740
#endif /* YYBTYACC */
741
yychar = YYLEX;
742
#if YYBTYACC
743
} while (0);
744
#endif /* YYBTYACC */
745
if (yychar < 0) yychar = YYEOF;
746
#if YYDEBUG
747
if (yydebug)
748
{
749
if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
750
fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",
751
YYDEBUGSTR, yydepth, yystate, yychar, yys);
752
#ifdef YYSTYPE_TOSTRING
753
#if YYBTYACC
754
if (!yytrial)
755
#endif /* YYBTYACC */
756
fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));
757
#endif
758
fputc('\n', stderr);
759
}
760
#endif
761
}
762
#if YYBTYACC
763
764
/* Do we have a conflict? */
765
if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
766
yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
767
{
768
YYINT ctry;
769
770
if (yypath)
771
{
772
YYParseState *save;
773
#if YYDEBUG
774
if (yydebug)
775
fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",
776
YYDEBUGSTR, yydepth, yystate);
777
#endif
778
/* Switch to the next conflict context */
779
save = yypath;
780
yypath = save->save;
781
save->save = NULL;
782
ctry = save->ctry;
783
if (save->state != yystate) YYABORT;
784
yyFreeState(save);
785
786
}
787
else
788
{
789
790
/* Unresolved conflict - start/continue trial parse */
791
YYParseState *save;
792
#if YYDEBUG
793
if (yydebug)
794
{
795
fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);
796
if (yyps->save)
797
fputs("ALREADY in conflict, continuing trial parse.\n", stderr);
798
else
799
fputs("Starting trial parse.\n", stderr);
800
}
801
#endif
802
save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
803
if (save == NULL) goto yyenomem;
804
save->save = yyps->save;
805
save->state = yystate;
806
save->errflag = yyerrflag;
807
save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base);
808
memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
809
save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base);
810
memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
811
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
812
save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base);
813
memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
814
#endif
815
ctry = yytable[yyn];
816
if (yyctable[ctry] == -1)
817
{
818
#if YYDEBUG
819
if (yydebug && yychar >= YYEOF)
820
fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);
821
#endif
822
ctry++;
823
}
824
save->ctry = ctry;
825
if (yyps->save == NULL)
826
{
827
/* If this is a first conflict in the stack, start saving lexemes */
828
if (!yylexemes)
829
{
830
yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT));
831
if (yylexemes == NULL) goto yyenomem;
832
yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));
833
if (yylvals == NULL) goto yyenomem;
834
yylvlim = yylvals + YYLVQUEUEGROWTH;
835
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
836
yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));
837
if (yylpsns == NULL) goto yyenomem;
838
yylplim = yylpsns + YYLVQUEUEGROWTH;
839
#endif
840
}
841
if (yylvp == yylve)
842
{
843
yylvp = yylve = yylvals;
844
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
845
yylpp = yylpe = yylpsns;
846
#endif
847
yylexp = yylexemes;
848
if (yychar >= YYEOF)
849
{
850
*yylve++ = yylval;
851
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
852
*yylpe++ = yylloc;
853
#endif
854
*yylexp = (YYINT) yychar;
855
yychar = YYEMPTY;
856
}
857
}
858
}
859
if (yychar >= YYEOF)
860
{
861
yylvp--;
862
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
863
yylpp--;
864
#endif
865
yylexp--;
866
yychar = YYEMPTY;
867
}
868
save->lexeme = (int) (yylvp - yylvals);
869
yyps->save = save;
870
}
871
if (yytable[yyn] == ctry)
872
{
873
#if YYDEBUG
874
if (yydebug)
875
fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
876
YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);
877
#endif
878
if (yychar < 0)
879
{
880
yylvp++;
881
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
882
yylpp++;
883
#endif
884
yylexp++;
885
}
886
if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
887
goto yyoverflow;
888
yystate = yyctable[ctry];
889
*++yystack.s_mark = (YYINT) yystate;
890
*++yystack.l_mark = yylval;
891
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
892
*++yystack.p_mark = yylloc;
893
#endif
894
yychar = YYEMPTY;
895
if (yyerrflag > 0) --yyerrflag;
896
goto yyloop;
897
}
898
else
899
{
900
yyn = yyctable[ctry];
901
goto yyreduce;
902
}
903
} /* End of code dealing with conflicts */
904
#endif /* YYBTYACC */
905
if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
906
yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
907
{
908
#if YYDEBUG
909
if (yydebug)
910
fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
911
YYDEBUGSTR, yydepth, yystate, yytable[yyn]);
912
#endif
913
if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
914
yystate = yytable[yyn];
915
*++yystack.s_mark = yytable[yyn];
916
*++yystack.l_mark = yylval;
917
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
918
*++yystack.p_mark = yylloc;
919
#endif
920
yychar = YYEMPTY;
921
if (yyerrflag > 0) --yyerrflag;
922
goto yyloop;
923
}
924
if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
925
yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
926
{
927
yyn = yytable[yyn];
928
goto yyreduce;
929
}
930
if (yyerrflag != 0) goto yyinrecovery;
931
#if YYBTYACC
932
933
yynewerrflag = 1;
934
goto yyerrhandler;
935
goto yyerrlab; /* redundant goto avoids 'unused label' warning */
936
937
yyerrlab:
938
/* explicit YYERROR from an action -- pop the rhs of the rule reduced
939
* before looking for error recovery */
940
yystack.s_mark -= yym;
941
yystate = *yystack.s_mark;
942
yystack.l_mark -= yym;
943
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
944
yystack.p_mark -= yym;
945
#endif
946
947
yynewerrflag = 0;
948
yyerrhandler:
949
while (yyps->save)
950
{
951
int ctry;
952
YYParseState *save = yyps->save;
953
#if YYDEBUG
954
if (yydebug)
955
fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",
956
YYDEBUGSTR, yydepth, yystate, yyps->save->state,
957
(int)(yylvp - yylvals - yyps->save->lexeme));
958
#endif
959
/* Memorize most forward-looking error state in case it's really an error. */
960
if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)
961
{
962
/* Free old saved error context state */
963
if (yyerrctx) yyFreeState(yyerrctx);
964
/* Create and fill out new saved error context state */
965
yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
966
if (yyerrctx == NULL) goto yyenomem;
967
yyerrctx->save = yyps->save;
968
yyerrctx->state = yystate;
969
yyerrctx->errflag = yyerrflag;
970
yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);
971
memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
972
yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);
973
memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
974
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
975
yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);
976
memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
977
#endif
978
yyerrctx->lexeme = (int) (yylvp - yylvals);
979
}
980
yylvp = yylvals + save->lexeme;
981
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
982
yylpp = yylpsns + save->lexeme;
983
#endif
984
yylexp = yylexemes + save->lexeme;
985
yychar = YYEMPTY;
986
yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);
987
memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
988
yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);
989
memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
990
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
991
yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);
992
memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
993
#endif
994
ctry = ++save->ctry;
995
yystate = save->state;
996
/* We tried shift, try reduce now */
997
if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;
998
yyps->save = save->save;
999
save->save = NULL;
1000
yyFreeState(save);
1001
1002
/* Nothing left on the stack -- error */
1003
if (!yyps->save)
1004
{
1005
#if YYDEBUG
1006
if (yydebug)
1007
fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",
1008
YYPREFIX, yydepth);
1009
#endif
1010
/* Restore state as it was in the most forward-advanced error */
1011
yylvp = yylvals + yyerrctx->lexeme;
1012
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1013
yylpp = yylpsns + yyerrctx->lexeme;
1014
#endif
1015
yylexp = yylexemes + yyerrctx->lexeme;
1016
yychar = yylexp[-1];
1017
yylval = yylvp[-1];
1018
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1019
yylloc = yylpp[-1];
1020
#endif
1021
yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);
1022
memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1023
yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);
1024
memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1025
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1026
yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);
1027
memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1028
#endif
1029
yystate = yyerrctx->state;
1030
yyFreeState(yyerrctx);
1031
yyerrctx = NULL;
1032
}
1033
yynewerrflag = 1;
1034
}
1035
if (yynewerrflag == 0) goto yyinrecovery;
1036
#endif /* YYBTYACC */
1037
1038
YYERROR_CALL("syntax error");
1039
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1040
yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */
1041
#endif
1042
1043
#if !YYBTYACC
1044
goto yyerrlab; /* redundant goto avoids 'unused label' warning */
1045
yyerrlab:
1046
#endif
1047
++yynerrs;
1048
1049
yyinrecovery:
1050
if (yyerrflag < 3)
1051
{
1052
yyerrflag = 3;
1053
for (;;)
1054
{
1055
if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
1056
yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
1057
{
1058
#if YYDEBUG
1059
if (yydebug)
1060
fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",
1061
YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);
1062
#endif
1063
if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1064
yystate = yytable[yyn];
1065
*++yystack.s_mark = yytable[yyn];
1066
*++yystack.l_mark = yylval;
1067
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1068
/* lookahead position is error end position */
1069
yyerror_loc_range[2] = yylloc;
1070
YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */
1071
*++yystack.p_mark = yyloc;
1072
#endif
1073
goto yyloop;
1074
}
1075
else
1076
{
1077
#if YYDEBUG
1078
if (yydebug)
1079
fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",
1080
YYDEBUGSTR, yydepth, *yystack.s_mark);
1081
#endif
1082
if (yystack.s_mark <= yystack.s_base) goto yyabort;
1083
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1084
/* the current TOS position is the error start position */
1085
yyerror_loc_range[1] = *yystack.p_mark;
1086
#endif
1087
#if defined(YYDESTRUCT_CALL)
1088
#if YYBTYACC
1089
if (!yytrial)
1090
#endif /* YYBTYACC */
1091
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1092
YYDESTRUCT_CALL("error: discarding state",
1093
yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);
1094
#else
1095
YYDESTRUCT_CALL("error: discarding state",
1096
yystos[*yystack.s_mark], yystack.l_mark);
1097
#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1098
#endif /* defined(YYDESTRUCT_CALL) */
1099
--yystack.s_mark;
1100
--yystack.l_mark;
1101
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1102
--yystack.p_mark;
1103
#endif
1104
}
1105
}
1106
}
1107
else
1108
{
1109
if (yychar == YYEOF) goto yyabort;
1110
#if YYDEBUG
1111
if (yydebug)
1112
{
1113
if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1114
fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",
1115
YYDEBUGSTR, yydepth, yystate, yychar, yys);
1116
}
1117
#endif
1118
#if defined(YYDESTRUCT_CALL)
1119
#if YYBTYACC
1120
if (!yytrial)
1121
#endif /* YYBTYACC */
1122
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1123
YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);
1124
#else
1125
YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);
1126
#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1127
#endif /* defined(YYDESTRUCT_CALL) */
1128
yychar = YYEMPTY;
1129
goto yyloop;
1130
}
1131
1132
yyreduce:
1133
yym = yylen[yyn];
1134
#if YYDEBUG
1135
if (yydebug)
1136
{
1137
fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",
1138
YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);
1139
#ifdef YYSTYPE_TOSTRING
1140
#if YYBTYACC
1141
if (!yytrial)
1142
#endif /* YYBTYACC */
1143
if (yym > 0)
1144
{
1145
int i;
1146
fputc('<', stderr);
1147
for (i = yym; i > 0; i--)
1148
{
1149
if (i != yym) fputs(", ", stderr);
1150
fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],
1151
yystack.l_mark[1-i]), stderr);
1152
}
1153
fputc('>', stderr);
1154
}
1155
#endif
1156
fputc('\n', stderr);
1157
}
1158
#endif
1159
if (yym > 0)
1160
yyval = yystack.l_mark[1-yym];
1161
else
1162
memset(&yyval, 0, sizeof yyval);
1163
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1164
1165
/* Perform position reduction */
1166
memset(&yyloc, 0, sizeof(yyloc));
1167
#if YYBTYACC
1168
if (!yytrial)
1169
#endif /* YYBTYACC */
1170
{
1171
YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym);
1172
/* just in case YYERROR is invoked within the action, save
1173
the start of the rhs as the error start position */
1174
yyerror_loc_range[1] = yystack.p_mark[1-yym];
1175
}
1176
#endif
1177
1178
switch (yyn)
1179
{
1180
case 3:
1181
#line 28 "calc.y"
1182
{ yyerrok ; }
1183
#line 1184 "calc.tab.c"
1184
break;
1185
case 4:
1186
#line 32 "calc.y"
1187
{ printf("%d\n",yystack.l_mark[0]);}
1188
#line 1189 "calc.tab.c"
1189
break;
1190
case 5:
1191
#line 34 "calc.y"
1192
{ regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
1193
#line 1194 "calc.tab.c"
1194
break;
1195
case 6:
1196
#line 38 "calc.y"
1197
{ yyval = yystack.l_mark[-1]; }
1198
#line 1199 "calc.tab.c"
1199
break;
1200
case 7:
1201
#line 40 "calc.y"
1202
{ yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
1203
#line 1204 "calc.tab.c"
1204
break;
1205
case 8:
1206
#line 42 "calc.y"
1207
{ yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
1208
#line 1209 "calc.tab.c"
1209
break;
1210
case 9:
1211
#line 44 "calc.y"
1212
{ yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
1213
#line 1214 "calc.tab.c"
1214
break;
1215
case 10:
1216
#line 46 "calc.y"
1217
{ yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
1218
#line 1219 "calc.tab.c"
1219
break;
1220
case 11:
1221
#line 48 "calc.y"
1222
{ yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
1223
#line 1224 "calc.tab.c"
1224
break;
1225
case 12:
1226
#line 50 "calc.y"
1227
{ yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
1228
#line 1229 "calc.tab.c"
1229
break;
1230
case 13:
1231
#line 52 "calc.y"
1232
{ yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
1233
#line 1234 "calc.tab.c"
1234
break;
1235
case 14:
1236
#line 54 "calc.y"
1237
{ yyval = - yystack.l_mark[0]; }
1238
#line 1239 "calc.tab.c"
1239
break;
1240
case 15:
1241
#line 56 "calc.y"
1242
{ yyval = regs[yystack.l_mark[0]]; }
1243
#line 1244 "calc.tab.c"
1244
break;
1245
case 17:
1246
#line 61 "calc.y"
1247
{ yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
1248
#line 1249 "calc.tab.c"
1249
break;
1250
case 18:
1251
#line 63 "calc.y"
1252
{ yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
1253
#line 1254 "calc.tab.c"
1254
break;
1255
#line 1256 "calc.tab.c"
1256
default:
1257
break;
1258
}
1259
yystack.s_mark -= yym;
1260
yystate = *yystack.s_mark;
1261
yystack.l_mark -= yym;
1262
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1263
yystack.p_mark -= yym;
1264
#endif
1265
yym = yylhs[yyn];
1266
if (yystate == 0 && yym == 0)
1267
{
1268
#if YYDEBUG
1269
if (yydebug)
1270
{
1271
fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1272
#ifdef YYSTYPE_TOSTRING
1273
#if YYBTYACC
1274
if (!yytrial)
1275
#endif /* YYBTYACC */
1276
fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));
1277
#endif
1278
fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);
1279
}
1280
#endif
1281
yystate = YYFINAL;
1282
*++yystack.s_mark = YYFINAL;
1283
*++yystack.l_mark = yyval;
1284
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1285
*++yystack.p_mark = yyloc;
1286
#endif
1287
if (yychar < 0)
1288
{
1289
#if YYBTYACC
1290
do {
1291
if (yylvp < yylve)
1292
{
1293
/* we're currently re-reading tokens */
1294
yylval = *yylvp++;
1295
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1296
yylloc = *yylpp++;
1297
#endif
1298
yychar = *yylexp++;
1299
break;
1300
}
1301
if (yyps->save)
1302
{
1303
/* in trial mode; save scanner results for future parse attempts */
1304
if (yylvp == yylvlim)
1305
{ /* Enlarge lexical value queue */
1306
size_t p = (size_t) (yylvp - yylvals);
1307
size_t s = (size_t) (yylvlim - yylvals);
1308
1309
s += YYLVQUEUEGROWTH;
1310
if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL)
1311
goto yyenomem;
1312
if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)
1313
goto yyenomem;
1314
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1315
if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)
1316
goto yyenomem;
1317
#endif
1318
yylvp = yylve = yylvals + p;
1319
yylvlim = yylvals + s;
1320
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1321
yylpp = yylpe = yylpsns + p;
1322
yylplim = yylpsns + s;
1323
#endif
1324
yylexp = yylexemes + p;
1325
}
1326
*yylexp = (YYINT) YYLEX;
1327
*yylvp++ = yylval;
1328
yylve++;
1329
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1330
*yylpp++ = yylloc;
1331
yylpe++;
1332
#endif
1333
yychar = *yylexp++;
1334
break;
1335
}
1336
/* normal operation, no conflict encountered */
1337
#endif /* YYBTYACC */
1338
yychar = YYLEX;
1339
#if YYBTYACC
1340
} while (0);
1341
#endif /* YYBTYACC */
1342
if (yychar < 0) yychar = YYEOF;
1343
#if YYDEBUG
1344
if (yydebug)
1345
{
1346
if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1347
fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n",
1348
YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);
1349
}
1350
#endif
1351
}
1352
if (yychar == YYEOF) goto yyaccept;
1353
goto yyloop;
1354
}
1355
if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
1356
yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
1357
yystate = yytable[yyn];
1358
else
1359
yystate = yydgoto[yym];
1360
#if YYDEBUG
1361
if (yydebug)
1362
{
1363
fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1364
#ifdef YYSTYPE_TOSTRING
1365
#if YYBTYACC
1366
if (!yytrial)
1367
#endif /* YYBTYACC */
1368
fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));
1369
#endif
1370
fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);
1371
}
1372
#endif
1373
if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1374
*++yystack.s_mark = (YYINT) yystate;
1375
*++yystack.l_mark = yyval;
1376
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1377
*++yystack.p_mark = yyloc;
1378
#endif
1379
goto yyloop;
1380
#if YYBTYACC
1381
1382
/* Reduction declares that this path is valid. Set yypath and do a full parse */
1383
yyvalid:
1384
if (yypath) YYABORT;
1385
while (yyps->save)
1386
{
1387
YYParseState *save = yyps->save;
1388
yyps->save = save->save;
1389
save->save = yypath;
1390
yypath = save;
1391
}
1392
#if YYDEBUG
1393
if (yydebug)
1394
fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",
1395
YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));
1396
#endif
1397
if (yyerrctx)
1398
{
1399
yyFreeState(yyerrctx);
1400
yyerrctx = NULL;
1401
}
1402
yylvp = yylvals + yypath->lexeme;
1403
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1404
yylpp = yylpsns + yypath->lexeme;
1405
#endif
1406
yylexp = yylexemes + yypath->lexeme;
1407
yychar = YYEMPTY;
1408
yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);
1409
memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1410
yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);
1411
memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1412
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1413
yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);
1414
memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1415
#endif
1416
yystate = yypath->state;
1417
goto yyloop;
1418
#endif /* YYBTYACC */
1419
1420
yyoverflow:
1421
YYERROR_CALL("yacc stack overflow");
1422
#if YYBTYACC
1423
goto yyabort_nomem;
1424
yyenomem:
1425
YYERROR_CALL("memory exhausted");
1426
yyabort_nomem:
1427
#endif /* YYBTYACC */
1428
yyresult = 2;
1429
goto yyreturn;
1430
1431
yyabort:
1432
yyresult = 1;
1433
goto yyreturn;
1434
1435
yyaccept:
1436
#if YYBTYACC
1437
if (yyps->save) goto yyvalid;
1438
#endif /* YYBTYACC */
1439
yyresult = 0;
1440
1441
yyreturn:
1442
#if defined(YYDESTRUCT_CALL)
1443
if (yychar != YYEOF && yychar != YYEMPTY)
1444
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1445
YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);
1446
#else
1447
YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);
1448
#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1449
1450
{
1451
YYSTYPE *pv;
1452
#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1453
YYLTYPE *pp;
1454
1455
for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)
1456
YYDESTRUCT_CALL("cleanup: discarding state",
1457
yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);
1458
#else
1459
for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)
1460
YYDESTRUCT_CALL("cleanup: discarding state",
1461
yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);
1462
#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1463
}
1464
#endif /* defined(YYDESTRUCT_CALL) */
1465
1466
#if YYBTYACC
1467
if (yyerrctx)
1468
{
1469
yyFreeState(yyerrctx);
1470
yyerrctx = NULL;
1471
}
1472
while (yyps)
1473
{
1474
YYParseState *save = yyps;
1475
yyps = save->save;
1476
save->save = NULL;
1477
yyFreeState(save);
1478
}
1479
while (yypath)
1480
{
1481
YYParseState *save = yypath;
1482
yypath = save->save;
1483
save->save = NULL;
1484
yyFreeState(save);
1485
}
1486
#endif /* YYBTYACC */
1487
yyfreestack(&yystack);
1488
return (yyresult);
1489
}
1490
1491