xref: /plan9/sys/src/cmd/upas/bayes/dump.c (revision 4246b6162acdbb658503b8bdc98024362bfbf0fe)
1*4246b616SDavid du Colombier #include <u.h>
2*4246b616SDavid du Colombier #include <libc.h>
3*4246b616SDavid du Colombier #include <bio.h>
4*4246b616SDavid du Colombier #include <regexp.h>
5*4246b616SDavid du Colombier #include "/sys/src/libregexp/regcomp.h"
6*4246b616SDavid du Colombier #include "dfa.h"
7*4246b616SDavid du Colombier 
8*4246b616SDavid du Colombier #define DUMP
9*4246b616SDavid du Colombier 
10*4246b616SDavid du Colombier void
dump(Dreprog * pp)11*4246b616SDavid du Colombier dump(Dreprog *pp)
12*4246b616SDavid du Colombier {
13*4246b616SDavid du Colombier 	int i, j;
14*4246b616SDavid du Colombier 	Dreinst *l;
15*4246b616SDavid du Colombier 
16*4246b616SDavid du Colombier 	print("start %ld %ld %ld %ld\n",
17*4246b616SDavid du Colombier 		pp->start[0]-pp->inst,
18*4246b616SDavid du Colombier 		pp->start[1]-pp->inst,
19*4246b616SDavid du Colombier 		pp->start[2]-pp->inst,
20*4246b616SDavid du Colombier 		pp->start[3]-pp->inst);
21*4246b616SDavid du Colombier 
22*4246b616SDavid du Colombier 	for(i=0; i<pp->ninst; i++){
23*4246b616SDavid du Colombier 		l = &pp->inst[i];
24*4246b616SDavid du Colombier 		print("%d:", i);
25*4246b616SDavid du Colombier 		for(j=0; j<l->nc; j++){
26*4246b616SDavid du Colombier 			print(" [");
27*4246b616SDavid du Colombier 			if(j == 0)
28*4246b616SDavid du Colombier 				if(l->c[j].start > 1)
29*4246b616SDavid du Colombier 					print("<bad start %d>\n", l->c[j].start);
30*4246b616SDavid du Colombier 			if(j != 0)
31*4246b616SDavid du Colombier 				print("%C%s", l->c[j].start&0xFFFF, (l->c[j].start&0x10000) ? "$" : "");
32*4246b616SDavid du Colombier 			print("-");
33*4246b616SDavid du Colombier 			if(j != l->nc-1)
34*4246b616SDavid du Colombier 				print("%C%s", (l->c[j+1].start&0xFFFF)-1, (l->c[j+1].start&0x10000) ? "$" : "");
35*4246b616SDavid du Colombier 			print("] %ld", l->c[j].next - pp->inst);
36*4246b616SDavid du Colombier 		}
37*4246b616SDavid du Colombier 		if(l->isfinal)
38*4246b616SDavid du Colombier 			print(" final");
39*4246b616SDavid du Colombier 		if(l->isloop)
40*4246b616SDavid du Colombier 			print(" loop");
41*4246b616SDavid du Colombier 		print("\n");
42*4246b616SDavid du Colombier 	}
43*4246b616SDavid du Colombier }
44*4246b616SDavid du Colombier 
45*4246b616SDavid du Colombier 
46*4246b616SDavid du Colombier void
main(int argc,char ** argv)47*4246b616SDavid du Colombier main(int argc, char **argv)
48*4246b616SDavid du Colombier {
49*4246b616SDavid du Colombier 	int i;
50*4246b616SDavid du Colombier 	Reprog *p;
51*4246b616SDavid du Colombier 	Dreprog *dp;
52*4246b616SDavid du Colombier 
53*4246b616SDavid du Colombier 	i = 1;
54*4246b616SDavid du Colombier 		p = regcomp(argv[i]);
55*4246b616SDavid du Colombier 		if(p == 0){
56*4246b616SDavid du Colombier 			print("=== %s: bad regexp\n", argv[i]);
57*4246b616SDavid du Colombier 		}
58*4246b616SDavid du Colombier 	//	print("=== %s\n", argv[i]);
59*4246b616SDavid du Colombier 	//	rdump(p);
60*4246b616SDavid du Colombier 		dp = dregcvt(p);
61*4246b616SDavid du Colombier 		print("=== dfa\n");
62*4246b616SDavid du Colombier 		dump(dp);
63*4246b616SDavid du Colombier 
64*4246b616SDavid du Colombier 	for(i=2; i<argc; i++)
65*4246b616SDavid du Colombier 		print("match %d\n", dregexec(dp, argv[i], 1));
66*4246b616SDavid du Colombier 	exits(0);
67*4246b616SDavid du Colombier }
68