70 lines
1.3 KiB
C
70 lines
1.3 KiB
C
|
/* Copyright (C) Boris Nikolaus, Germany, 1996-1997. All rights reserved. */
|
||
|
|
||
|
extern int linedirective;
|
||
|
extern int lineno;
|
||
|
extern char filename[];
|
||
|
extern char outfilename[];
|
||
|
extern char incfilename[];
|
||
|
extern FILE *fout, *finc;
|
||
|
extern char *startsym;
|
||
|
extern char *prefix;
|
||
|
typedef struct item_s {
|
||
|
int isnonterm;
|
||
|
int isexternal;
|
||
|
char *tag;
|
||
|
char *identifier;
|
||
|
char *altidentifier;
|
||
|
char **args;
|
||
|
struct item_s **items;
|
||
|
int empty;
|
||
|
int checked;
|
||
|
} item_t;
|
||
|
extern item_t symbols[];
|
||
|
extern int nsymbols;
|
||
|
extern item_t *items[];
|
||
|
extern int nitems;
|
||
|
|
||
|
struct bounds_s {
|
||
|
unsigned lower; /* 0 for no lower bound */
|
||
|
unsigned upper; /* 0 for no upper bound */
|
||
|
};
|
||
|
struct rhs_s {
|
||
|
enum { eCCode, eItem, eSequence, eNode, eBounded, eAlternative } type;
|
||
|
union {
|
||
|
struct {
|
||
|
char *ccode;
|
||
|
int line;
|
||
|
int column;
|
||
|
char *file;
|
||
|
} ccode;
|
||
|
struct {
|
||
|
char *identifier;
|
||
|
char *args;
|
||
|
} item;
|
||
|
struct {
|
||
|
struct rhs_s *element;
|
||
|
struct rhs_s *next;
|
||
|
} sequence, alternative;
|
||
|
struct {
|
||
|
struct rhs_s *left;
|
||
|
struct rhs_s *right;
|
||
|
} node;
|
||
|
struct {
|
||
|
struct bounds_s bounds;
|
||
|
struct rhs_s *items;
|
||
|
} bounded;
|
||
|
} u;
|
||
|
};
|
||
|
struct token_s {
|
||
|
char *identifier;
|
||
|
char *altidentifier;
|
||
|
};
|
||
|
struct nterm_s {
|
||
|
char *identifier;
|
||
|
char **tags;
|
||
|
};
|
||
|
struct lhs_s {
|
||
|
char *identifier;
|
||
|
char *args;
|
||
|
};
|