AT_SETUP([Useless Rules])
+AT_KEYWORDS([report])
+
AT_DATA([[input.y]],
[[%verbose
%output="input.c"
'7'
'8'
'9'
-Useless rules:
-#2 useless1: '1';
-#3 useless2: '2';
-#4 useless3: '3';
-#5 useless4: '4';
-#6 useless5: '5';
-#7 useless6: '6';
-#8 useless7: '7';
-#9 useless8: '8';
-#10 useless9: '9';
+Useless rules
+ 2 useless1: '1'
+ 3 useless2: '2'
+ 4 useless3: '3'
+ 5 useless4: '4'
+ 6 useless5: '5'
+ 7 useless6: '6'
+ 8 useless7: '7'
+ 9 useless8: '8'
+ 10 useless9: '9'
]])
AT_CLEANUP
AT_SETUP([Reduced Automaton])
+AT_KEYWORDS([report])
+
# The non reduced grammar.
# ------------------------
AT_DATA([[not-reduced.y]],
non_productive
Terminals which are not used:
useless_token
-Useless rules:
-#2 exp: non_productive;
-#3 not_reachable: useful;
-#4 non_productive: non_productive useless_token;
+Useless rules
+ 2 exp: non_productive
+ 3 not_reachable: useful
+ 4 non_productive: non_productive useless_token
]])
# The reduced grammar.
AT_SETUP([Underivable Rules])
+AT_KEYWORDS([report])
+
AT_DATA([[input.y]],
[[%verbose
%output="input.c"
[[Useless nonterminals:
underivable
indirection
-Useless rules:
-#2 exp: underivable;
-#3 underivable: indirection;
-#4 indirection: underivable;
+Useless rules
+ 2 exp: underivable
+ 3 underivable: indirection
+ 4 indirection: underivable
+]])
+
+AT_CLEANUP
+
+
+
+## ---------------- ##
+## Empty Language. ##
+## ---------------- ##
+
+AT_SETUP([Empty Language])
+
+AT_DATA([[input.y]],
+[[%output="input.c"
+%%
+exp: exp;
+]])
+
+AT_CHECK([[bison input.y]], 1, [],
+[[input.y: warning: 2 useless nonterminals and 2 useless rules
+input.y:3.1-3: fatal error: start symbol exp does not derive any sentence
]])
AT_CLEANUP