cinap_lenrekadd hg and python4bb9e2215 years agoHistory
93 lines · 2.0 KB · C
RawDownload
 /* Grammar interface */ #ifndef Py_GRAMMAR_H#define Py_GRAMMAR_H#ifdef __cplusplusextern "C" {#endif #include "bitset.h" /* Sigh... */ /* A label of an arc */ typedef struct {    int		 lb_type;    char	*lb_str;} label; #define EMPTY 0		/* Label number 0 is by definition the empty label */ /* A list of labels */ typedef struct {    int		 ll_nlabels;    label	*ll_label;} labellist; /* An arc from one state to another */ typedef struct {    short	a_lbl;		/* Label of this arc */    short	a_arrow;	/* State where this arc goes to */} arc; /* A state in a DFA */ typedef struct {    int		 s_narcs;    arc		*s_arc;		/* Array of arcs */	    /* Optional accelerators */    int		 s_lower;	/* Lowest label index */    int		 s_upper;	/* Highest label index */    int		*s_accel;	/* Accelerator */    int		 s_accept;	/* Nonzero for accepting state */} state; /* A DFA */ typedef struct {    int		 d_type;	/* Non-terminal this represents */    char	*d_name;	/* For printing */    int		 d_initial;	/* Initial state */    int		 d_nstates;    state	*d_state;	/* Array of states */    bitset	 d_first;} dfa; /* A grammar */ typedef struct {    int		 g_ndfas;    dfa		*g_dfa;		/* Array of DFAs */    labellist	 g_ll;    int		 g_start;	/* Start symbol of the grammar */    int		 g_accel;	/* Set if accelerators present */} grammar; /* FUNCTIONS */ grammar *newgrammar(int start);dfa *adddfa(grammar *g, int type, char *name);int addstate(dfa *d);void addarc(dfa *d, int from, int to, int lbl);dfa *PyGrammar_FindDFA(grammar *g, int type); int addlabel(labellist *ll, int type, char *str);int findlabel(labellist *ll, int type, char *str);char *PyGrammar_LabelRepr(label *lb);void translatelabels(grammar *g); void addfirstsets(grammar *g); void PyGrammar_AddAccelerators(grammar *g);void PyGrammar_RemoveAccelerators(grammar *); void printgrammar(grammar *g, FILE *fp);void printnonterminals(grammar *g, FILE *fp); #ifdef __cplusplus}#endif#endif /* !Py_GRAMMAR_H */