MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / remove_conflicts

Function remove_conflicts

extern/btyacc/mkpar.c:187–240  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

185
186
187void remove_conflicts()
188{
189 register int i;
190 register int symbol;
191 register action *p, *pref;
192
193 SRtotal = 0;
194 RRtotal = 0;
195 SRconflicts = NEW2(nstates, Yshort);
196 RRconflicts = NEW2(nstates, Yshort);
197 for (i = 0; i < nstates; i++) {
198 SRcount = 0;
199 RRcount = 0;
200 symbol = -1;
201 pref = 0;
202 for (p = parser[i]; p; p = p->next) {
203 if (p->symbol != symbol) {
204 pref = p;
205 symbol = p->symbol; }
206 else if (i == final_state && symbol == 0) {
207 SRcount++;
208 p->suppressed = 1;
209 if (!pref->suppressed)
210 pref->suppressed = 1; }
211 else if (pref->action_code == SHIFT) {
212 if (pref->prec > 0 && p->prec > 0) {
213 if (pref->prec < p->prec) {
214 pref->suppressed = 2;
215 pref = p; }
216 else if (pref->prec > p->prec) {
217 p->suppressed = 2; }
218 else if (pref->assoc == LEFT) {
219 pref->suppressed = 2;
220 pref = p; }
221 else if (pref->assoc == RIGHT) {
222 p->suppressed = 2; }
223 else {
224 pref->suppressed = 2;
225 p->suppressed = 2; } }
226 else {
227 SRcount++;
228 p->suppressed = 1;
229 if (!pref->suppressed)
230 pref->suppressed = 1; } }
231 else {
232 RRcount++;
233 p->suppressed = 1;
234 if (!pref->suppressed)
235 pref->suppressed = 1; } }
236 SRtotal += SRcount;
237 RRtotal += RRcount;
238 SRconflicts[i] = SRcount;
239 RRconflicts[i] = RRcount; }
240}
241
242
243void total_conflicts()

Callers 1

make_parserFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected