From 154592f9db7af78cfa31ad6d64134ca89eed13b0 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 18 Sep 2020 13:04:27 +0300 Subject: Update support files from GNULIB. --- support/dfa.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'support/dfa.c') diff --git a/support/dfa.c b/support/dfa.c index 8a012ad6..641f422a 100644 --- a/support/dfa.c +++ b/support/dfa.c @@ -2504,11 +2504,6 @@ reorder_tokens (struct dfa *d) ? xnmalloc (d->nleaves, sizeof *multibyte_prop) : NULL); - for (idx_t i = 0; i < d->tindex; i++) - for (idx_t j = 0; j < d->follows[i].nelem; j++) - if (map[d->follows[i].elems[j].index] < 0) - map[d->follows[i].elems[j].index] = nleaves++; - for (idx_t i = 0; i < d->tindex; i++) { if (map[i] < 0) @@ -2527,7 +2522,12 @@ reorder_tokens (struct dfa *d) multibyte_prop[map[i]] = d->multibyte_prop[i]; for (idx_t j = 0; j < d->follows[i].nelem; j++) - d->follows[i].elems[j].index = map[d->follows[i].elems[j].index]; + { + if (map[d->follows[i].elems[j].index] == -1) + map[d->follows[i].elems[j].index] = nleaves++; + + d->follows[i].elems[j].index = map[d->follows[i].elems[j].index]; + } qsort (d->follows[i].elems, d->follows[i].nelem, sizeof *d->follows[i].elems, compare); @@ -2700,6 +2700,17 @@ dfaanalyze (struct dfa *d, bool searchflag) case STAR: case PLUS: + /* Every element in the lastpos of the argument is in the backward + set of every element in the firstpos. */ + if (d->epsilon) + { + tmp.elems = lastpos - stk[-1].nlastpos; + tmp.nelem = stk[-1].nlastpos; + for (position *p = firstpos - stk[-1].nfirstpos; + p < firstpos; p++) + merge2 (&backward[p->index], &tmp, &merged); + } + /* Every element in the firstpos of the argument is in the follow of every element in the lastpos. */ { -- cgit v1.2.3