1 # include <u.h> 2 # include <libc.h> 3 # include <ctype.h> 4 # include <bio.h> 5 # define PP 1 6 7 # define CWIDTH 8 8 # define CMASK 0377 9 # define NCH 256 10 11 12 # define TOKENSIZE 1000 13 # define DEFSIZE 40 14 # define DEFCHAR 1000 15 # define STARTCHAR 100 16 # define STARTSIZE 256 17 # define CCLSIZE 1000 18 19 # define TREESIZE 1000 20 # define NSTATES 500 21 # define MAXPOS 2500 22 # define NTRANS 2000 23 # define NOUTPUT 5000 24 25 # define NACTIONS 100 26 # define ALITTLEEXTRA 30 27 28 # define RCCL NCH+90 29 # define RNCCL NCH+91 30 # define RSTR NCH+92 31 # define RSCON NCH+93 32 # define RNEWE NCH+94 33 # define FINAL NCH+95 34 # define RNULLS NCH+96 35 # define RCAT NCH+97 36 # define STAR NCH+98 37 # define PLUS NCH+99 38 # define QUEST NCH+100 39 # define DIV NCH+101 40 # define BAR NCH+102 41 # define CARAT NCH+103 42 # define S1FINAL NCH+104 43 # define S2FINAL NCH+105 44 45 # define DEFSECTION 1 46 # define RULESECTION 2 47 # define ENDSECTION 5 48 # define TRUE 1 49 # define FALSE 0 50 51 # define PC 1 52 # define PS 1 53 54 # ifdef DEBUG 55 # define LINESIZE 110 56 extern int yydebug; 57 extern int debug; /* 1 = on */ 58 extern int charc; 59 # endif 60 61 # ifdef DEBUG 62 extern int freturn(int); 63 # else 64 # define freturn(s) s 65 # endif 66 67 extern int sargc; 68 extern char **sargv; 69 extern uchar buf[520]; 70 extern int yyline; /* line number of file */ 71 extern char *yyfile; /* file name of file */ 72 extern int sect; 73 extern int eof; 74 extern int lgatflg; 75 extern int divflg; 76 extern int funcflag; 77 extern int pflag; 78 extern int casecount; 79 extern int chset; /* 1 = char set modified */ 80 extern Biobuf *fin, fout, *fother; 81 extern int foutopen; 82 extern int errorf; 83 extern int fptr; 84 extern char *cname; 85 extern int prev; /* previous input character */ 86 extern int pres; /* present input character */ 87 extern int peek; /* next input character */ 88 extern int *name; 89 extern int *left; 90 extern int *right; 91 extern int *parent; 92 extern uchar **ptr; 93 extern uchar *nullstr; 94 extern int tptr; 95 extern uchar pushc[TOKENSIZE]; 96 extern uchar *pushptr; 97 extern uchar slist[STARTSIZE]; 98 extern uchar *slptr; 99 extern uchar **def, **subs, *dchar; 100 extern uchar **sname, *stchar; 101 extern uchar *ccl; 102 extern uchar *ccptr; 103 extern uchar *dp, *sp; 104 extern int dptr, sptr; 105 extern uchar *bptr; /* store input position */ 106 extern uchar *tmpstat; 107 extern int count; 108 extern int **foll; 109 extern int *nxtpos; 110 extern int *positions; 111 extern int *gotof; 112 extern int *nexts; 113 extern uchar *nchar; 114 extern int **state; 115 extern int *sfall; /* fallback state num */ 116 extern uchar *cpackflg; /* true if state has been character packed */ 117 extern int *atable, aptr; 118 extern int nptr; 119 extern uchar symbol[NCH]; 120 extern uchar cindex[NCH]; 121 extern int xstate; 122 extern int stnum; 123 extern int ccount; 124 extern uchar match[NCH]; 125 extern uchar extra[NACTIONS]; 126 extern uchar *pcptr, *pchar; 127 extern int pchlen; 128 extern int nstates, maxpos; 129 extern int yytop; 130 extern int report; 131 extern int ntrans, treesize, outsize; 132 extern long rcount; 133 extern int *verify, *advance, *stoff; 134 extern int scon; 135 extern uchar *psave; 136 137 extern void acompute(int); 138 extern void add(int **, int); 139 extern void allprint(int); 140 extern void cclinter(int); 141 extern void cgoto(void); 142 extern void cfoll(int); 143 extern int cpyact(void); 144 extern int dupl(int); 145 extern void error(char *,...); 146 extern void first(int); 147 extern void follow(int); 148 extern int gch(void); 149 extern uchar *getl(uchar *); 150 extern void layout(void); 151 extern void lgate(void); 152 extern int lookup(uchar *, uchar **); 153 extern int member(int, uchar *); 154 extern void mkmatch(void); 155 extern int mn0(int); 156 extern int mn1(int, int); 157 extern int mnp(int, void*); 158 extern int mn2(int, int, uintptr); 159 extern void munputc(int); 160 extern void munputs(uchar *); 161 extern void *myalloc(int, int); 162 extern void nextstate(int, int); 163 extern int notin(int); 164 extern void packtrans(int, uchar *, int *, int, int); 165 extern void padd(int **, int); 166 extern void pccl(void); 167 extern void pfoll(void); 168 extern void phead1(void); 169 extern void phead2(void); 170 extern void pstate(int); 171 extern void ptail(void); 172 extern void sect1dump(void); 173 extern void sect2dump(void); 174 extern void statistics(void); 175 extern void stprt(int); 176 extern void strpt(uchar *); 177 extern void treedump(void); 178 extern int usescape(int); 179 extern void warning(char *,...); 180 extern int yyparse(void); 181 extern void yyerror(char *); 182