1 #ifndef Py_PARSER_H
2 #define Py_PARSER_H
3 #ifdef __cplusplus
4 extern "C" {
5 #endif
6 
7 
8 /* Parser interface */
9 
10 #define MAXSTACK 1500
11 
12 typedef struct {
13     int              s_state;       /* State in current DFA */
14     dfa             *s_dfa;         /* Current DFA */
15     struct _node    *s_parent;      /* Where to add next node */
16 } stackentry;
17 
18 typedef struct {
19     stackentry      *s_top;         /* Top entry */
20     stackentry       s_base[MAXSTACK];/* Array of stack entries */
21                                     /* NB The stack grows down */
22 } stack;
23 
24 typedef struct {
25     stack           p_stack;        /* Stack of parser states */
26     grammar         *p_grammar;     /* Grammar to use */
27     node            *p_tree;        /* Top of parse tree */
28 #ifdef PY_PARSER_REQUIRES_FUTURE_KEYWORD
29     unsigned long   p_flags;        /* see co_flags in Include/code.h */
30 #endif
31 } parser_state;
32 
33 parser_state *PyParser_New(grammar *g, int start);
34 void PyParser_Delete(parser_state *ps);
35 int PyParser_AddToken(parser_state *ps, int type, char *str, int lineno, int col_offset,
36                       int *expected_ret);
37 void PyGrammar_AddAccelerators(grammar *g);
38 
39 #ifdef __cplusplus
40 }
41 #endif
42 #endif /* !Py_PARSER_H */
43