decl.h

This source file is part of the SubC compiler, which is described in the book

Practical Compiler Construction.

You might prefer to download the compiler source code. It is in the public domain.

Function Prototypes

This header contains function prototypes for all functions of the compiler that are used outside of the modules in which they are defined.

/*
 *	NMH's Simple C Compiler, 2011,2012
 *	Function declarations
 */

int	addglob(char *name, int prim, int ttype, int scls, int size, int val,
		char *mval, int init);
int	addloc(char *name, int prim, int type, int scls, int size, int val,
		int init);
void	cerror(char *s, int c);
int	chrpos(char *s, int c);
void	clear(void);
void	clrlocs(void);
void	colon(void);
void	compound(int lbr);
int	constexpr(void);
void	copyname(char *name, char *s);
int	declarator(int arg, int scls, char *name, int *pprim, int *psize,
		int *pval, int *pinit);
void	dumpsyms(char *title, char *sub, int from, int to);
int	eofcheck(void);
void	error(char *s, char *a);
int	expr(int *lv);
void	fatal(char *s);
int	findglob(char *s);
int	findloc(char *s);
int	findmac(char *s);
int	frozen(int depth);
void	gen(char *s);
int	genadd(int p1, int p2);
void	genaddr(int y);
void	genand(void);
void	genargc(void);
void	genasop(int op, int p1, int p2);
int	genbinop(int op, int p1, int p2);
void	genbool(void);
void	genbrfalse(int dest);
void	genbrtrue(int dest);
void	genbss(char *name, int len);
void	gencall(int y);
void	gencalr(void);
void	gencmp(char *inst);
void	gendata(void);
void	gendefb(int v);
void	gendefl(int id);
void	gendefp(int v);
void	gendefs(char *s, int len);
void	gendefw(int v);
void	gendiv(int swap);
void	genentry(void);
void	genexit(void);
void	geninc(int *lv, int inc, int pre);
void	genind(int p);
void	genior(void);
void	genjump(int dest);
void	genlab(int id);
void	genldlab(int id);
void	genlit(int v);
void	genln(char *s);
void	genlocinit(void);
void	genlognot(void);
void	genmod(int swap);
void	genmul(void);
void	genname(char *name);
void	genneg(void);
void	gennot(void);
void	genpostlude(void);
void	genprelude(void);
void	genpublic(char *name);
void	genpush(void);
void	genpushlit(int n);
void	genraw(char *s);
void	genscale(void);
void	genscale2(void);
void	genshl(int swap);
void	genshr(int swap);
void	genstack(int n);
void	genstore(int op, int *lv, int *lv2);
int	gensub(int p1, int p2, int swap);
void	genswitch(int *vals, int *labs, int nc, int dflt);
void	gentext(void);
void	genxor(void);
char	*globname(char *s);
char	*gsym(char *s);
void	ident(void);
int	inttype(int p);
int	label(void);
char	*labname(int id);
void	lbrace(void);
void	lgen(char *s, char *inst, int n);
void	lgen2(char *s, int v1, int v2);
void	load(void);
void	lparen(void);
void	match(int t, char *what);
char	*newfilename(char *name, int sfx);
int	next(void);
void	ngen(char *s, char *inst, int n);
void	ngen2(char *s, char *inst, int n, int a);
int	objsize(int prim, int type, int size);
void	playmac(char *s);
int	pointerto(int prim);
void	preproc(void);
int	primtype(int t);
void	putback(int t);
void	rbrack(void);
void	reject(void);
int	rexpr(void);
void	rparen(void);
void	rvalue(int *lv);
int	scan(void);
int	scanraw(void);
void	semi(void);
void	sgen(char *s, char *inst, char *s2);
int	skip(void);
int	synch(int syn);
void	top(void);
int	typematch(int p1, int p2);

contact