]> git.saurik.com Git - bison.git/blame - tests/regression.at
* src/reader.c (readgram): Don't add the rule 0 if there were no
[bison.git] / tests / regression.at
CommitLineData
342b8b6e
AD
1# Bison Regressions. -*- Autotest -*-
2# Copyright 2001 Free Software Foundation, Inc.
c95f2d78 3
342b8b6e
AD
4# This program is free software; you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation; either version 2, or (at your option)
7# any later version.
c95f2d78 8
342b8b6e
AD
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU General Public License for more details.
c95f2d78 13
342b8b6e
AD
14# You should have received a copy of the GNU General Public License
15# along with this program; if not, write to the Free Software
16# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17# 02111-1307, USA.
c95f2d78 18
342b8b6e 19AT_BANNER([[Regression tests.]])
c95f2d78
AD
20
21## ------------------ ##
22## Duplicate string. ##
23## ------------------ ##
24
25
26AT_SETUP([Duplicate string])
27
f499b062 28AT_DATA([input.y],
c95f2d78
AD
29[[/* `Bison -v' used to dump core when two tokens are defined with the same
30 string, as LE and GE below. */
31
32%token NUM
33%token LE "<="
34%token GE "<="
35
36%%
37exp: '(' exp ')' | NUM ;
38%%
39]])
40
f499b062 41AT_CHECK([bison -v input.y -o input.c], 0, ignore, ignore)
c95f2d78 42
d803322e 43AT_CLEANUP
c95f2d78
AD
44
45
ba9dda1a
AD
46## ------------------------- ##
47## Unresolved SR Conflicts. ##
48## ------------------------- ##
0df87bb6 49
ba9dda1a 50AT_SETUP([Unresolved SR Conflicts])
0df87bb6
AD
51
52AT_DATA([input.y],
53[[%token NUM OP
54%%
55exp: exp OP exp | NUM;
56]])
57
58AT_CHECK([bison input.y -o input.c -v], 0, [],
59[input.y contains 1 shift/reduce conflict.
60])
61
62# Check the contents of the report.
63AT_CHECK([cat input.output], [],
b365aa05 64[[State 5 contains 1 shift/reduce conflict.
0df87bb6 65
d2d1b42b 66
0df87bb6
AD
67Grammar
68
b29b2ed5 69 Number, Line, Rule
ff442794 70 0 3 $axiom -> exp $
b29b2ed5
AD
71 1 3 exp -> exp OP exp
72 2 3 exp -> NUM
0df87bb6 73
d2d1b42b 74
0df87bb6
AD
75Terminals, with rules where they appear
76
b365aa05 77$ (0) 0
0df87bb6
AD
78error (256)
79NUM (257) 2
80OP (258) 1
81
d2d1b42b 82
0df87bb6
AD
83Nonterminals, with rules where they appear
84
b365aa05
AD
85$axiom (5)
86 on left: 0
87exp (6)
88 on left: 1 2, on right: 0 1
0df87bb6
AD
89
90
91state 0
92
93 NUM shift, and go to state 1
94
95 exp go to state 2
96
97
98
99state 1
100
101 exp -> NUM . (rule 2)
102
103 $default reduce using rule 2 (exp)
104
105
106
107state 2
108
b365aa05 109 $axiom -> exp . $ (rule 0)
0df87bb6
AD
110 exp -> exp . OP exp (rule 1)
111
b365aa05
AD
112 $ shift, and go to state 3
113 OP shift, and go to state 4
0df87bb6
AD
114
115
116
117state 3
118
b365aa05 119 $axiom -> exp $ . (rule 0)
0df87bb6 120
b365aa05 121 $default accept
0df87bb6
AD
122
123
124state 4
125
b365aa05 126 exp -> exp OP . exp (rule 1)
0df87bb6 127
b365aa05 128 NUM shift, and go to state 1
0df87bb6 129
b365aa05 130 exp go to state 5
c73a41af 131
0df87bb6
AD
132
133
134state 5
135
b365aa05
AD
136 exp -> exp . OP exp (rule 1)
137 exp -> exp OP exp . (rule 1)
0df87bb6 138
b365aa05 139 OP shift, and go to state 4
0df87bb6 140
b365aa05
AD
141 OP [reduce using rule 1 (exp)]
142 $default reduce using rule 1 (exp)
ba9dda1a 143
d2d1b42b
AD
144
145
ba9dda1a
AD
146]])
147
d803322e 148AT_CLEANUP
ba9dda1a
AD
149
150
151## --------------------- ##
152## Solved SR Conflicts. ##
153## --------------------- ##
154
155AT_SETUP([Solved SR Conflicts])
156
157AT_DATA([input.y],
158[[%token NUM OP
159%right OP
160%%
161exp: exp OP exp | NUM;
162]])
163
164AT_CHECK([bison input.y -o input.c -v], 0, [], [])
165
166# Check the contents of the report.
167AT_CHECK([cat input.output], [],
b365aa05 168[[Conflict in state 5 between rule 2 and token OP resolved as shift.
ba9dda1a 169
d2d1b42b 170
ba9dda1a
AD
171Grammar
172
b29b2ed5 173 Number, Line, Rule
ff442794 174 0 4 $axiom -> exp $
b29b2ed5
AD
175 1 4 exp -> exp OP exp
176 2 4 exp -> NUM
ba9dda1a 177
d2d1b42b 178
ba9dda1a
AD
179Terminals, with rules where they appear
180
b365aa05 181$ (0) 0
ba9dda1a
AD
182error (256)
183NUM (257) 2
184OP (258) 1
185
d2d1b42b 186
ba9dda1a
AD
187Nonterminals, with rules where they appear
188
b365aa05
AD
189$axiom (5)
190 on left: 0
191exp (6)
192 on left: 1 2, on right: 0 1
ba9dda1a
AD
193
194
195state 0
196
197 NUM shift, and go to state 1
198
199 exp go to state 2
200
201
202
203state 1
204
205 exp -> NUM . (rule 2)
206
207 $default reduce using rule 2 (exp)
208
209
210
211state 2
212
b365aa05 213 $axiom -> exp . $ (rule 0)
ba9dda1a
AD
214 exp -> exp . OP exp (rule 1)
215
b365aa05
AD
216 $ shift, and go to state 3
217 OP shift, and go to state 4
ba9dda1a
AD
218
219
220
221state 3
222
b365aa05 223 $axiom -> exp $ . (rule 0)
ba9dda1a 224
b365aa05 225 $default accept
ba9dda1a
AD
226
227
228state 4
229
b365aa05 230 exp -> exp OP . exp (rule 1)
ba9dda1a 231
b365aa05 232 NUM shift, and go to state 1
ba9dda1a 233
b365aa05 234 exp go to state 5
ba9dda1a
AD
235
236
237
238state 5
239
b365aa05
AD
240 exp -> exp . OP exp (rule 1)
241 exp -> exp OP exp . (rule 1)
ba9dda1a 242
b365aa05 243 OP shift, and go to state 4
ba9dda1a 244
b365aa05 245 $default reduce using rule 1 (exp)
0df87bb6 246
d2d1b42b
AD
247
248
0df87bb6
AD
249]])
250
d803322e 251AT_CLEANUP
0df87bb6 252
c95f2d78 253
7da99ede 254
2ca209c1
AD
255
256## ------------------- ##
257## Rule Line Numbers. ##
258## ------------------- ##
259
260AT_SETUP([Rule Line Numbers])
261
262AT_DATA([input.y],
263[[%%
264expr:
265'a'
266
267{
268
269}
270
271'b'
272
273{
274
275}
276
277|
278
279
280{
281
282
283}
284
285'c'
286
287{
288
289}
290]])
291
292AT_CHECK([bison input.y -o input.c -v], 0, [], [])
293
294# Check the contents of the report.
295AT_CHECK([cat input.output], [],
d2d1b42b 296[[Grammar
2ca209c1
AD
297
298 Number, Line, Rule
ff442794 299 0 2 $axiom -> expr $
2ca209c1
AD
300 1 2 @1 -> /* empty */
301 2 2 expr -> 'a' @1 'b'
302 3 15 @2 -> /* empty */
303 4 15 expr -> @2 'c'
304
d2d1b42b 305
2ca209c1
AD
306Terminals, with rules where they appear
307
b365aa05 308$ (0) 0
2ca209c1
AD
309'a' (97) 2
310'b' (98) 2
311'c' (99) 4
312error (256)
313
d2d1b42b 314
2ca209c1
AD
315Nonterminals, with rules where they appear
316
b365aa05
AD
317$axiom (6)
318 on left: 0
319expr (7)
320 on left: 2 4, on right: 0
321@1 (8)
2ca209c1 322 on left: 1, on right: 2
b365aa05 323@2 (9)
2ca209c1
AD
324 on left: 3, on right: 4
325
326
327state 0
328
329 'a' shift, and go to state 1
330
610ab194
AD
331 $default reduce using rule 3 (@2)
332
b365aa05
AD
333 expr go to state 2
334 @2 go to state 3
2ca209c1
AD
335
336
337
338state 1
339
340 expr -> 'a' . @1 'b' (rule 2)
341
342 $default reduce using rule 1 (@1)
343
b365aa05 344 @1 go to state 4
2ca209c1
AD
345
346
347
348state 2
349
b365aa05 350 $axiom -> expr . $ (rule 0)
2ca209c1 351
b365aa05 352 $ shift, and go to state 5
2ca209c1
AD
353
354
355
356state 3
357
b365aa05 358 expr -> @2 . 'c' (rule 4)
2ca209c1 359
b365aa05 360 'c' shift, and go to state 6
2ca209c1
AD
361
362
363
364state 4
365
b365aa05 366 expr -> 'a' @1 . 'b' (rule 2)
2ca209c1 367
b365aa05 368 'b' shift, and go to state 7
2ca209c1
AD
369
370
371
372state 5
373
b365aa05 374 $axiom -> expr $ . (rule 0)
2ca209c1 375
b365aa05 376 $default accept
2ca209c1
AD
377
378
379state 6
380
b365aa05
AD
381 expr -> @2 'c' . (rule 4)
382
383 $default reduce using rule 4 (expr)
2ca209c1
AD
384
385
386
387state 7
388
b365aa05
AD
389 expr -> 'a' @1 'b' . (rule 2)
390
391 $default reduce using rule 2 (expr)
392
d2d1b42b
AD
393
394
2ca209c1
AD
395]])
396
397AT_CLEANUP
398
399
400
7da99ede
AD
401## -------------------- ##
402## %expect not enough. ##
403## -------------------- ##
404
405AT_SETUP([%expect not enough])
406
407AT_DATA([input.y],
408[[%token NUM OP
409%expect 0
410%%
411exp: exp OP exp | NUM;
412]])
413
414AT_CHECK([bison input.y -o input.c], 1, [],
415[input.y contains 1 shift/reduce conflict.
416expected 0 shift/reduce conflicts
417])
d803322e 418AT_CLEANUP
7da99ede
AD
419
420
421## --------------- ##
422## %expect right. ##
423## --------------- ##
424
425AT_SETUP([%expect right])
426
427AT_DATA([input.y],
428[[%token NUM OP
429%expect 1
430%%
431exp: exp OP exp | NUM;
432]])
433
a034c8b8 434AT_CHECK([bison input.y -o input.c], 0)
d803322e 435AT_CLEANUP
7da99ede
AD
436
437
438## ------------------ ##
439## %expect too much. ##
440## ------------------ ##
441
442AT_SETUP([%expect too much])
443
444AT_DATA([input.y],
445[[%token NUM OP
446%expect 2
447%%
448exp: exp OP exp | NUM;
449]])
450
451AT_CHECK([bison input.y -o input.c], 1, [],
452[input.y contains 1 shift/reduce conflict.
453expected 2 shift/reduce conflicts
454])
d803322e 455AT_CLEANUP
7da99ede
AD
456
457
cd5aafcf
AD
458## ---------------------- ##
459## Mixing %token styles. ##
460## ---------------------- ##
461
462
463AT_SETUP([Mixing %token styles])
464
465# Taken from the documentation.
466AT_DATA([input.y],
467[[%token <operator> OR "||"
468%token <operator> LE 134 "<="
469%left OR "<="
470%%
471exp: ;
472%%
473]])
474
475AT_CHECK([bison -v input.y -o input.c], 0, ignore, ignore)
476
d803322e 477AT_CLEANUP
cd5aafcf
AD
478
479
480
c95f2d78
AD
481## ---------------------- ##
482## %union and --defines. ##
483## ---------------------- ##
484
485
486AT_SETUP([%union and --defines])
487
f499b062 488AT_DATA([input.y],
c95f2d78
AD
489[%union
490{
491 int integer;
492 char *string ;
493}
494%%
495exp: {};
496])
497
f499b062 498AT_CHECK([bison --defines input.y])
c95f2d78 499
d803322e 500AT_CLEANUP
342b8b6e
AD
501
502
503## --------------------------------------- ##
504## Duplicate '/' in C comments in %union ##
505## --------------------------------------- ##
506
507
508AT_SETUP([%union and C comments])
509
f499b062 510AT_DATA([input.y],
342b8b6e
AD
511[%union
512{
513 /* The int. */ int integer;
514 /* The string. */ char *string ;
515}
516%%
517exp: {};
518])
519
f499b062
AD
520AT_CHECK([bison input.y -o input.c])
521AT_CHECK([fgrep '//*' input.c], [1], [])
342b8b6e 522
d803322e 523AT_CLEANUP
342b8b6e
AD
524
525
561f9a30
AD
526## ----------------- ##
527## Invalid input 1. ##
528## ----------------- ##
529
530
531AT_SETUP([Invalid input: 1])
532
533AT_DATA([input.y],
534[[%%
535?
536]])
537
538AT_CHECK([bison input.y], [1], [],
e0c40012 539[[input.y:2: invalid input: `?'
561f9a30 540input.y:3: fatal error: no rules in the input grammar
e0c40012 541]])
561f9a30
AD
542
543AT_CLEANUP
544
545
546## ----------------- ##
547## Invalid input 2. ##
548## ----------------- ##
549
550
551AT_SETUP([Invalid input: 2])
552
553AT_DATA([input.y],
554[[%%
555default: 'a' }
556]])
557
558AT_CHECK([bison input.y], [1], [],
e0c40012
AD
559[[input.y:2: invalid input: `}'
560]])
561
562AT_CLEANUP
563
564
565
566## -------------------- ##
567## Invalid %directive. ##
568## -------------------- ##
569
570
571AT_SETUP([Invalid %directive])
572
573AT_DATA([input.y],
574[[%invalid
575]])
576
577AT_CHECK([bison input.y], [1], [],
578[[input.y:1: unrecognized: %invalid
579input.y:1: Skipping to next %
580input.y:2: fatal error: no input grammar
581]])
561f9a30
AD
582
583AT_CLEANUP
584
585
270a173c 586
342b8b6e
AD
587## --------------------- ##
588## Invalid CPP headers. ##
589## --------------------- ##
590
270a173c
AD
591# AT_TEST_CPP_GUARD_H([INPUT-FILE-BASE)
592# -------------------------------------
593m4_define([AT_TEST_CPP_GUARD_H],
594[AT_SETUP([Invalid CPP guards: $1])
342b8b6e 595
d803322e
AD
596# Possibly create inner directories.
597dirname=`AS_DIRNAME([$1])`
270a173c 598AS_MKDIR_P([$dirname])
342b8b6e 599
270a173c 600AT_DATA([$1.y],
342b8b6e
AD
601[%%
602dummy:
603])
604
270a173c 605AT_CHECK([bison --defines=$1.h $1.y])
342b8b6e 606
270a173c
AD
607# CPP should be happy with it.
608AT_CHECK([$CC -E $1.h], 0, [ignore])
609
d803322e 610AT_CLEANUP
270a173c 611])
342b8b6e 612
270a173c
AD
613AT_TEST_CPP_GUARD_H([input/input])
614AT_TEST_CPP_GUARD_H([9foo])
776209d6
AD
615
616
617
b9752825
AD
618## -------------- ##
619## Web2c Report. ##
620## -------------- ##
776209d6
AD
621
622# The generation of the reduction was once wrong in Bison, and made it
623# miss some reductions. In the following test case, the reduction on
624# `undef_id_tok' in state 1 was missing. This is stripped down from
625# the actual web2c.y.
626
b9752825 627AT_SETUP([Web2c Report])
776209d6
AD
628
629AT_DATA([input.y],
630[[%token undef_id_tok const_id_tok
631
632%start CONST_DEC_PART
633\f
634%%
635CONST_DEC_PART:
636 CONST_DEC_LIST
637 ;
638
639CONST_DEC_LIST:
640 CONST_DEC
641 | CONST_DEC_LIST CONST_DEC
642 ;
643
644CONST_DEC:
645 { } undef_id_tok '=' const_id_tok ';'
646 ;
647%%
648
649]])
650
651AT_CHECK([bison -v input.y])
652
653AT_CHECK([sed -n 's/ *$//;/^$/!p' input.output], 0,
654[[Grammar
655 Number, Line, Rule
78d5bae9 656 0 6 $axiom -> CONST_DEC_PART $
776209d6
AD
657 1 6 CONST_DEC_PART -> CONST_DEC_LIST
658 2 10 CONST_DEC_LIST -> CONST_DEC
659 3 12 CONST_DEC_LIST -> CONST_DEC_LIST CONST_DEC
660 4 15 @1 -> /* empty */
661 5 15 CONST_DEC -> @1 undef_id_tok '=' const_id_tok ';'
662Terminals, with rules where they appear
78d5bae9 663$ (0) 0
776209d6
AD
664';' (59) 5
665'=' (61) 5
666error (256)
667undef_id_tok (257) 5
668const_id_tok (258) 5
669Nonterminals, with rules where they appear
78d5bae9
AD
670$axiom (7)
671 on left: 0
672CONST_DEC_PART (8)
673 on left: 1, on right: 0
674CONST_DEC_LIST (9)
776209d6 675 on left: 2 3, on right: 1 3
78d5bae9 676CONST_DEC (10)
776209d6 677 on left: 5, on right: 2 3
78d5bae9 678@1 (11)
776209d6
AD
679 on left: 4, on right: 5
680state 0
681 $default reduce using rule 4 (@1)
78d5bae9
AD
682 CONST_DEC_PART go to state 1
683 CONST_DEC_LIST go to state 2
684 CONST_DEC go to state 3
685 @1 go to state 4
776209d6 686state 1
78d5bae9
AD
687 $axiom -> CONST_DEC_PART . $ (rule 0)
688 $ shift, and go to state 5
689state 2
776209d6
AD
690 CONST_DEC_PART -> CONST_DEC_LIST . (rule 1)
691 CONST_DEC_LIST -> CONST_DEC_LIST . CONST_DEC (rule 3)
692 undef_id_tok reduce using rule 4 (@1)
693 $default reduce using rule 1 (CONST_DEC_PART)
78d5bae9
AD
694 CONST_DEC go to state 6
695 @1 go to state 4
696state 3
776209d6
AD
697 CONST_DEC_LIST -> CONST_DEC . (rule 2)
698 $default reduce using rule 2 (CONST_DEC_LIST)
776209d6 699state 4
78d5bae9
AD
700 CONST_DEC -> @1 . undef_id_tok '=' const_id_tok ';' (rule 5)
701 undef_id_tok shift, and go to state 7
702state 5
703 $axiom -> CONST_DEC_PART $ . (rule 0)
704 $default accept
705state 6
776209d6
AD
706 CONST_DEC_LIST -> CONST_DEC_LIST CONST_DEC . (rule 3)
707 $default reduce using rule 3 (CONST_DEC_LIST)
78d5bae9 708state 7
776209d6 709 CONST_DEC -> @1 undef_id_tok . '=' const_id_tok ';' (rule 5)
78d5bae9
AD
710 '=' shift, and go to state 8
711state 8
776209d6 712 CONST_DEC -> @1 undef_id_tok '=' . const_id_tok ';' (rule 5)
78d5bae9
AD
713 const_id_tok shift, and go to state 9
714state 9
776209d6 715 CONST_DEC -> @1 undef_id_tok '=' const_id_tok . ';' (rule 5)
78d5bae9
AD
716 ';' shift, and go to state 10
717state 10
776209d6
AD
718 CONST_DEC -> @1 undef_id_tok '=' const_id_tok ';' . (rule 5)
719 $default reduce using rule 5 (CONST_DEC)
776209d6
AD
720]])
721
722AT_CLEANUP
b9752825
AD
723
724
725## --------------- ##
726## Web2c Actions. ##
727## --------------- ##
728
729# The generation of the mapping `state -> action' was once wrong in
730# extremely specific situations. web2c.y exhibits this situation.
731# Below is a stripped version of the grammar. It looks like one can
732# simplify it further, but just don't: it is tuned to exhibit a bug,
733# which disapears when applying sane grammar transformations.
734#
735# It used to be wrong on yydefact only:
736#
737# static const short yydefact[] =
738# {
739# - 2, 0, 1, 0, 0, 2, 3, 2, 5, 4,
740# + 2, 0, 1, 0, 0, 0, 3, 2, 5, 4,
741# 0, 0
742# };
743#
744# but let's check all the tables.
745
746
747AT_SETUP([Web2c Actions])
748
749AT_DATA([input.y],
750[[%%
751statement: struct_stat;
752struct_stat: /* empty. */ | if else;
753if: "if" "const" "then" statement;
754else: "else" statement;
755%%
756]])
757
758AT_CHECK([bison -v input.y -o input.c])
759
760# Check only the tables. We don't use --no-parser, because it is
761# still to be implemented in the experimental branch of Bison.
762AT_CHECK([[sed -n 's/ *$//;/^static const.*\[\] =/,/^}/p' input.c]], 0,
763[[static const char yytranslate[] =
764{
765 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
766 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
767 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
768 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
769 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
770 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
771 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
772 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
773 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
774 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
775 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
776 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
777 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
778 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
779 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
780 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
781 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
782 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
783 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
784 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
785 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
786 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
787 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
788 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
789 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
790 2, 2, 2, 2, 2, 2, 1, 3, 4, 5,
791 6
792};
793static const short yyprhs[] =
794{
795 0, 0, 2, 3, 6, 11
796};
797static const short yyrhs[] =
798{
799 8, 0, 0, 9, 10, 0, 3, 4, 5, 7,
800 0, 6, 7, 0
801};
802static const short yyrline[] =
803{
804 0, 2, 3, 3, 4, 5
805};
806static const char *const yytname[] =
807{
808 "$", "error", "$undefined.", "\"if\"", "\"const\"", "\"then\"",
809 "\"else\"", "statement", "struct_stat", "if", "else", NULL
810};
811static const short yytoknum[] =
812{
813 0, 256, 2, 257, 258, 259, 260, -1
814};
815static const short yyr1[] =
816{
817 0, 7, 8, 8, 9, 10
818};
819static const short yyr2[] =
820{
821 0, 1, 0, 2, 4, 2
822};
823static const short yydefact[] =
824{
825 2, 0, 1, 0, 0, 2, 3, 2, 5, 4,
826 0, 0
827};
828static const short yydefgoto[] =
829{
830 8, 2, 3, 6
831};
832static const short yypact[] =
833{
834 -2, -1,-32768, -4, 1, -2,-32768, -2,-32768,-32768,
835 4,-32768
836};
837static const short yypgoto[] =
838{
839 0,-32768,-32768,-32768
840};
841static const short yytable[] =
842{
843 10, 1, 5, 4, 11, 0, 7, 9
844};
845static const short yycheck[] =
846{
847 0, 3, 6, 4, 0, -1, 5, 7
848};
849]])
850
851AT_CLEANUP