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