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