symbian-qemu-0.9.1-12/python-2.6.1/Include/grammar.h
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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, 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, char *str);
       
    78 int findlabel(labellist *ll, int type, char *str);
       
    79 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 */