| 153 | } |
| 154 | |
| 155 | void unused_rules() |
| 156 | { |
| 157 | register int i; |
| 158 | register action *p; |
| 159 | |
| 160 | rules_used = (Yshort *) MALLOC(nrules*sizeof(Yshort)); |
| 161 | if (rules_used == 0) no_space(); |
| 162 | |
| 163 | for (i = 0; i < nrules; ++i) |
| 164 | rules_used[i] = 0; |
| 165 | |
| 166 | for (i = 0; i < nstates; ++i) |
| 167 | { |
| 168 | for (p = parser[i]; p; p = p->next) |
| 169 | { |
| 170 | if (p->action_code == REDUCE && p->suppressed <= 1) |
| 171 | rules_used[p->number] = 1; |
| 172 | } |
| 173 | } |
| 174 | |
| 175 | nunused = 0; |
| 176 | for (i = 3; i < nrules; ++i) |
| 177 | if (!rules_used[i]) ++nunused; |
| 178 | |
| 179 | if (nunused) |
| 180 | if (nunused == 1) |
| 181 | fprintf(stderr, "%s: 1 rule never reduced\n", myname); |
| 182 | else |
| 183 | fprintf(stderr, "%s: %d rules never reduced\n", myname, nunused); |
| 184 | } |
| 185 | |
| 186 | |
| 187 | void remove_conflicts() |
no test coverage detected