summaryrefslogtreecommitdiff
path: root/src/lalr.c
diff options
context:
space:
mode:
authorAkim Demaille <akim@epita.fr>2002-08-01 18:12:11 +0000
committerAkim Demaille <akim@epita.fr>2002-08-01 18:12:11 +0000
commit3325ddc49c7b31f2670d03d1e3b59c2636650af3 (patch)
tree6afa06c77fd2a3c1179272c42d3c31856db2c4c6 /src/lalr.c
parentc6f1a33c06db52ed122d0922885602cf37f99941 (diff)
downloadbison-3325ddc49c7b31f2670d03d1e3b59c2636650af3.tar.gz
* lib/timevar.c (get_time): Include children time.
* src/lalr.h (LA, LArule): Don't export them: used with the state_t. * src/lalr.c (LA, LArule): Static. * src/lalr.h, src/lalr.c (lalr_free): New. * src/main.c (main): Call it. * src/tables.c (pack_vector): Check whether loc is >= to the table_size, not >. (pack_tables): Don't free froms, tos, conflict_tos, and pos... (tables_generate): do it, since that's also it which allocates them. Don't free LA and LArule, main does.
Diffstat (limited to 'src/lalr.c')
-rw-r--r--src/lalr.c32
1 files changed, 30 insertions, 2 deletions
diff --git a/src/lalr.c b/src/lalr.c
index b87cebb5..275c6ab7 100644
--- a/src/lalr.c
+++ b/src/lalr.c
@@ -52,8 +52,22 @@ typedef struct goto_list_s
} goto_list_t;
-rule_t **LArule = NULL;
-bitsetv LA = NULL;
+/* LARULE is a vector which records the rules that need lookahead in
+ various states. The elements of LARULE that apply to state S are
+ those from LOOKAHEADS[S] through LOOKAHEADS[S+1]-1.
+
+ If LR is the length of LArule, then a number from 0 to LR-1 can
+ specify both a rule and a state where the rule might be applied.
+ */
+
+static rule_t **LArule = NULL;
+
+/* LA is a LR by NTOKENS matrix of bits. LA[l, i] is 1 if the rule
+ LArule[l] is applicable in the appropriate state when the next
+ token is symbol i. If LA[l, i] and LA[l, j] are both 1 for i != j,
+ it is a conflict. */
+
+static bitsetv LA = NULL;
size_t nLA;
@@ -460,3 +474,17 @@ lalr (void)
if (trace_flag & trace_sets)
lookaheads_print (stderr);
}
+
+
+void
+lalr_free (void)
+{
+ state_number_t s;
+ for (s = 0; s < nstates; ++s)
+ {
+ states[s]->lookaheads = NULL;
+ states[s]->lookaheads_rule = NULL;
+ }
+ bitsetv_free (LA);
+ free (LArule);
+}