X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/68f1e3edc304e03b249b64791e4b7d981938bef4..1921f1d7a44530a5196880d52ce83fea60da6255:/tests/reduce.at diff --git a/tests/reduce.at b/tests/reduce.at index f3875822..24911943 100644 --- a/tests/reduce.at +++ b/tests/reduce.at @@ -44,12 +44,10 @@ AT_DATA([[input.y]], exp: useful; ]]) -AT_CHECK([[bison input.y]], 0, [], -[[input.y contains 9 useless nonterminals -]]) +AT_CHECK([[bison input.y]]) AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0, -[[Useless nonterminals: +[[Terminals which are not used: useless1 useless2 useless3 @@ -175,6 +173,91 @@ AT_CLEANUP +## ------------------- ## +## Reduced Automaton. ## +## ------------------- ## + +# Check that the automaton is that as the for the grammar reduced by +# hand. + +AT_SETUP([Reduced Automaton]) + +# The non reduced grammar. +# ------------------------ +AT_DATA([[not-reduced.y]], +[[/* A useless token. */ +%token useless_token +/* A useful one. */ +%token useful +%verbose +%output="not-reduced.c" + +%% + +exp: useful { /* A useful action. */ } + | non_productive { /* A non productive action. */ } + ; + +not_reachable: useful { /* A not reachable action. */ } + ; + +non_productive: non_productive useless_token + { /* Another non productive action. */ } + ; +%% +]]) + +AT_CHECK([[bison not-reduced.y]], 0, [], +[[not-reduced.y contains 2 useless nonterminals and 3 useless rules +]]) + +AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' not-reduced.output]], 0, +[[Useless nonterminals: + not_reachable + 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; +]]) + +# The reduced grammar. +# -------------------- +AT_DATA([[reduced.y]], +[[/* A useless token. */ +%token useless_token +/* A useful one. */ +%token useful +%verbose +%output="reduced.c" + +%% + +exp: useful { /* A useful action. */ } +// | non_productive { /* A non productive action. */ } */ + ; + +//not_reachable: useful { /* A not reachable action. */ } +// ; + +//non_productive: non_productive useless_token +// { /* Another non productive action. */ } +// ; +%% +]]) + +AT_CHECK([[bison reduced.y]]) + +# Comparing the parsers. +cp reduced.c expout +AT_CHECK([sed 's/not-reduced/reduced/g' not-reduced.c], 0, [expout]) + +AT_CLEANUP + + + ## ------------------- ## ## Underivable Rules. ## ## ------------------- ##