/* @(#)rpc←parse.h 1.1 90/10/29 (C) 1987 SMI */
/*
* rpc←parse.h, Definitions for the RPCL parser
* Copyright (C) 1987, Sun Microsystems, Inc.
*/
enum defkind {
DEF←CONST,
DEF←STRUCT,
DEF←UNION,
DEF←ENUM,
DEF←TYPEDEF,
DEF←PROGRAM
};
typedef enum defkind defkind;
typedef char *const←def;
enum relation {
REL←VECTOR, /* fixed length array */
REL←ARRAY, /* variable length array */
REL←POINTER, /* pointer */
REL←ALIAS, /* simple */
};
typedef enum relation relation;
struct typedef←def {
char *old←prefix;
char *old←type;
relation rel;
char *array←max;
};
typedef struct typedef←def typedef←def;
struct enumval←list {
char *name;
char *assignment;
struct enumval←list *next;
};
typedef struct enumval←list enumval←list;
struct enum←def {
enumval←list *vals;
};
typedef struct enum←def enum←def;
struct declaration {
char *prefix;
char *type;
char *name;
relation rel;
char *array←max;
};
typedef struct declaration declaration;
struct decl←list {
declaration decl;
struct decl←list *next;
};
typedef struct decl←list decl←list;
struct struct←def {
decl←list *decls;
};
typedef struct struct←def struct←def;
struct case←list {
char *case←name;
declaration case←decl;
struct case←list *next;
};
typedef struct case←list case←list;
struct union←def {
declaration enum←decl;
case←list *cases;
declaration *default←decl;
};
typedef struct union←def union←def;
struct proc←list {
char *proc←name;
char *proc←num;
char *arg←type;
char *arg←prefix;
char *res←type;
char *res←prefix;
struct proc←list *next;
};
typedef struct proc←list proc←list;
struct version←list {
char *vers←name;
char *vers←num;
proc←list *procs;
struct version←list *next;
};
typedef struct version←list version←list;
struct program←def {
char *prog←num;
version←list *versions;
};
typedef struct program←def program←def;
struct definition {
char *def←name;
defkind def←kind;
union {
const←def co;
struct←def st;
union←def un;
enum←def en;
typedef←def ty;
program←def pr;
} def;
};
typedef struct definition definition;
definition *get←definition();