More anonymous unions.
This commit is contained in:
parent
35d95baea2
commit
285b4f85c0
4 changed files with 31 additions and 31 deletions
|
|
@ -96,7 +96,7 @@ loop:
|
||||||
|
|
||||||
case Tcase:
|
case Tcase:
|
||||||
if(c >= 0 && c < 256)
|
if(c >= 0 && c < 256)
|
||||||
if(r1 = r->cases[c])
|
if(r1 = r->u.cases[c])
|
||||||
follow[nfollow++] = r1;
|
follow[nfollow++] = r1;
|
||||||
if(r = r->next)
|
if(r = r->next)
|
||||||
goto loop;
|
goto loop;
|
||||||
|
|
@ -104,7 +104,7 @@ loop:
|
||||||
|
|
||||||
case Talt:
|
case Talt:
|
||||||
case Tor:
|
case Tor:
|
||||||
fol1(r->alt, c);
|
fol1(r->u.alt, c);
|
||||||
r = r->next;
|
r = r->next;
|
||||||
goto loop;
|
goto loop;
|
||||||
|
|
||||||
|
|
@ -119,7 +119,7 @@ loop:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Tclass:
|
case Tclass:
|
||||||
if(c >= r->lo && c <= r->hi)
|
if(c >= r->u.x.lo && c <= r->u.x.hi)
|
||||||
follow[nfollow++] = r->next;
|
follow[nfollow++] = r->next;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,9 +36,9 @@ struct Re
|
||||||
{
|
{
|
||||||
Rune lo;
|
Rune lo;
|
||||||
Rune hi;
|
Rune hi;
|
||||||
};
|
} x;
|
||||||
Rune val; /* char */
|
Rune val; /* char */
|
||||||
};
|
} u;
|
||||||
Re* next;
|
Re* next;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -66,14 +66,14 @@ expr3:
|
||||||
{
|
{
|
||||||
$$.beg = ral(Talt);
|
$$.beg = ral(Talt);
|
||||||
patchnext($1.end, $$.beg);
|
patchnext($1.end, $$.beg);
|
||||||
$$.beg->alt = $1.beg;
|
$$.beg->u.alt = $1.beg;
|
||||||
$$.end = $$.beg;
|
$$.end = $$.beg;
|
||||||
$$.beg = $1.beg;
|
$$.beg = $1.beg;
|
||||||
}
|
}
|
||||||
| expr3 LQUES
|
| expr3 LQUES
|
||||||
{
|
{
|
||||||
$$.beg = ral(Talt);
|
$$.beg = ral(Talt);
|
||||||
$$.beg->alt = $1.beg;
|
$$.beg->u.alt = $1.beg;
|
||||||
$$.end = $1.end;
|
$$.end = $1.end;
|
||||||
appendnext($$.end, $$.beg);
|
appendnext($$.end, $$.beg);
|
||||||
}
|
}
|
||||||
|
|
@ -82,8 +82,8 @@ expr4:
|
||||||
LCHAR
|
LCHAR
|
||||||
{
|
{
|
||||||
$$.beg = ral(Tclass);
|
$$.beg = ral(Tclass);
|
||||||
$$.beg->lo = $1;
|
$$.beg->u.x.lo = $1;
|
||||||
$$.beg->hi = $1;
|
$$.beg->u.x.hi = $1;
|
||||||
$$.end = $$.beg;
|
$$.end = $$.beg;
|
||||||
}
|
}
|
||||||
| LBEGIN
|
| LBEGIN
|
||||||
|
|
|
||||||
|
|
@ -63,11 +63,11 @@ countor(Re *r)
|
||||||
loop:
|
loop:
|
||||||
switch(r->type) {
|
switch(r->type) {
|
||||||
case Tor:
|
case Tor:
|
||||||
n += countor(r->alt);
|
n += countor(r->u.alt);
|
||||||
r = r->next;
|
r = r->next;
|
||||||
goto loop;
|
goto loop;
|
||||||
case Tclass:
|
case Tclass:
|
||||||
return n + r->hi - r->lo + 1;
|
return n + r->u.x.hi - r->u.x.lo + 1;
|
||||||
}
|
}
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
@ -80,7 +80,7 @@ oralloc(int t, Re *r, Re *b)
|
||||||
if(b == 0)
|
if(b == 0)
|
||||||
return r;
|
return r;
|
||||||
a = ral(t);
|
a = ral(t);
|
||||||
a->alt = r;
|
a->u.alt = r;
|
||||||
a->next = b;
|
a->next = b;
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
@ -93,13 +93,13 @@ case1(Re *c, Re *r)
|
||||||
loop:
|
loop:
|
||||||
switch(r->type) {
|
switch(r->type) {
|
||||||
case Tor:
|
case Tor:
|
||||||
case1(c, r->alt);
|
case1(c, r->u.alt);
|
||||||
r = r->next;
|
r = r->next;
|
||||||
goto loop;
|
goto loop;
|
||||||
|
|
||||||
case Tclass: /* add to character */
|
case Tclass: /* add to character */
|
||||||
for(n=r->lo; n<=r->hi; n++)
|
for(n=r->u.x.lo; n<=r->u.x.hi; n++)
|
||||||
c->cases[n] = oralloc(Tor, r->next, c->cases[n]);
|
c->u.cases[n] = oralloc(Tor, r->next, c->u.cases[n]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default: /* add everything unknown to next */
|
default: /* add everything unknown to next */
|
||||||
|
|
@ -125,13 +125,13 @@ addcase(Re *r)
|
||||||
n = countor(r);
|
n = countor(r);
|
||||||
if(n >= Caselim) {
|
if(n >= Caselim) {
|
||||||
a = ral(Tcase);
|
a = ral(Tcase);
|
||||||
a->cases = mal(256*sizeof(*a->cases));
|
a->u.cases = mal(256*sizeof(*a->u.cases));
|
||||||
case1(a, r);
|
case1(a, r);
|
||||||
for(i=0; i<256; i++)
|
for(i=0; i<256; i++)
|
||||||
if(a->cases[i]) {
|
if(a->u.cases[i]) {
|
||||||
r = a->cases[i];
|
r = a->u.cases[i];
|
||||||
if(countor(r) < n)
|
if(countor(r) < n)
|
||||||
a->cases[i] = addcase(r);
|
a->u.cases[i] = addcase(r);
|
||||||
}
|
}
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
@ -139,7 +139,7 @@ addcase(Re *r)
|
||||||
|
|
||||||
case Talt:
|
case Talt:
|
||||||
r->next = addcase(r->next);
|
r->next = addcase(r->next);
|
||||||
r->alt = addcase(r->alt);
|
r->u.alt = addcase(r->u.alt);
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
case Tbegin:
|
case Tbegin:
|
||||||
|
|
@ -223,7 +223,7 @@ re2star(Re2 a)
|
||||||
Re2 c;
|
Re2 c;
|
||||||
|
|
||||||
c.beg = ral(Talt);
|
c.beg = ral(Talt);
|
||||||
c.beg->alt = a.beg;
|
c.beg->u.alt = a.beg;
|
||||||
patchnext(a.end, c.beg);
|
patchnext(a.end, c.beg);
|
||||||
c.end = c.beg;
|
c.end = c.beg;
|
||||||
return c;
|
return c;
|
||||||
|
|
@ -235,7 +235,7 @@ re2or(Re2 a, Re2 b)
|
||||||
Re2 c;
|
Re2 c;
|
||||||
|
|
||||||
c.beg = ral(Tor);
|
c.beg = ral(Tor);
|
||||||
c.beg->alt = b.beg;
|
c.beg->u.alt = b.beg;
|
||||||
c.beg->next = a.beg;
|
c.beg->next = a.beg;
|
||||||
c.end = b.end;
|
c.end = b.end;
|
||||||
appendnext(c.end, a.end);
|
appendnext(c.end, a.end);
|
||||||
|
|
@ -248,8 +248,8 @@ re2char(int c0, int c1)
|
||||||
Re2 c;
|
Re2 c;
|
||||||
|
|
||||||
c.beg = ral(Tclass);
|
c.beg = ral(Tclass);
|
||||||
c.beg->lo = c0 & 0xff;
|
c.beg->u.x.lo = c0 & 0xff;
|
||||||
c.beg->hi = c1 & 0xff;
|
c.beg->u.x.hi = c1 & 0xff;
|
||||||
c.end = c.beg;
|
c.end = c.beg;
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
@ -274,15 +274,15 @@ loop:
|
||||||
case Tcase:
|
case Tcase:
|
||||||
print("case ->%p\n", a->next);
|
print("case ->%p\n", a->next);
|
||||||
for(i=0; i<256; i++)
|
for(i=0; i<256; i++)
|
||||||
if(a->cases[i]) {
|
if(a->u.cases[i]) {
|
||||||
for(j=i+1; j<256; j++)
|
for(j=i+1; j<256; j++)
|
||||||
if(a->cases[i] != a->cases[j])
|
if(a->u.cases[i] != a->u.cases[j])
|
||||||
break;
|
break;
|
||||||
print(" [%.2x-%.2x] ->%p\n", i, j-1, a->cases[i]);
|
print(" [%.2x-%.2x] ->%p\n", i, j-1, a->u.cases[i]);
|
||||||
i = j-1;
|
i = j-1;
|
||||||
}
|
}
|
||||||
for(i=0; i<256; i++)
|
for(i=0; i<256; i++)
|
||||||
reprint1(a->cases[i]);
|
reprint1(a->u.cases[i]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Tbegin:
|
case Tbegin:
|
||||||
|
|
@ -294,13 +294,13 @@ loop:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Tclass:
|
case Tclass:
|
||||||
print("[%.2x-%.2x] ->%p\n", a->lo, a->hi, a->next);
|
print("[%.2x-%.2x] ->%p\n", a->u.x.lo, a->u.x.hi, a->next);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Tor:
|
case Tor:
|
||||||
case Talt:
|
case Talt:
|
||||||
print("| %p ->%p\n", a->alt, a->next);
|
print("| %p ->%p\n", a->u.alt, a->next);
|
||||||
reprint1(a->alt);
|
reprint1(a->u.alt);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
a = a->next;
|
a = a->next;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue