⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dextern.h

📁 整理 unix v7 的 ya
💻 H
字号:
#include <stdio.h>#include <ctype.h>#include <stdarg.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include "files.h"/* * MANIFEST CONSTANT DEFINITIONS *//* * base of nonterminal internal numbers */#define NTBASE 010000/* * internal codes for error and accept actions */#define ERRCODE  8190#define ACCEPTCODE 8191/* * sizes and limits */#ifdef HUGE#define ACTSIZE 12000#define MEMSIZE 12000#define NSTATES 750#define NTERMS 127#define NPROD 600#define NNONTERM 300#define TEMPSIZE 1200#define CNAMSZ 5000#define LSETSIZE 600#define WSETSIZE 350#endif#ifdef MEDIUM#define ACTSIZE 4000#define MEMSIZE 5200#define NSTATES 600#define NTERMS 127#define NPROD 400#define NNONTERM 200#define TEMPSIZE 800#define CNAMSZ 4000#define LSETSIZE 450#define WSETSIZE 250#endif#define NAMESIZE 50#define NTYPES 63#ifdef WORD32#define TBITSET ((32+NTERMS)/32)/* * bit packing macros (may be machine dependent) */#define BIT(a,i) ((a)[(i)>>5] & (1<<((i)&037)))#define SETBIT(a,i) ((a)[(i)>>5] |= (1<<((i)&037)))/* * number of words needed to hold n+1 bits */#define NWORDS(n) (((n)+32)/32)#else#define TBITSET ((16+NTERMS)/16)/* * bit packing macros (may be machine dependent) */#define BIT(a,i) ((a)[(i)>>4] & (1<<((i)&017)))#define SETBIT(a,i) ((a)[(i)>>4] |= (1<<((i)&017)))/* * number of words needed to hold n+1 bits */#define NWORDS(n) (((n)+16)/16)#endif/* * relationships which must hold: * TBITSET ints must hold NTERMS+1 bits... * WSETSIZE >= NNONTERM * LSETSIZE >= NNONTERM * TEMPSIZE >= NTERMS + NNONTERMs + 1 * TEMPSIZE >= NSTATES *//* * associativities */#define NOASC 0  /* no assoc. */#define LASC 1  /* left assoc. */#define RASC 2  /* right assoc. */#define BASC 3  /* binary assoc. *//* * flags for state generation */#define DONE 0#define MUSTDO 1#define MUSTLOOKAHEAD 2/* * flags for a rule having an action, and being reduced */#define ACTFLAG 04#define REDFLAG 010/* * output parser flags */#define YYFLAG1 (-1000)/* * macros for getting associativity and precedence levels */#define ASSOC(i) ((i)&03)#define PLEVEL(i) (((i)>>4)&077)#define TYPE(i)  ((i>>10)&077)/* * macros for setting associativity and precedence levels */#define SETASC(i,j) i|=j#define SETPLEV(i,j) i |= (j<<4)#define SETTYPE(i,j) i |= (j<<10)/* * looping macros */#define TLOOP(i) for(i=1;i<=ntokens;++i)#define NTLOOP(i) for(i=0;i<=nnonter;++i)#define PLOOP(s,i) for(i=s;i<nprod;++i)#define SLOOP(i) for(i=0;i<nstate;++i)#define WSBUMP(x) ++x#define WSLOOP(s,j) for(j=s;j<cwp;++j)#define ITMLOOP(i,p,q) q=pstate[i+1];for(p=pstate[i];p<q;++p)#define SETLOOP(i) for(i=0;i<tbitset;++i)/* * I/O descriptors */extern FILE * finput;		/* input file */extern FILE * faction;		/* file for saving actions */extern FILE *fdefine;		/* file for #defines */extern FILE * ftable;		/* y.tab.c file */extern FILE * ftemp;		/* tempfile to pass 2 */extern FILE * foutput;		/* y.output file *//* * structure declarations */struct looksets {	int lset[TBITSET];};struct item {	int *pitem;	struct looksets *look;};struct toksymb {	char *name;	int value;};struct ntsymb {	char *name;	int tvalue;};struct wset {	int *pitem;	int flag;	struct looksets ws;};/* * token information */extern int ntokens ;	/* number of tokens */extern struct toksymb tokset[];extern int toklev[];	/* vector with the precedence of the terminals *//* * nonterminal information */extern int nnonter ;	/* the number of nonterminals */extern struct ntsymb nontrst[];/* * grammar rule information */extern int nprod ;	/* number of productions */extern int *prdptr[];	/* pointers to descriptions of productions */extern int levprd[] ;	/* contains production levels to break conflicts *//* * state information */extern int nstate ;		/* number of states */extern struct item *pstate[];	/* pointers to the descriptions of the states */extern int tystate[];	/* contains type information about the states */extern int defact[];	/* the default action of the state */extern int tstates[];	/* the states deriving each token */extern int ntstates[];	/* the states deriving each nonterminal */extern int mstates[];	/* the continuation of the chains begun in tstates and ntstates *//* * lookahead set information */extern struct looksets lkst[];extern int nolook;  /* flag to turn off lookahead computations *//* * working set information */extern struct wset wsets[];extern struct wset *cwp;/* * storage for productions */extern int mem0[];extern int *mem;/* * storage for action table */extern int amem[];  /* action table storage */extern int *memp ;		/* next free action table position */extern int indgo[];		/* index to the stored goto table *//* * temporary vector, indexable by states, terms, or ntokens */extern int temp1[];extern int lineno; /* current line number *//* * statistics collection variables */extern int zzgoent ;extern int zzgobest ;extern int zzacent ;extern int zzexcp ;extern int zzclose ;extern int zzrrconf ;extern int zzsrconf ;/* * define functions with strange types... */extern char *cstash();extern struct looksets *flset();extern char *symnam();extern char *writem();/* * default settings for a number of macros  * * name of yacc tempfiles */#ifndef TEMPNAME#define TEMPNAME "/tmp/yacc.tmp"#endif#ifndef ACTNAME#define ACTNAME "/tmp/yacc.acts"#endif/* * output file name */#ifndef OFILE#define OFILE "y.tab.c"#endif/* * user output file name */#ifndef FILEU#define FILEU "y.output"#endif/* * output file for #defines */#ifndef FILED#define FILED "y.tab.h"#endif/* * command to clobber tempfiles after use */#ifndef ZAPFILE#define ZAPFILE(x) unlink(x)#endif/* y1.c */extern void error(char *s, ...);extern void aryfil(int *v, int n, int c);extern int  state(int c);extern void putitem(int *ptr, struct looksets *lptr);extern void closure(int i);/* y2.c */extern void setup(int argc,char *argv[]);extern int  yyparse(void);/* y3.c */extern void output(void);extern int  apack(int *p, int n);extern void go2out(void);extern void warray(char *s, int *v, int n);extern void hideprod(void);/* y4.c */extern void callopt(void);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -