]> git.saurik.com Git - bison.git/blob - tests/reduce.at
* src/bison.simple (YYSTACK_FREE): Use `do {;} while (0)' as empty
[bison.git] / tests / reduce.at
1 # Exercising Bison Grammar Reduction. -*- Autotest -*-
2 # Copyright 2001 Free Software Foundation, Inc.
3
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.
8
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.
13
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.
18
19 AT_BANNER([[Grammar Reduction.]])
20
21
22 ## ------------------- ##
23 ## Useless Terminals. ##
24 ## ------------------- ##
25
26 AT_SETUP([Useless Terminals])
27
28 AT_DATA([[input.y]],
29 [[%verbose
30 %output="input.c"
31
32 %token useless1
33 %token useless2
34 %token useless3
35 %token useless4
36 %token useless5
37 %token useless6
38 %token useless7
39 %token useless8
40 %token useless9
41
42 %token useful
43 %%
44 exp: useful;
45 ]])
46
47 AT_CHECK([[bison input.y]], 0, [],
48 [[input.y contains 9 useless nonterminals
49 ]])
50
51 AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
52 [[Useless nonterminals:
53 useless1
54 useless2
55 useless3
56 useless4
57 useless5
58 useless6
59 useless7
60 useless8
61 useless9
62 ]])
63
64 AT_CLEANUP
65
66
67
68 ## ---------------------- ##
69 ## Useless Nonterminals. ##
70 ## ---------------------- ##
71
72 AT_SETUP([Useless Nonterminals])
73
74 AT_DATA([[input.y]],
75 [[%verbose
76 %output="input.c"
77
78 %nterm useless1
79 %nterm useless2
80 %nterm useless3
81 %nterm useless4
82 %nterm useless5
83 %nterm useless6
84 %nterm useless7
85 %nterm useless8
86 %nterm useless9
87
88 %token useful
89 %%
90 exp: useful;
91 ]])
92
93 AT_CHECK([[bison input.y]], 0, [],
94 [[input.y contains 9 useless nonterminals
95 ]])
96
97 AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
98 [[Useless nonterminals:
99 useless1
100 useless2
101 useless3
102 useless4
103 useless5
104 useless6
105 useless7
106 useless8
107 useless9
108 ]])
109
110 AT_CLEANUP
111
112
113
114 ## --------------- ##
115 ## Useless Rules. ##
116 ## --------------- ##
117
118 AT_SETUP([Useless Rules])
119
120 AT_DATA([[input.y]],
121 [[%verbose
122 %output="input.c"
123 %token useful
124 %%
125 exp: useful;
126 useless1: '1';
127 useless2: '2';
128 useless3: '3';
129 useless4: '4';
130 useless5: '5';
131 useless6: '6';
132 useless7: '7';
133 useless8: '8';
134 useless9: '9';
135 ]])
136
137 AT_CHECK([[bison input.y]], 0, [],
138 [[input.y contains 9 useless nonterminals and 9 useless rules
139 ]])
140
141 AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
142 [[Useless nonterminals:
143 useless1
144 useless2
145 useless3
146 useless4
147 useless5
148 useless6
149 useless7
150 useless8
151 useless9
152 Terminals which are not used:
153 '1'
154 '2'
155 '3'
156 '4'
157 '5'
158 '6'
159 '7'
160 '8'
161 '9'
162 Useless rules:
163 #2 useless1: '1';
164 #3 useless2: '2';
165 #4 useless3: '3';
166 #5 useless4: '4';
167 #6 useless5: '5';
168 #7 useless6: '6';
169 #8 useless7: '7';
170 #9 useless8: '8';
171 #10 useless9: '9';
172 ]])
173
174 AT_CLEANUP
175
176
177
178 ## ------------------- ##
179 ## Underivable Rules. ##
180 ## ------------------- ##
181
182 AT_SETUP([Underivable Rules])
183
184 AT_DATA([[input.y]],
185 [[%verbose
186 %output="input.c"
187 %token useful
188 %%
189 exp: useful | underivable;
190 underivable: indirection;
191 indirection: underivable;
192 ]])
193
194 AT_CHECK([[bison input.y]], 0, [],
195 [[input.y contains 2 useless nonterminals and 3 useless rules
196 ]])
197
198 AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
199 [[Useless nonterminals:
200 underivable
201 indirection
202 Useless rules:
203 #2 exp: underivable;
204 #3 underivable: indirection;
205 #4 indirection: underivable;
206 ]])
207
208 AT_CLEANUP