LINT = lint
BINDIR = $(EMHOME)/lib
LIBOPT = libemopt.a
+LIBCEOPT = libemoptCE.a
# set HOWMUCH to head -20 to limit number of patterns used
#HOWMUCH = head -20
.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 $@
CSRC = main.c nopt.c mkstrct.c aux.c outputdfa.c outcalls.c\
ar rc $(LIBOPT) O_*.o $(NOFILES) mkstrct.o
-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
-/lib/cpp patterns | $(HOWMUCH) >/tmp/patts
parser </tmp/patts
/* and a goto to state 0.
/* c) pattern of form: ri ri+1 ... rn pc ... pd
/* 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 diff = patt.m_len - repl.m_len;
- int first,i;
+ int first,i,j;
int s;
int mostbackups = 0;
if(n==0) {
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);
}