7 /***********************************************************
8 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
13 Permission to use, copy, modify, and distribute this software and its
14 documentation for any purpose and without fee is hereby granted,
15 provided that the above copyright notice appear in all copies and that
16 both that copyright notice and this permission notice appear in
17 supporting documentation, and that the names of Stichting Mathematisch
18 Centrum or CWI or Corporation for National Research Initiatives or
19 CNRI not be used in advertising or publicity pertaining to
20 distribution of the software without specific, written prior
23 While CWI is the initial source for this software, a modified version
24 is made available by the Corporation for National Research Initiatives
25 (CNRI) at the Internet address ftp://ftp.python.org.
27 STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
28 REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
29 MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
30 CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
31 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
32 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
33 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
34 PERFORMANCE OF THIS SOFTWARE.
36 ******************************************************************/
38 /* Grammar interface */
40 #include "bitset.h" /* Sigh... */
42 /* A label of an arc */
49 #define EMPTY 0 /* Label number 0 is by definition the empty label */
51 /* A list of labels */
58 /* An arc from one state to another */
61 short a_lbl
; /* Label of this arc */
62 short a_arrow
; /* State where this arc goes to */
65 /* A state in a DFA */
69 arc
*s_arc
; /* Array of arcs */
71 /* Optional accelerators */
72 int s_lower
; /* Lowest label index */
73 int s_upper
; /* Highest label index */
74 int *s_accel
; /* Accelerator */
75 int s_accept
; /* Nonzero for accepting state */
81 int d_type
; /* Non-terminal this represents */
82 char *d_name
; /* For printing */
83 int d_initial
; /* Initial state */
85 state
*d_state
; /* Array of states */
93 dfa
*g_dfa
; /* Array of DFAs */
95 int g_start
; /* Start symbol of the grammar */
96 int g_accel
; /* Set if accelerators present */
101 grammar
*newgrammar
Py_PROTO((int start
));
102 dfa
*adddfa
Py_PROTO((grammar
*g
, int type
, char *name
));
103 int addstate
Py_PROTO((dfa
*d
));
104 void addarc
Py_PROTO((dfa
*d
, int from
, int to
, int lbl
));
105 dfa
*PyGrammar_FindDFA
Py_PROTO((grammar
*g
, int type
));
106 char *typename
Py_PROTO((grammar
*g
, int lbl
));
108 int addlabel
Py_PROTO((labellist
*ll
, int type
, char *str
));
109 int findlabel
Py_PROTO((labellist
*ll
, int type
, char *str
));
110 char *PyGrammar_LabelRepr
Py_PROTO((label
*lb
));
111 void translatelabels
Py_PROTO((grammar
*g
));
113 void addfirstsets
Py_PROTO((grammar
*g
));
115 void PyGrammar_AddAccelerators
Py_PROTO((grammar
*g
));
116 void PyGrammar_RemoveAccelerators
Py_PROTO((grammar
*));
118 void printgrammar
Py_PROTO((grammar
*g
, FILE *fp
));
119 void printnonterminals
Py_PROTO((grammar
*g
, FILE *fp
));
124 #endif /* !Py_GRAMMAR_H */