file reorg, pathnames.h paths.h
[unix-history] / usr / src / old / lex / lmain.c
CommitLineData
a5423a97 1#ifndef lint
35b3a500 2static char sccsid[] = "@(#)lmain.c 4.3 (Berkeley) %G%";
a5423a97
SL
3#endif
4
5# include "ldefs.c"
6# include "once.c"
7
8 /* lex [-[drcyvntf]] [file] ... [file] */
9
10 /* Copyright 1976, Bell Telephone Laboratories, Inc.,
11 written by Eric Schmidt, August 27, 1976 */
12
13main(argc,argv)
14 int argc;
15 char **argv; {
16 register int i;
17# ifdef DEBUG
18#include <signal.h>
19 signal(SIGBUS,buserr);
20 signal(SIGSEGV,segviol);
21# endif
22 while (argc > 1 && argv[1][0] == '-' ){
23 i = 0;
24 while(argv[1][++i]){
25 switch (argv[1][i]){
26# ifdef DEBUG
27 case 'd': debug++; break;
28 case 'y': yydebug = TRUE; break;
29# endif
30 case 'r': case 'R':
31 ratfor=TRUE; break;
32 case 'c': case 'C':
33 ratfor=FALSE; break;
34 case 't': case 'T':
35 fout = stdout;
36 errorf = stderr;
37 break;
38 case 'v': case 'V':
39 report = 1;
40 break;
41 case 'f': case 'F':
42 optim = FALSE;
43 break;
44 case 'n': case 'N':
45 report = 0;
46 break;
47 default:
48 warning("Unknown option %c",argv[1][i]);
49 }
50 }
51 argc--;
52 argv++;
53 }
54 sargc = argc;
55 sargv = argv;
56 if (argc > 1){
57 fin = fopen(argv[++fptr], "r"); /* open argv[1] */
58 sargc--;
a5423a97
SL
59 }
60 else fin = stdin;
61 if(fin == NULL)
62 error ("Can't read input file %s",argc>1?argv[1]:"standard input");
63 gch();
64 /* may be gotten: def, subs, sname, schar, ccl, dchar */
65 get1core();
66 /* may be gotten: name, left, right, nullstr, parent */
67 scopy("INITIAL",sp);
68 sname[0] = sp;
69 sp += slength("INITIAL") + 1;
70 sname[1] = 0;
71 if(yyparse(0)) exit(1); /* error return code */
72 /* may be disposed of: def, subs, dchar */
73 free1core();
74 /* may be gotten: tmpstat, foll, positions, gotof, nexts, nchar, state, atable, sfall, cpackflg */
75 get2core();
76 ptail();
77 mkmatch();
78# ifdef DEBUG
79 if(debug) pccl();
80# endif
81 sect = ENDSECTION;
82 if(tptr>0)cfoll(tptr-1);
83# ifdef DEBUG
84 if(debug)pfoll();
85# endif
86 cgoto();
87# ifdef DEBUG
88 if(debug){
89 printf("Print %d states:\n",stnum+1);
90 for(i=0;i<=stnum;i++)stprt(i);
91 }
92# endif
93 /* may be disposed of: positions, tmpstat, foll, state, name, left, right, parent, ccl, schar, sname */
94 /* may be gotten: verify, advance, stoff */
95 free2core();
96 get3core();
97 layout();
98 /* may be disposed of: verify, advance, stoff, nexts, nchar,
99 gotof, atable, ccpackflg, sfall */
100# ifdef DEBUG
101 free3core();
102# endif
103 if (ZCH>NCH) cname="/usr/lib/lex/ebcform";
104 fother = fopen(ratfor?ratname:cname,"r");
105 if(fother == NULL)
106 error("Lex driver missing, file %s",ratfor?ratname:cname);
107 while ( (i=getc(fother)) != EOF)
108 putc(i,fout);
109
110 fclose(fother);
111 fclose(fout);
112 if(
113# ifdef DEBUG
114 debug ||
115# endif
116 report == 1)statistics();
117 fclose(stdout);
118 fclose(stderr);
119 exit(0); /* success return code */
120 }
121get1core(){
122 register int i, val;
123 register char *p;
124ccptr = ccl = myalloc(CCLSIZE,sizeof(*ccl));
125pcptr = pchar = myalloc(pchlen, sizeof(*pchar));
3d47cc8b
RC
126 def = (char **) myalloc(DEFSIZE,sizeof(*def));
127 subs = (char **) myalloc(DEFSIZE,sizeof(*subs));
a5423a97 128dp = dchar = myalloc(DEFCHAR,sizeof(*dchar));
3d47cc8b 129 sname = (char **) myalloc(STARTSIZE,sizeof(*sname));
a5423a97
SL
130sp = schar = myalloc(STARTCHAR,sizeof(*schar));
131 if(ccl == 0 || def == 0 || subs == 0 || dchar == 0 || sname == 0 || schar == 0)
132 error("Too little core to begin");
133 }
134free1core(){
135 cfree(def,DEFSIZE,sizeof(*def));
136 cfree(subs,DEFSIZE,sizeof(*subs));
137 cfree(dchar,DEFCHAR,sizeof(*dchar));
138 }
139get2core(){
140 register int i, val;
141 register char *p;
3d47cc8b
RC
142 gotof = (int *) myalloc(nstates,sizeof(*gotof));
143 nexts = (int *) myalloc(ntrans,sizeof(*nexts));
a5423a97 144 nchar = myalloc(ntrans,sizeof(*nchar));
3d47cc8b
RC
145 state = (int **) myalloc(nstates,sizeof(*state));
146 atable = (int *) myalloc(nstates,sizeof(*atable));
147 sfall = (int *) myalloc(nstates,sizeof(*sfall));
a5423a97
SL
148 cpackflg = myalloc(nstates,sizeof(*cpackflg));
149 tmpstat = myalloc(tptr+1,sizeof(*tmpstat));
3d47cc8b
RC
150 foll = (int **) myalloc(tptr+1,sizeof(*foll));
151nxtpos = positions = (int *) myalloc(maxpos,sizeof(*positions));
a5423a97
SL
152 if(tmpstat == 0 || foll == 0 || positions == 0 ||
153 gotof == 0 || nexts == 0 || nchar == 0 || state == 0 || atable == 0 || sfall == 0 || cpackflg == 0 )
154 error("Too little core for state generation");
155 for(i=0;i<=tptr;i++)foll[i] = 0;
156 }
157free2core(){
158 cfree(positions,maxpos,sizeof(*positions));
159 cfree(tmpstat,tptr+1,sizeof(*tmpstat));
160 cfree(foll,tptr+1,sizeof(*foll));
161 cfree(name,treesize,sizeof(*name));
162 cfree(left,treesize,sizeof(*left));
163 cfree(right,treesize,sizeof(*right));
164 cfree(parent,treesize,sizeof(*parent));
165 cfree(nullstr,treesize,sizeof(*nullstr));
166 cfree(state,nstates,sizeof(*state));
167 cfree(sname,STARTSIZE,sizeof(*sname));
168 cfree(schar,STARTCHAR,sizeof(*schar));
169 cfree(ccl,CCLSIZE,sizeof(*ccl));
170 }
171get3core(){
172 register int i, val;
173 register char *p;
3d47cc8b
RC
174 verify = (int *) myalloc(outsize,sizeof(*verify));
175 advance = (int *) myalloc(outsize,sizeof(*advance));
176 stoff = (int *) myalloc(stnum+2,sizeof(*stoff));
a5423a97
SL
177 if(verify == 0 || advance == 0 || stoff == 0)
178 error("Too little core for final packing");
179 }
180# ifdef DEBUG
181free3core(){
182 cfree(advance,outsize,sizeof(*advance));
183 cfree(verify,outsize,sizeof(*verify));
184 cfree(stoff,stnum+1,sizeof(*stoff));
185 cfree(gotof,nstates,sizeof(*gotof));
186 cfree(nexts,ntrans,sizeof(*nexts));
187 cfree(nchar,ntrans,sizeof(*nchar));
188 cfree(atable,nstates,sizeof(*atable));
189 cfree(sfall,nstates,sizeof(*sfall));
190 cfree(cpackflg,nstates,sizeof(*cpackflg));
191 }
192# endif
193char *myalloc(a,b)
194 int a,b; {
3d47cc8b 195 register char *i;
a5423a97
SL
196 i = calloc(a, b);
197 if(i==0)
198 warning("OOPS - calloc returns a 0");
3d47cc8b 199 else if(i == (char *)-1){
a5423a97
SL
200# ifdef DEBUG
201 warning("calloc returns a -1");
202# endif
203 return(0);
204 }
205 return(i);
206 }
207# ifdef DEBUG
208buserr(){
209 fflush(errorf);
210 fflush(fout);
211 fflush(stdout);
212 fprintf(errorf,"Bus error\n");
213 if(report == 1)statistics();
214 fflush(errorf);
215 }
216segviol(){
217 fflush(errorf);
218 fflush(fout);
219 fflush(stdout);
220 fprintf(errorf,"Segmentation violation\n");
221 if(report == 1)statistics();
222 fflush(errorf);
223 }
224# endif
225
226yyerror(s)
227char *s;
228{
5092bf15
S
229 fprintf(stderr, "\"%s\", line %d: %s\n",
230 fptr > 0 ? sargv[fptr] : "<stdin>", yyline, s);
a5423a97 231}