1 /* IELR main implementation.
3 Copyright (C) 2009 Free Software Foundation, Inc.
5 This file is part of Bison, the GNU Compiler Compiler.
7 This program is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
28 #include "AnnotationList.h"
32 #include "muscle-tab.h"
38 /** Records the value of the \%define variable lr.type. */
39 typedef enum { LR_TYPE__LALR
, LR_TYPE__IELR
, LR_TYPE__CANONICAL_LR
} LrType
;
43 * - \c result = a new \c bitset of size \c ::nritems such that any bit \c i
44 * is set iff <tt>ritem[i]</tt> is a nonterminal after which all ritems in
45 * the same RHS are nullable nonterminals. In other words, the follows of
46 * a goto on <tt>ritem[i]</tt> include the lookahead set of the item.
49 ielr_compute_ritem_sees_lookahead_set (void)
51 bitset result
= bitset_create (nritems
, BITSET_FIXED
);
52 unsigned int i
= nritems
-1;
56 while (!item_number_is_rule_number (ritem
[i
])
58 && nullable
[item_number_as_symbol_number (ritem
[i
]) - ntokens
])
59 bitset_set (result
, i
--);
60 if (!item_number_is_rule_number (ritem
[i
]) && ISVAR (ritem
[i
]))
61 bitset_set (result
, i
--);
62 while (!item_number_is_rule_number (ritem
[i
]) && i
>0)
65 if (trace_flag
& trace_ielr
)
67 fprintf (stderr
, "ritem_sees_lookahead_set:\n");
68 debug_bitset (result
);
69 fprintf (stderr
, "\n");
76 * - \c ritem_sees_lookahead_set was computed by
77 * \c ielr_compute_ritem_sees_lookahead_set.
79 * - Each of \c *edgesp and \c *edge_countsp is a new array of size
81 * - <tt>(*edgesp)[i]</tt> points to a \c goto_number array of size
82 * <tt>(*edge_countsp)[i]+1</tt>.
83 * - In such a \c goto_number array, the last element is \c ::END_NODE.
84 * - All remaining elements are the indices of the gotos to which there is an
85 * internal follow edge from goto \c i.
86 * - There is an internal follow edge from goto \c i to goto \c j iff both:
87 * - The from states of gotos \c i and \c j are the same.
88 * - The transition nonterminal for goto \c i appears as the first RHS
89 * symbol of at least one production for which both:
90 * - The LHS is the transition symbol of goto \c j.
91 * - All other RHS symbols are nullable nonterminals.
92 * - In other words, the follows of goto \c i include the follows of
93 * goto \c j and it's an internal edge because the from states are the
97 ielr_compute_internal_follow_edges (bitset ritem_sees_lookahead_set
,
98 goto_number
***edgesp
, int **edge_countsp
)
100 *edgesp
= xnmalloc (ngotos
, sizeof **edgesp
);
101 *edge_countsp
= xnmalloc (ngotos
, sizeof **edge_countsp
);
103 bitset sources
= bitset_create (ngotos
, BITSET_FIXED
);
105 for (i
= 0; i
< ngotos
; ++i
)
106 (*edge_countsp
)[i
] = 0;
107 for (i
= 0; i
< ngotos
; ++i
)
112 for (rulep
= derives
[states
[to_state
[i
]]->accessing_symbol
117 /* If there is at least one RHS symbol, if the first RHS symbol
118 is a nonterminal, and if all remaining RHS symbols (if any)
119 are nullable nonterminals, create an edge from the LHS
120 symbol's goto to the first RHS symbol's goto such that the RHS
121 symbol's goto will be the source of the edge after the
122 eventual relation_transpose below.
124 Unlike in ielr_compute_always_follows, I use a bitset for
125 edges rather than an array because it is possible that
126 multiple RHS's with the same first symbol could fit and thus
127 that we could end up with redundant edges. With the
128 possibility of redundant edges, it's hard to know ahead of
129 time how large to make such an array. Another possible
130 redundancy is that source and destination might be the same
131 goto. Eliminating all these possible redundancies now might
132 possibly help performance a little. I have not proven any of
133 this, but I'm guessing the bitset shouldn't entail much of a
134 performance penalty, if any. */
135 if (bitset_test (ritem_sees_lookahead_set
,
136 (*rulep
)->rhs
- ritem
))
139 map_goto (from_state
[i
],
140 item_number_as_symbol_number (*(*rulep
)->rhs
));
141 if (i
!= source
&& !bitset_test (sources
, source
))
143 bitset_set (sources
, source
);
145 ++(*edge_countsp
)[source
];
154 (*edgesp
)[i
] = xnmalloc (nsources
+ 1, sizeof *(*edgesp
)[i
]);
156 bitset_iterator biter_source
;
157 bitset_bindex source
;
159 BITSET_FOR_EACH (biter_source
, sources
, source
, 0)
160 (*edgesp
)[i
][j
++] = source
;
162 (*edgesp
)[i
][nsources
] = END_NODE
;
164 bitset_zero (sources
);
166 bitset_free (sources
);
169 relation_transpose (edgesp
, ngotos
);
171 if (trace_flag
& trace_ielr
)
173 fprintf (stderr
, "internal_follow_edges:\n");
174 relation_print (*edgesp
, ngotos
, stderr
);
180 * - \c ritem_sees_lookahead_set was computed by
181 * \c ielr_compute_ritem_sees_lookahead_set.
182 * - \c internal_follow_edges was computed by
183 * \c ielr_compute_internal_follow_edges.
185 * - \c *follow_kernel_itemsp is a new \c bitsetv in which the number of rows
186 * is \c ngotos and the number of columns is maximum number of kernel items
188 * - <tt>(*follow_kernel_itemsp)[i][j]</tt> is set iff the follows of goto
189 * \c i include the lookahead set of item \c j in the from state of goto
191 * - Thus, <tt>(*follow_kernel_itemsp)[i][j]</tt> is always unset if there is
192 * no item \c j in the from state of goto \c i.
195 ielr_compute_follow_kernel_items (bitset ritem_sees_lookahead_set
,
196 goto_number
**internal_follow_edges
,
197 bitsetv
*follow_kernel_itemsp
)
200 size_t max_nitems
= 0;
202 for (i
= 0; i
< nstates
; ++i
)
203 if (states
[i
]->nitems
> max_nitems
)
204 max_nitems
= states
[i
]->nitems
;
205 *follow_kernel_itemsp
= bitsetv_create (ngotos
, max_nitems
, BITSET_FIXED
);
209 for (i
= 0; i
< ngotos
; ++i
)
211 size_t nitems
= states
[from_state
[i
]]->nitems
;
212 item_number
*items
= states
[from_state
[i
]]->items
;
214 for (j
= 0; j
< nitems
; ++j
)
215 /* If this item has this goto and if all subsequent symbols in this
216 RHS (if any) are nullable nonterminals, then record this item as
217 one whose lookahead set is included in this goto's follows. */
218 if (item_number_is_symbol_number (ritem
[items
[j
]])
219 && item_number_as_symbol_number (ritem
[items
[j
]])
220 == states
[to_state
[i
]]->accessing_symbol
221 && bitset_test (ritem_sees_lookahead_set
, items
[j
]))
222 bitset_set ((*follow_kernel_itemsp
)[i
], j
);
225 relation_digraph (internal_follow_edges
, ngotos
, follow_kernel_itemsp
);
227 if (trace_flag
& trace_ielr
)
229 fprintf (stderr
, "follow_kernel_items:\n");
230 debug_bitsetv (*follow_kernel_itemsp
);
236 * - \c *edgesp and \c edge_counts were computed by
237 * \c ielr_compute_internal_follow_edges.
239 * - \c *always_followsp is a new \c bitsetv with \c ngotos rows and
240 * \c ntokens columns.
241 * - <tt>(*always_followsp)[i][j]</tt> is set iff token \c j is an always
242 * follow (that is, it's computed by internal and successor edges) of goto
244 * - Rows of \c *edgesp have been realloc'ed and extended to include
245 * successor follow edges. \c edge_counts has not been updated.
248 ielr_compute_always_follows (goto_number
***edgesp
,
249 int const edge_counts
[],
250 bitsetv
*always_followsp
)
252 *always_followsp
= bitsetv_create (ngotos
, ntokens
, BITSET_FIXED
);
254 goto_number
*edge_array
= xnmalloc (ngotos
, sizeof *edge_array
);
256 for (i
= 0; i
< ngotos
; ++i
)
258 goto_number nedges
= edge_counts
[i
];
261 transitions
*trans
= states
[to_state
[i
]]->transitions
;
262 FOR_EACH_SHIFT (trans
, j
)
263 bitset_set ((*always_followsp
)[i
], TRANSITION_SYMBOL (trans
, j
));
264 for (; j
< trans
->num
; ++j
)
266 symbol_number sym
= TRANSITION_SYMBOL (trans
, j
);
267 if (nullable
[sym
- ntokens
])
268 edge_array
[nedges
++] = map_goto (to_state
[i
], sym
);
271 if (nedges
- edge_counts
[i
])
274 xnrealloc ((*edgesp
)[i
], nedges
+ 1, sizeof *(*edgesp
)[i
]);
275 memcpy ((*edgesp
)[i
] + edge_counts
[i
], edge_array
+ edge_counts
[i
],
276 (nedges
- edge_counts
[i
]) * sizeof *(*edgesp
)[i
]);
277 (*edgesp
)[i
][nedges
] = END_NODE
;
282 relation_digraph (*edgesp
, ngotos
, always_followsp
);
284 if (trace_flag
& trace_ielr
)
286 fprintf (stderr
, "always follow edges:\n");
287 relation_print (*edgesp
, ngotos
, stderr
);
288 fprintf (stderr
, "always_follows:\n");
289 debug_bitsetv (*always_followsp
);
295 * - \c result is a new array of size \c ::nstates.
296 * - <tt>result[i]</tt> is an array of pointers to the predecessor
297 * <tt>state</tt>'s of state \c i.
298 * - The last element of such an array is \c NULL.
301 ielr_compute_predecessors (void)
304 int *predecessor_counts
= xnmalloc (nstates
, sizeof *predecessor_counts
);
305 state
***result
= xnmalloc (nstates
, sizeof *result
);
306 for (i
= 0; i
< nstates
; ++i
)
307 predecessor_counts
[i
] = 0;
308 for (i
= 0; i
< nstates
; ++i
)
311 for (j
= 0; j
< states
[i
]->transitions
->num
; ++j
)
312 ++predecessor_counts
[states
[i
]->transitions
->states
[j
]->number
];
314 for (i
= 0; i
< nstates
; ++i
)
316 result
[i
] = xnmalloc (predecessor_counts
[i
]+1, sizeof *result
[i
]);
317 result
[i
][predecessor_counts
[i
]] = NULL
;
318 predecessor_counts
[i
] = 0;
320 for (i
= 0; i
< nstates
; ++i
)
323 for (j
= 0; j
< states
[i
]->transitions
->num
; ++j
)
325 state_number k
= states
[i
]->transitions
->states
[j
]->number
;
326 result
[k
][predecessor_counts
[k
]++] = states
[i
];
329 free (predecessor_counts
);
335 * - \c *follow_kernel_itemsp and \c *always_followsp were computed by
336 * \c ielr_compute_follow_kernel_items and
337 * \c ielr_compute_always_follows.
338 * - Iff <tt>predecessorsp != NULL</tt>, then \c *predecessorsp was computed
339 * by \c ielr_compute_predecessors.
342 ielr_compute_auxiliary_tables (bitsetv
*follow_kernel_itemsp
,
343 bitsetv
*always_followsp
,
344 state
****predecessorsp
)
349 bitset ritem_sees_lookahead_set
= ielr_compute_ritem_sees_lookahead_set ();
350 ielr_compute_internal_follow_edges (ritem_sees_lookahead_set
,
351 &edges
, &edge_counts
);
352 ielr_compute_follow_kernel_items (ritem_sees_lookahead_set
, edges
,
353 follow_kernel_itemsp
);
354 bitset_free (ritem_sees_lookahead_set
);
356 ielr_compute_always_follows (&edges
, edge_counts
, always_followsp
);
359 for (i
= 0; i
< ngotos
; ++i
)
365 *predecessorsp
= ielr_compute_predecessors ();
370 * - FIXME: It might be an interesting experiment to compare the space and
371 * time efficiency of computing \c item_lookahead_sets either:
373 * - Just-in-time, as implemented below.
374 * - Not at all. That is, just let annotations continue even when
378 ielr_item_has_lookahead (state
*s
, symbol_number lhs
, size_t item
,
379 symbol_number lookahead
, state
***predecessors
,
380 bitset
**item_lookahead_sets
)
382 if (!item_lookahead_sets
[s
->number
])
385 item_lookahead_sets
[s
->number
] =
386 xnmalloc (s
->nitems
, sizeof item_lookahead_sets
[s
->number
][0]);
387 for (i
= 0; i
< s
->nitems
; ++i
)
388 item_lookahead_sets
[s
->number
][i
] = NULL
;
390 if (!item_lookahead_sets
[s
->number
][item
])
392 item_lookahead_sets
[s
->number
][item
] =
393 bitset_create (ntokens
, BITSET_FIXED
);
394 /* If this kernel item is the beginning of a RHS, it must be the kernel
395 item in the start state, and so its LHS has no follows and no goto to
396 check. If, instead, this kernel item is the successor of the start
397 state's kernel item, there are still no follows and no goto. This
398 situation is fortunate because we want to avoid the - 2 below in both
401 Actually, IELR(1) should never invoke this function for either of
402 those cases because (1) follow_kernel_items will never reference a
403 kernel item for this RHS because the end token blocks sight of the
404 lookahead set from the RHS's only nonterminal, and (2) no reduction
405 has a lookback dependency on this lookahead set. Nevertheless, I
406 didn't change this test to an aver just in case the usage of this
407 function evolves to need those two cases. In both cases, the current
408 implementation returns the right result. */
409 if (s
->items
[item
] > 1)
411 /* If the LHS symbol of this item isn't known (because this is a
412 top-level invocation), go get it. */
416 for (i
= s
->items
[item
];
417 !item_number_is_rule_number (ritem
[i
]);
420 lhs
= rules
[item_number_as_rule_number (ritem
[i
])].lhs
->number
;
422 /* If this kernel item is next to the beginning of the RHS, then
423 check all predecessors' goto follows for the LHS. */
424 if (item_number_is_rule_number (ritem
[s
->items
[item
] - 2]))
427 aver (lhs
!= accept
->number
);
428 for (predecessor
= predecessors
[s
->number
];
431 bitset_or (item_lookahead_sets
[s
->number
][item
],
432 item_lookahead_sets
[s
->number
][item
],
433 goto_follows
[map_goto ((*predecessor
)->number
,
436 /* If this kernel item is later in the RHS, then check all
437 predecessor items' lookahead sets. */
441 for (predecessor
= predecessors
[s
->number
];
445 size_t predecessor_item
;
446 for (predecessor_item
= 0;
447 predecessor_item
< (*predecessor
)->nitems
;
449 if ((*predecessor
)->items
[predecessor_item
]
450 == s
->items
[item
] - 1)
452 aver (predecessor_item
!= (*predecessor
)->nitems
);
453 ielr_item_has_lookahead (*predecessor
, lhs
,
454 predecessor_item
, 0 /*irrelevant*/,
455 predecessors
, item_lookahead_sets
);
456 bitset_or (item_lookahead_sets
[s
->number
][item
],
457 item_lookahead_sets
[s
->number
][item
],
458 item_lookahead_sets
[(*predecessor
)->number
]
464 return bitset_test (item_lookahead_sets
[s
->number
][item
], lookahead
);
469 * - \c follow_kernel_items, \c always_follows, and \c predecessors
470 * were computed by \c ielr_compute_auxiliary_tables.
472 * - Each of <tt>*inadequacy_listsp</tt> and <tt>*annotation_listsp</tt>
473 * points to a new array of size \c ::nstates.
474 * - For <tt>0 <= i < ::nstates</tt>:
475 * - <tt>(*inadequacy_listsp)[i]</tt> contains the \c InadequacyList head
476 * node for <tt>states[i]</tt>.
477 * - <tt>(*annotation_listsp)[i]</tt> contains the \c AnnotationList head
478 * node for <tt>states[i]</tt>.
479 * - <tt>*max_annotationsp</tt> is the maximum number of annotations per
483 ielr_compute_annotation_lists (bitsetv follow_kernel_items
,
484 bitsetv always_follows
, state
***predecessors
,
485 AnnotationIndex
*max_annotationsp
,
486 InadequacyList
***inadequacy_listsp
,
487 AnnotationList
***annotation_listsp
,
488 struct obstack
*annotations_obstackp
)
490 bitset
**item_lookahead_sets
=
491 xnmalloc (nstates
, sizeof *item_lookahead_sets
);
492 AnnotationIndex
*annotation_counts
=
493 xnmalloc (nstates
, sizeof *annotation_counts
);
494 ContributionIndex max_contributions
= 0;
495 unsigned int total_annotations
= 0;
498 *inadequacy_listsp
= xnmalloc (nstates
, sizeof **inadequacy_listsp
);
499 *annotation_listsp
= xnmalloc (nstates
, sizeof **annotation_listsp
);
500 for (i
= 0; i
< nstates
; ++i
)
502 item_lookahead_sets
[i
] = NULL
;
503 (*inadequacy_listsp
)[i
] = NULL
;
504 (*annotation_listsp
)[i
] = NULL
;
505 annotation_counts
[i
] = 0;
508 InadequacyListNodeCount inadequacy_list_node_count
= 0;
509 for (i
= 0; i
< nstates
; ++i
)
510 AnnotationList__compute_from_inadequacies (
511 states
[i
], follow_kernel_items
, always_follows
, predecessors
,
512 item_lookahead_sets
, *inadequacy_listsp
, *annotation_listsp
,
513 annotation_counts
, &max_contributions
, annotations_obstackp
,
514 &inadequacy_list_node_count
);
516 *max_annotationsp
= 0;
517 for (i
= 0; i
< nstates
; ++i
)
519 if (annotation_counts
[i
] > *max_annotationsp
)
520 *max_annotationsp
= annotation_counts
[i
];
521 total_annotations
+= annotation_counts
[i
];
523 if (trace_flag
& trace_ielr
)
525 for (i
= 0; i
< nstates
; ++i
)
527 fprintf (stderr
, "Inadequacy annotations for state %d:\n", i
);
528 AnnotationList__debug ((*annotation_listsp
)[i
],
529 states
[i
]->nitems
, 2);
531 fprintf (stderr
, "Number of LR(0)/LALR(1) states: %d\n", nstates
);
532 fprintf (stderr
, "Average number of annotations per state: %f\n",
533 (float)total_annotations
/nstates
);
534 fprintf (stderr
, "Max number of annotations per state: %d\n",
536 fprintf (stderr
, "Max number of contributions per annotation: %d\n",
539 for (i
= 0; i
< nstates
; ++i
)
540 if (item_lookahead_sets
[i
])
543 for (j
= 0; j
< states
[i
]->nitems
; ++j
)
544 if (item_lookahead_sets
[i
][j
])
545 bitset_free (item_lookahead_sets
[i
][j
]);
546 free (item_lookahead_sets
[i
]);
548 free (item_lookahead_sets
);
549 free (annotation_counts
);
552 typedef struct state_list
{
553 struct state_list
*next
;
555 /** Has this state been recomputed as a successor of another state? */
556 bool recomputedAsSuccessor
;
558 * \c NULL iff all lookahead sets are empty. <tt>lookaheads[i] = NULL</tt>
559 * iff the lookahead set on item \c i is empty.
563 * nextIsocore is the next state in a circularly linked-list of all states
564 * with the same core. The one originally computed by generate_states in
565 * LR0.c is lr0Isocore.
567 struct state_list
*lr0Isocore
;
568 struct state_list
*nextIsocore
;
573 * - \c follow_kernel_items and \c always_follows were computed by
574 * \c ielr_compute_auxiliary_tables.
575 * - <tt>n->class = nterm_sym</tt>.
577 * - \c follow_set contains the follow set for the goto on nonterminal \c n
578 * in state \c s based on the lookaheads stored in <tt>s->lookaheads</tt>.
581 ielr_compute_goto_follow_set (bitsetv follow_kernel_items
,
582 bitsetv always_follows
, state_list
*s
,
583 symbol
*n
, bitset follow_set
)
585 goto_number n_goto
= map_goto (s
->lr0Isocore
->state
->number
, n
->number
);
586 bitset_copy (follow_set
, always_follows
[n_goto
]);
589 bitset_iterator biter_item
;
591 BITSET_FOR_EACH (biter_item
, follow_kernel_items
[n_goto
], item
, 0)
592 if (s
->lookaheads
[item
])
593 bitset_or (follow_set
, follow_set
, s
->lookaheads
[item
]);
599 * - \c follow_kernel_items and \c always_follows were computed by
600 * \c ielr_compute_auxiliary_tables.
601 * - \c lookahead_filter was computed by
602 * \c AnnotationList__computeLookaheadFilter for the original LR(0) isocore
604 * - The number of rows in \c lookaheads is at least the number of items in
605 * \c t, and the number of columns is \c ::ntokens.
607 * - <tt>lookaheads[i][j]</tt> is set iff both:
608 * - <tt>lookahead_filter[i][j]</tt> is set.
609 * - The isocore of \c t that will be the transition successor of \c s will
610 * inherit from \c s token \c j into the lookahead set of item \c i.
613 ielr_compute_lookaheads (bitsetv follow_kernel_items
, bitsetv always_follows
,
614 state_list
*s
, state
*t
, bitsetv lookahead_filter
,
619 bitsetv_zero (lookaheads
);
620 for (t_item
= 0; t_item
< t
->nitems
; ++t_item
)
622 /* If this kernel item is the beginning of a RHS, it must be the
623 kernel item in the start state, but t is supposed to be a successor
624 state. If, instead, this kernel item is the successor of the start
625 state's kernel item, the lookahead set is empty. This second case is
626 a special case to avoid the - 2 below, but the next successor can be
627 handled fine without special casing it. */
628 aver (t
->items
[t_item
] != 0);
629 if (t
->items
[t_item
] > 1
630 && !bitset_empty_p (lookahead_filter
[t_item
]))
632 if (item_number_is_rule_number (ritem
[t
->items
[t_item
] - 2]))
634 unsigned int rule_item
;
635 for (rule_item
= t
->items
[t_item
];
636 !item_number_is_rule_number (ritem
[rule_item
]);
639 ielr_compute_goto_follow_set (
640 follow_kernel_items
, always_follows
, s
,
641 rules
[item_number_as_rule_number (ritem
[rule_item
])].lhs
,
644 else if (s
->lookaheads
)
646 /* We don't have to start the s item search at the beginning
647 every time because items from both states are sorted by their
649 for (; s_item
< s
->state
->nitems
; ++s_item
)
650 if (s
->state
->items
[s_item
] == t
->items
[t_item
] - 1)
652 aver (s_item
!= s
->state
->nitems
);
653 if (s
->lookaheads
[s_item
])
654 bitset_copy (lookaheads
[t_item
], s
->lookaheads
[s_item
]);
656 bitset_and (lookaheads
[t_item
],
657 lookaheads
[t_item
], lookahead_filter
[t_item
]);
664 * - \c follow_kernel_items and \c always_follows were computed by
665 * \c ielr_compute_auxiliary_tables.
667 * - <tt>annotation_lists = NULL</tt> and all bits in work2 are set.
668 * - \c annotation_lists was computed by \c ielr_compute_annotation_lists.
669 * - The number of rows in each of \c lookaheads and \c work2 is the maximum
670 * number of items in any state. The number of columns in each is
672 * - \c lookaheads was computed by \c ielr_compute_lookaheads for \c t.
673 * - \c ::nstates is the total number of states, some not yet fully computed,
674 * in the list ending at \c *last_statep. It is at least the number of
675 * original LR(0) states.
676 * - The size of \c work1 is at least the number of annotations for the LR(0)
680 * - In the case that <tt>annotation_lists != NULL</tt>,
681 * <tt>lookaheads \@pre</tt> was merged with some isocore of \c t if
682 * permitted by the annotations for the original LR(0) isocore of \c t.
683 * If this changed the lookaheads in that isocore, those changes were
684 * propagated to all already computed transition successors recursively
685 * possibly resulting in the splitting of some of those successors.
686 * - In the case that <tt>annotation_lists = NULL</tt>,
687 * <tt>lookaheads \@pre</tt> was merged with some isocore of \c t if the
688 * isocore's lookahead sets were identical to those specified by
689 * <tt>lookaheads \@pre</tt>.
690 * - If no such merge was permitted, a new isocore of \c t containing
691 * <tt>lookaheads \@pre</tt> was appended to the state list whose
692 * previous tail was <tt>*last_statep \@pre</tt> and \c ::nstates was
693 * incremented. It was also appended to \c t's isocore list.
694 * - <tt>*tp</tt> = the isocore of \c t into which
695 * <tt>lookaheads \@pre</tt> was placed/merged.
696 * - \c lookaheads, \c work1, and \c work2 may have been altered.
699 ielr_compute_state (bitsetv follow_kernel_items
, bitsetv always_follows
,
700 AnnotationList
**annotation_lists
, state
*t
,
701 bitsetv lookaheads
, state_list
**last_statep
,
702 ContributionIndex work1
[], bitsetv work2
, state
**tp
)
704 state_list
*lr0_isocore
= t
->state_list
->lr0Isocore
;
705 state_list
**this_isocorep
;
708 /* Determine whether there's an isocore of t with which these lookaheads can
713 if (annotation_lists
)
714 for (ai
= 0, a
= annotation_lists
[lr0_isocore
->state
->number
];
718 AnnotationList__computeDominantContribution (
719 a
, lr0_isocore
->state
->nitems
, lookaheads
, false);
720 for (this_isocorep
= &t
->state_list
;
721 this_isocorep
== &t
->state_list
|| *this_isocorep
!= t
->state_list
;
722 this_isocorep
= &(*this_isocorep
)->nextIsocore
)
724 if (!(*this_isocorep
)->recomputedAsSuccessor
)
726 if (annotation_lists
)
728 for (ai
= 0, a
= annotation_lists
[lr0_isocore
->state
->number
];
732 if (work1
[ai
] != ContributionIndex__none
)
734 /* This isocore compatibility test depends on the fact
735 that, if the dominant contributions are the same for the
736 two isocores, then merging their lookahead sets will not
737 produce a state with a different dominant contribution.
739 ContributionIndex ci
=
740 AnnotationList__computeDominantContribution (
741 a
, lr0_isocore
->state
->nitems
,
742 (*this_isocorep
)->lookaheads
, false);
743 if (ci
!= ContributionIndex__none
&& work1
[ai
] != ci
)
753 for (i
= 0; i
< t
->nitems
; ++i
)
755 if (!(*this_isocorep
)->lookaheads
756 || !(*this_isocorep
)->lookaheads
[i
])
758 if (!bitset_empty_p (lookaheads
[i
]))
761 // bitset_equal_p uses the size of the first argument, so
762 // lookaheads[i] must be the second argument.
763 else if (!bitset_equal_p ((*this_isocorep
)->lookaheads
[i
],
773 has_lookaheads
= false;
776 for (i
= 0; i
< lr0_isocore
->state
->nitems
; ++i
)
777 if (!bitset_empty_p (lookaheads
[i
]))
779 has_lookaheads
= true;
784 /* Merge with an existing isocore. */
785 if (this_isocorep
== &t
->state_list
|| *this_isocorep
!= t
->state_list
)
787 bool new_lookaheads
= false;
788 *tp
= (*this_isocorep
)->state
;
790 /* Merge lookaheads into the state and record whether any of them are
795 if (!(*this_isocorep
)->lookaheads
)
797 (*this_isocorep
)->lookaheads
=
798 xnmalloc (t
->nitems
, sizeof (*this_isocorep
)->lookaheads
);
799 for (i
= 0; i
< t
->nitems
; ++i
)
800 (*this_isocorep
)->lookaheads
[i
] = NULL
;
802 for (i
= 0; i
< t
->nitems
; ++i
)
803 if (!bitset_empty_p (lookaheads
[i
]))
805 if (!(*this_isocorep
)->lookaheads
[i
])
806 (*this_isocorep
)->lookaheads
[i
] =
807 bitset_create (ntokens
, BITSET_FIXED
);
808 bitset_andn (lookaheads
[i
],
809 lookaheads
[i
], (*this_isocorep
)->lookaheads
[i
]);
810 bitset_or ((*this_isocorep
)->lookaheads
[i
],
811 lookaheads
[i
], (*this_isocorep
)->lookaheads
[i
]);
812 if (!bitset_empty_p (lookaheads
[i
]))
813 new_lookaheads
= true;
817 /* If new lookaheads were merged, propagate those lookaheads to the
818 successors, possibly splitting them. If *tp is being recomputed for
819 the first time, this isn't necessary because the main
820 ielr_split_states loop will handle the successors later. */
821 if (!(*this_isocorep
)->recomputedAsSuccessor
)
822 (*this_isocorep
)->recomputedAsSuccessor
= true;
823 else if (new_lookaheads
)
826 /* When merging demands identical lookahead sets, it is impossible to
827 merge new lookaheads. */
828 aver (annotation_lists
);
829 for (i
= 0; i
< (*tp
)->transitions
->num
; ++i
)
831 state
*t2
= (*tp
)->transitions
->states
[i
];
832 /* At any time, there's at most one state for which we have so
833 far initially recomputed only some of its successors in the
834 main ielr_split_states loop. Because we recompute successors
835 in order, we can just stop at the first such successor. Of
836 course, *tp might be a state some of whose successors have
837 been recomputed as successors of other states rather than as
838 successors of *tp. It's fine if we go ahead and propagate to
839 some of those. We'll propagate to them again (but stop when
840 we see nothing changes) and to the others when we reach *tp in
841 the main ielr_split_states loop later. */
842 if (!t2
->state_list
->recomputedAsSuccessor
)
844 AnnotationList__computeLookaheadFilter (
845 annotation_lists
[t2
->state_list
->lr0Isocore
->state
->number
],
847 ielr_compute_lookaheads (follow_kernel_items
, always_follows
,
848 (*this_isocorep
), t2
, work2
,
850 /* FIXME: If splitting t2 here, it's possible that lookaheads
851 that had already propagated from *tp to t2 will be left in t2
852 after *tp has been removed as t2's predecessor:
853 - We're going to recompute all lookaheads in phase 4, so these
854 extra lookaheads won't appear in the final parser table.
855 - If t2 has just one annotation, then these extra lookaheads
856 cannot alter the dominating contribution to the associated
857 inadequacy and thus cannot needlessly prevent a future merge
858 of some new state with t2. We can be sure of this because:
859 - The fact that we're splitting t2 now means that some
860 predecessors (at least one) other than *tp must be
861 propagating contributions to t2.
862 - The fact that t2 was merged in the first place means that,
863 if *tp propagated any contributions, the dominating
864 contribution must be the same as that from those other
866 - Thus, if some new state to be merged with t2 in the future
867 proves to be compatible with the contributions propagated
868 by the other predecessors, it will also be compatible with
869 the contributions made by the extra lookaheads left behind
871 - However, if t2 has more than one annotation and these extra
872 lookaheads contribute to one of their inadequacies, it's
873 possible these extra lookaheads may needlessly prevent a
874 future merge with t2. For example:
875 - Let's say there's an inadequacy A that makes the split
876 necessary as follows:
877 - There's currently just one other predecessor and it
878 propagates to t2 some contributions to inadequacy A.
879 - The new lookaheads that we were attempting to propagate
880 from *tp to t2 made contributions to inadequacy A with a
881 different dominating contribution than those from that
883 - The extra lookaheads either make no contribution to
884 inadequacy A or have the same dominating contribution as
885 the contributions from the other predecessor. Either
886 way, as explained above, they can't prevent a future
888 - Let's say there's an inadequacy B that causes the trouble
889 with future merges as follows:
890 - The extra lookaheads make contributions to inadequacy B.
891 - Those extra contributions did not prevent the original
892 merge to create t2 because the other predecessor
893 propagates to t2 no contributions to inadequacy B.
894 - Thus, those extra contributions may prevent a future
895 merge with t2 even though the merge would be fine if *tp
896 had not left them behind.
897 - Is the latter case common enough to worry about?
898 - Perhaps we should track all predecessors and iterate them
899 now to recreate t2 without those extra lookaheads. */
900 ielr_compute_state (follow_kernel_items
, always_follows
,
901 annotation_lists
, t2
, lookaheads
,
902 last_statep
, work1
, work2
,
903 &(*tp
)->transitions
->states
[i
]);
908 /* Create a new isocore. */
911 state_list
*old_isocore
= *this_isocorep
;
912 (*last_statep
)->next
= *this_isocorep
= xmalloc (sizeof **last_statep
);
913 *last_statep
= *this_isocorep
;
914 (*last_statep
)->state
= *tp
= state_new_isocore (t
);
915 (*tp
)->state_list
= *last_statep
;
916 (*last_statep
)->recomputedAsSuccessor
= true;
917 (*last_statep
)->next
= NULL
;
918 (*last_statep
)->lookaheads
= NULL
;
922 (*last_statep
)->lookaheads
=
923 xnmalloc (t
->nitems
, sizeof (*last_statep
)->lookaheads
);
924 for (i
= 0; i
< t
->nitems
; ++i
)
926 if (bitset_empty_p (lookaheads
[i
]))
927 (*last_statep
)->lookaheads
[i
] = NULL
;
930 (*last_statep
)->lookaheads
[i
] =
931 bitset_create (ntokens
, BITSET_FIXED
);
932 bitset_copy ((*last_statep
)->lookaheads
[i
], lookaheads
[i
]);
936 (*last_statep
)->lr0Isocore
= lr0_isocore
;
937 (*last_statep
)->nextIsocore
= old_isocore
;
943 * - \c follow_kernel_items and \c always_follows were computed by
944 * \c ielr_compute_auxiliary_tables.
946 * - <tt>annotation_lists = NULL</tt> and <tt>max_annotations=0</tt>.
947 * - \c annotation_lists and \c max_annotations were computed by
948 * \c ielr_compute_annotation_lists.
950 * - \c ::states is of size \c ::nstates (which might be greater than
951 * <tt>::nstates \@pre</tt>) and no longer contains any LR(1)-relative
952 * inadequacy. \c annotation_lists was used to determine state
953 * compatibility or, if <tt>annotation_lists = NULL</tt>, the canonical
954 * LR(1) state compatibility test was used.
955 * - If <tt>annotation_lists = NULL</tt>, reduction lookahead sets were
956 * computed in all states. TV_IELR_PHASE4 was pushed while they were
957 * computed from item lookahead sets.
960 ielr_split_states (bitsetv follow_kernel_items
, bitsetv always_follows
,
961 AnnotationList
**annotation_lists
,
962 AnnotationIndex max_annotations
)
964 state_list
*first_state
;
965 state_list
*last_state
;
966 bitsetv lookahead_filter
= NULL
;
969 /* Set up state list and some reusable bitsets. */
971 size_t max_nitems
= 0;
973 state_list
**nodep
= &first_state
;
974 for (i
= 0; i
< nstates
; ++i
)
976 *nodep
= states
[i
]->state_list
= last_state
= xmalloc (sizeof **nodep
);
977 (*nodep
)->state
= states
[i
];
978 (*nodep
)->recomputedAsSuccessor
= false;
979 (*nodep
)->lookaheads
= NULL
;
980 (*nodep
)->lr0Isocore
= *nodep
;
981 (*nodep
)->nextIsocore
= *nodep
;
982 nodep
= &(*nodep
)->next
;
983 if (states
[i
]->nitems
> max_nitems
)
984 max_nitems
= states
[i
]->nitems
;
987 lookahead_filter
= bitsetv_create (max_nitems
, ntokens
, BITSET_FIXED
);
988 if (!annotation_lists
)
989 bitsetv_ones (lookahead_filter
);
990 lookaheads
= bitsetv_create (max_nitems
, ntokens
, BITSET_FIXED
);
993 /* Recompute states. */
995 ContributionIndex
*work
= xnmalloc (max_annotations
, sizeof *work
);
996 state_list
*this_state
;
997 for (this_state
= first_state
; this_state
; this_state
= this_state
->next
)
999 state
*s
= this_state
->state
;
1001 for (i
= 0; i
< s
->transitions
->num
; ++i
)
1003 state
*t
= s
->transitions
->states
[i
];
1004 if (annotation_lists
)
1005 AnnotationList__computeLookaheadFilter (
1006 annotation_lists
[t
->state_list
->lr0Isocore
->state
->number
],
1007 t
->nitems
, lookahead_filter
);
1008 ielr_compute_lookaheads (follow_kernel_items
, always_follows
,
1009 this_state
, t
, lookahead_filter
,
1011 ielr_compute_state (follow_kernel_items
, always_follows
,
1012 annotation_lists
, t
, lookaheads
, &last_state
,
1013 work
, lookahead_filter
,
1014 &s
->transitions
->states
[i
]);
1020 bitsetv_free (lookahead_filter
);
1021 bitsetv_free (lookaheads
);
1023 /* Store states back in the states array. */
1024 states
= xnrealloc (states
, nstates
, sizeof *states
);
1027 for (node
= first_state
; node
; node
= node
->next
)
1028 states
[node
->state
->number
] = node
->state
;
1031 /* In the case of canonical LR(1), copy item lookahead sets to reduction
1033 if (!annotation_lists
)
1035 timevar_push (TV_IELR_PHASE4
);
1038 for (node
= first_state
; node
; node
= node
->next
)
1039 if (!node
->state
->consistent
)
1042 item_number
*itemset
= node
->state
->items
;
1044 for (r
= 0; r
< node
->state
->reductions
->num
; ++r
)
1046 rule
*this_rule
= node
->state
->reductions
->rules
[r
];
1047 bitset lookahead_set
=
1048 node
->state
->reductions
->lookahead_tokens
[r
];
1049 if (item_number_is_rule_number (*this_rule
->rhs
))
1050 ielr_compute_goto_follow_set (follow_kernel_items
,
1051 always_follows
, node
,
1052 this_rule
->lhs
, lookahead_set
);
1053 else if (node
->lookaheads
)
1055 /* We don't need to start the kernel item search back at
1056 i=0 because both items and reductions are sorted on rule
1058 while (!item_number_is_rule_number (ritem
[itemset
[i
]])
1059 || item_number_as_rule_number (ritem
[itemset
[i
]])
1060 != this_rule
->number
)
1063 aver (i
< node
->state
->nitems
);
1065 if (node
->lookaheads
[i
])
1066 bitset_copy (lookahead_set
, node
->lookaheads
[i
]);
1070 timevar_pop (TV_IELR_PHASE4
);
1073 /* Free state list. */
1076 state_list
*node
= first_state
;
1077 if (node
->lookaheads
)
1080 for (i
= 0; i
< node
->state
->nitems
; ++i
)
1081 if (node
->lookaheads
[i
])
1082 bitset_free (node
->lookaheads
[i
]);
1083 free (node
->lookaheads
);
1085 first_state
= node
->next
;
1095 /* Examine user options. */
1097 char *type
= muscle_percent_define_get ("lr.type");
1098 if (0 == strcmp (type
, "lalr"))
1099 lr_type
= LR_TYPE__LALR
;
1100 else if (0 == strcmp (type
, "ielr"))
1101 lr_type
= LR_TYPE__IELR
;
1102 else if (0 == strcmp (type
, "canonical-lr"))
1103 lr_type
= LR_TYPE__CANONICAL_LR
;
1109 /* Phase 0: LALR(1). */
1110 timevar_push (TV_LALR
);
1111 if (lr_type
== LR_TYPE__CANONICAL_LR
)
1115 if (lr_type
== LR_TYPE__LALR
)
1117 bitsetv_free (goto_follows
);
1118 timevar_pop (TV_LALR
);
1121 timevar_pop (TV_LALR
);
1124 bitsetv follow_kernel_items
;
1125 bitsetv always_follows
;
1126 InadequacyList
**inadequacy_lists
= NULL
;
1127 AnnotationList
**annotation_lists
= NULL
;
1128 struct obstack annotations_obstack
;
1129 AnnotationIndex max_annotations
= 0;
1132 /* Phase 1: Compute Auxiliary Tables. */
1133 state
***predecessors
;
1134 timevar_push (TV_IELR_PHASE1
);
1135 ielr_compute_auxiliary_tables (
1136 &follow_kernel_items
, &always_follows
,
1137 lr_type
== LR_TYPE__CANONICAL_LR
? NULL
: &predecessors
);
1138 timevar_pop (TV_IELR_PHASE1
);
1140 /* Phase 2: Compute Annotations. */
1141 timevar_push (TV_IELR_PHASE2
);
1142 if (lr_type
!= LR_TYPE__CANONICAL_LR
)
1144 obstack_init (&annotations_obstack
);
1145 ielr_compute_annotation_lists (follow_kernel_items
, always_follows
,
1146 predecessors
, &max_annotations
,
1147 &inadequacy_lists
, &annotation_lists
,
1148 &annotations_obstack
);
1151 for (i
= 0; i
< nstates
; ++i
)
1152 free (predecessors
[i
]);
1154 free (predecessors
);
1155 bitsetv_free (goto_follows
);
1158 timevar_pop (TV_IELR_PHASE2
);
1161 /* Phase 3: Split States. */
1162 timevar_push (TV_IELR_PHASE3
);
1164 state_number nstates_lr0
= nstates
;
1165 ielr_split_states (follow_kernel_items
, always_follows
,
1166 annotation_lists
, max_annotations
);
1167 if (inadequacy_lists
)
1170 for (i
= 0; i
< nstates_lr0
; ++i
)
1171 InadequacyList__delete (inadequacy_lists
[i
]);
1174 free (inadequacy_lists
);
1175 if (annotation_lists
)
1176 obstack_free (&annotations_obstack
, NULL
);
1177 free (annotation_lists
);
1178 bitsetv_free (follow_kernel_items
);
1179 bitsetv_free (always_follows
);
1180 timevar_pop (TV_IELR_PHASE3
);
1183 /* Phase 4: Compute Reduction Lookaheads. */
1184 timevar_push (TV_IELR_PHASE4
);
1188 if (lr_type
== LR_TYPE__CANONICAL_LR
)
1190 // Reduction lookaheads are computed in ielr_split_states above but are
1191 // timed as part of phase 4.
1197 bitsetv_free (goto_follows
);
1199 timevar_pop (TV_IELR_PHASE4
);