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 1700
11 
12 typedef struct {
13     int              s_state;       /* State in current DFA */
14     const 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,
36                       int lineno, int col_offset,
37                       int end_lineno, int end_col_offset,
38                       int *expected_ret);
39 void PyGrammar_AddAccelerators(grammar *g);
40 
41 
42 #define showtree _Py_showtree
43 #define printtree _Py_printtree
44 #define dumptree _Py_dumptree
45 
46 #ifdef __cplusplus
47 }
48 #endif
49 #endif /* !Py_PARSER_H */
50