home *** CD-ROM | disk | FTP | other *** search
-
- /* Grammar interface */
-
- #ifndef Py_GRAMMAR_H
- #define Py_GRAMMAR_H
- #ifdef __cplusplus
- extern "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 */
-