fixes from bruce: there are four, not three types of pattern that the
routine findworst should look for
This commit is contained in:
parent
751854f36a
commit
391d115b4d
|
@ -5,6 +5,7 @@ COMPARE = $(EMHOME)/modules/compare
|
||||||
LINT = lint
|
LINT = lint
|
||||||
BINDIR = $(EMHOME)/lib
|
BINDIR = $(EMHOME)/lib
|
||||||
LIBOPT = libemopt.a
|
LIBOPT = libemopt.a
|
||||||
|
LIBCEOPT = libemoptCE.a
|
||||||
|
|
||||||
# set HOWMUCH to head -20 to limit number of patterns used
|
# set HOWMUCH to head -20 to limit number of patterns used
|
||||||
#HOWMUCH = head -20
|
#HOWMUCH = head -20
|
||||||
|
@ -26,7 +27,7 @@ CMD = '$(CC) -c $(CFLAGS)'
|
||||||
|
|
||||||
.SUFFIXES: .d .r
|
.SUFFIXES: .d .r
|
||||||
|
|
||||||
.r.d: ; CMD=$(CMD); export CMD; awk -f makefuns.awk $*.r | sh
|
.r.d: ; CMD=$(CMD); export CMD; awk -f makefuns.awk $*.r | sh -x
|
||||||
touch $@
|
touch $@
|
||||||
|
|
||||||
CSRC = main.c nopt.c mkstrct.c aux.c outputdfa.c outcalls.c\
|
CSRC = main.c nopt.c mkstrct.c aux.c outputdfa.c outcalls.c\
|
||||||
|
@ -100,6 +101,12 @@ $(LIBOPT): dfadummy $(NOFILES) mkstrct.o pseudo.d incalls.d
|
||||||
ar rc $(LIBOPT) O_*.o $(NOFILES) mkstrct.o
|
ar rc $(LIBOPT) O_*.o $(NOFILES) mkstrct.o
|
||||||
-sh -c 'ranlib $(LIBOPT)'
|
-sh -c 'ranlib $(LIBOPT)'
|
||||||
|
|
||||||
|
libCEopt.a:
|
||||||
|
make clean
|
||||||
|
make PREFLAGS='$(INCLDIR) -DPRIVATE=static -DCODE_EXPANDER' $(LIBOPT)
|
||||||
|
mv $(LIBOPT) libCEopt.a
|
||||||
|
make clean
|
||||||
|
|
||||||
dfadummy: patterns parser
|
dfadummy: patterns parser
|
||||||
-/lib/cpp patterns | $(HOWMUCH) >/tmp/patts
|
-/lib/cpp patterns | $(HOWMUCH) >/tmp/patts
|
||||||
parser </tmp/patts
|
parser </tmp/patts
|
||||||
|
|
|
@ -23,11 +23,14 @@ findworst(patt,repl)
|
||||||
/* and a goto to state 0.
|
/* and a goto to state 0.
|
||||||
/* c) pattern of form: ri ri+1 ... rn pc ... pd
|
/* c) pattern of form: ri ri+1 ... rn pc ... pd
|
||||||
/* i.e. a suffix of <repl> starts a pattern.
|
/* i.e. a suffix of <repl> starts a pattern.
|
||||||
/* requires a backup of n-i+1 instructions and a goto to state 0.
|
/* requires a backup of j-i+1 instructions and a goto to state 0.
|
||||||
|
/* d) pattern of the form: ri ri+1 ... rj
|
||||||
|
/* i.e. a substring of <repl> is a complete pattern
|
||||||
|
/* requires a backup of j-i+1 instructions and a goto to state 0.
|
||||||
*/
|
*/
|
||||||
int n = repl.m_len;
|
int n = repl.m_len;
|
||||||
int diff = patt.m_len - repl.m_len;
|
int diff = patt.m_len - repl.m_len;
|
||||||
int first,i;
|
int first,i,j;
|
||||||
int s;
|
int s;
|
||||||
int mostbackups = 0;
|
int mostbackups = 0;
|
||||||
if(n==0) {
|
if(n==0) {
|
||||||
|
@ -56,6 +59,16 @@ findworst(patt,repl)
|
||||||
UPDATEWORST(n-i+1);
|
UPDATEWORST(n-i+1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* look for case d */
|
||||||
|
for(i=2;i<=n;i++) {
|
||||||
|
for(j=n-1;j>i;j--) {
|
||||||
|
if((first=leftmatch(patterns[s],repl,i,j)) &&
|
||||||
|
(first==1)&&
|
||||||
|
(j-i+1 == patterns[s].m_len)) {
|
||||||
|
UPDATEWORST(n-i+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fprintf(ofile,"\t\tOO_mkrepl(%d,%d,%d);\n",n,diff,mostbackups);
|
fprintf(ofile,"\t\tOO_mkrepl(%d,%d,%d);\n",n,diff,mostbackups);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue