~ibmcharmers/charms/xenial/ibm-db2/trunk

« back to all changes in this revision

Viewing changes to .tox/py35/include/python3.5m/grammar.h

  • Committer: Rajith Venkata
  • Date: 2017-02-22 09:37:48 UTC
  • Revision ID: rajith.pv@in.ibm.com-20170222093748-fibtdsahuug31ra5
2ndcheckin for IBM-DB2 charm

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
/* Grammar interface */
 
3
 
 
4
#ifndef Py_GRAMMAR_H
 
5
#define Py_GRAMMAR_H
 
6
#ifdef __cplusplus
 
7
extern "C" {
 
8
#endif
 
9
 
 
10
#include "bitset.h" /* Sigh... */
 
11
 
 
12
/* A label of an arc */
 
13
 
 
14
typedef struct {
 
15
    int          lb_type;
 
16
    char        *lb_str;
 
17
} label;
 
18
 
 
19
#define EMPTY 0         /* Label number 0 is by definition the empty label */
 
20
 
 
21
/* A list of labels */
 
22
 
 
23
typedef struct {
 
24
    int          ll_nlabels;
 
25
    label       *ll_label;
 
26
} labellist;
 
27
 
 
28
/* An arc from one state to another */
 
29
 
 
30
typedef struct {
 
31
    short       a_lbl;          /* Label of this arc */
 
32
    short       a_arrow;        /* State where this arc goes to */
 
33
} arc;
 
34
 
 
35
/* A state in a DFA */
 
36
 
 
37
typedef struct {
 
38
    int          s_narcs;
 
39
    arc         *s_arc;         /* Array of arcs */
 
40
 
 
41
    /* Optional accelerators */
 
42
    int          s_lower;       /* Lowest label index */
 
43
    int          s_upper;       /* Highest label index */
 
44
    int         *s_accel;       /* Accelerator */
 
45
    int          s_accept;      /* Nonzero for accepting state */
 
46
} state;
 
47
 
 
48
/* A DFA */
 
49
 
 
50
typedef struct {
 
51
    int          d_type;        /* Non-terminal this represents */
 
52
    char        *d_name;        /* For printing */
 
53
    int          d_initial;     /* Initial state */
 
54
    int          d_nstates;
 
55
    state       *d_state;       /* Array of states */
 
56
    bitset       d_first;
 
57
} dfa;
 
58
 
 
59
/* A grammar */
 
60
 
 
61
typedef struct {
 
62
    int          g_ndfas;
 
63
    dfa         *g_dfa;         /* Array of DFAs */
 
64
    labellist    g_ll;
 
65
    int          g_start;       /* Start symbol of the grammar */
 
66
    int          g_accel;       /* Set if accelerators present */
 
67
} grammar;
 
68
 
 
69
/* FUNCTIONS */
 
70
 
 
71
grammar *newgrammar(int start);
 
72
dfa *adddfa(grammar *g, int type, const char *name);
 
73
int addstate(dfa *d);
 
74
void addarc(dfa *d, int from, int to, int lbl);
 
75
dfa *PyGrammar_FindDFA(grammar *g, int type);
 
76
 
 
77
int addlabel(labellist *ll, int type, const char *str);
 
78
int findlabel(labellist *ll, int type, const char *str);
 
79
const char *PyGrammar_LabelRepr(label *lb);
 
80
void translatelabels(grammar *g);
 
81
 
 
82
void addfirstsets(grammar *g);
 
83
 
 
84
void PyGrammar_AddAccelerators(grammar *g);
 
85
void PyGrammar_RemoveAccelerators(grammar *);
 
86
 
 
87
void printgrammar(grammar *g, FILE *fp);
 
88
void printnonterminals(grammar *g, FILE *fp);
 
89
 
 
90
#ifdef __cplusplus
 
91
}
 
92
#endif
 
93
#endif /* !Py_GRAMMAR_H */