home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
misc
/
volume19
/
wacco
/
part01
/
defs.h
< prev
next >
Wrap
C/C++ Source or Header
|
1991-05-19
|
4KB
|
184 lines
// Copyright (c) 1991 by Parag Patel. All Rights Reserved.
// $Header: defs.h,v 1.15 91/05/17 16:29:55 hmgr Exp $
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <malloc.h>
#include "boolean.h"
#include "darray.h"
#include "table.h"
#include "bitset.h"
inline char *strdup(const char *s)
{ return s == NULL ? NULL : strcpy((char*)malloc(strlen(s) + 1), s); }
inline char *strnew(size_t len) { return (char*)malloc(len + 1); }
#if FREE_TAKES_CHAR
inline void strfree(const char *s) { if (s != NULL) free((char *)s); }
#else
inline void strfree(const char *s) { if (s != NULL) free((const void *)s); }
#endif
// for large switch statements
#define Case break;case
#define Default break;default
const TERMINAL = 1;
const NONTERMINAL = 2;
const CODE = 3;
const END = 0;
const EMPTY = 1;
const START = 2;
#define RET_NONE 0x00
#define RET_VALUE 0x01
#define RET_CODE 0x02
struct symbol;
struct symnode;
struct resynclist;
struct Set
{
Bitset *set;
int id;
Set(Bitset *s = NULL) { set = s; }
operator Bitset*() { return set; }
boolean operator==(Bitset *b) { return *set == *b; };
};
struct symbol
{
char *name;
int id;
int parserid;
int type;
char *rettype;
union
{
char *lexstr;
char *realname;
};
char *code;
union
{
int usedret;
boolean lexdef;
int line;
};
int usecount;
char toempty;
char export;
char mkstruct;
Bitset *first;
Bitset *follow;
union
{
Set *resync;
resynclist *list;
};
symnode *node;
symbol(const char *n = NULL);
operator char *() { return name; }
boolean operator==(const char *k) { return strcmp(name, k) == 0; }
};
struct symnode
{
symbol *sym;
char *alias;
symnode *next;
symnode *or;
union
{
Set *resync;
resynclist *list;
};
symnode();
};
struct resynclist
{
char *name;
char first;
char follow;
char paren;
resynclist *next;
resynclist(char *);
~resynclist() { delete name; }
};
declare_table(Settab, Setiter, Set, Bitset*);
extern Settab settab;
extern boolean optimize;
extern boolean dumpcode;
extern boolean statonly;
extern boolean docompare;
extern boolean casesensitive;
extern boolean dargstyle;
extern boolean genlineinfo;
extern char *headername;
extern char *scannername;
extern char *parsername;
extern void getoptions(int argc, char *argv[]);
extern FILE *makefile(char *fname);
extern void cmpandmv(char *file);
extern boolean exportedname;
extern int numsymbols(void);
extern symbol *getsymbol(int);
extern int numterms(void);
extern int numnonterms(void);
extern symbol *getterm(int);
extern symbol *getnonterm(int);
extern symbol *addsymbol(const char *);
extern void addterm(symbol *);
extern void addnonterm(symbol *);
extern symbol *findsymbol(const char *);
extern void initsym(void);
extern symbol *startsymbol;
extern symbol *startcode;
extern "C" {
extern int w_input(void);
extern int w_unput(int chr);
}
extern boolean gotlexstr;
extern void readccomment(void);
extern char *readtype(void);
extern char *readcode(int &);
extern char *readblockcode(int &);
extern char *getword(void);
extern void buildsets(void);
extern void check(void);
extern void gencode(char *infile);
extern void quit(char *fmt, ...);
extern int error(char *fmt, ...);
extern char **strsep(const char *str, const char *sep,
boolean whsp = TRUE, int *num = NULL);
extern const char *strbldf(const char *fmt, ...);
declare_array(charbuf, char);
declare_array(charvec, char*);