int optexact=0; /* Inside "with exact" rule */
int optstack=0; /* Inside with <blah> STACK rule */
int saferulefound=0;
-int maxempatlen=0;
int maxrule=0;
int in_em_repl=0; /* set when in EM replacement part */
struct varinfo *defcost;
: WITH optexact
{ startline = lineno; }
setlist optstack
+ { if (tokpatlen > maxtokpatlen) maxtokpatlen = tokpatlen; }
;
optexact
: /* empty */
yields
: /* empty */
{ $$ = 0; }
- | YIELDS yieldlist
- { $$ = $2; }
+ | YIELDS { tokrepllen = 0; } yieldlist
+ { $$ = $3; if (tokrepllen > maxtokrepllen) maxtokrepllen = tokrepllen; }
;
yieldlist
: /* empty */
NEW($$,struct varinfo);
$$->vi_next = $2;
$$->vi_int[0] = $1.in_index;
+ tokrepllen++;
}
;
leaving
: /* empty */
{ $$ = 0; }
- | LEAVING {emhere=1; in_em_repl=1; } leavelist
- { emhere=0; in_em_repl=0; $$ = $3; }
+ | LEAVING {emhere=1; in_em_repl=1; emrepllen = 0; } leavelist
+ { emhere=0; in_em_repl=0; $$ = $3;
+ if (emrepllen > maxemrepllen) maxemrepllen = emrepllen;
+ }
;
leavelist
: leavelist_el
$$->vi_next=0;
$$->vi_int[0] = $1;
$$->vi_int[1] = $2;
+ emrepllen++;
}
;
extern int nsets;
extern int ninstr;
extern int empatlen;
+extern int emrepllen;
+extern int tokrepllen;
extern int emmnem[];
extern int empatexpr;
extern int codeindex;
extern int tokpatlen;
+extern int maxtokpatlen;
+extern int maxempatlen;
+extern int maxemrepllen;
+extern int maxtokrepllen;
extern int tokpatro[];
extern int tokpatset[];
extern int nallreg;
cdef("TOKENSIZE",maxtokensize);
cdef("MAXMEMBERS",maxmembers);
cdef("LONGESTPATTERN",maxempatlen);
+ cdef("MAXPATLEN",maxtokpatlen);
+ cdef("MAXREPLLEN",maxtokrepllen);
+ cdef("MAXEMREPLLEN",maxemrepllen);
cdef("MAXRULE",maxrule<16 ? 16 : maxrule);
if (nsplit>0) {
cdef("MAXSPLIT",maxsplit);
int nsets;
int ninstr;
int codeindex;
-int empatlen,emmnem[EMPATMAX];
+int empatlen,emrepllen,emmnem[EMPATMAX];
+int maxempatlen, maxemrepllen;
int empatexpr;
-int tokpatlen,tokpatset[TOKPATMAX],tokpatro[TOKPATMAX];
+int tokpatlen,tokrepllen,tokpatset[TOKPATMAX],tokpatro[TOKPATMAX];
+int maxtokpatlen, maxtokrepllen;
int nallreg,allreg[MAXALLREG];
int cursetno = -1;
int allsetno;