home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 June / PCWorld_2005-06_cd.bin / software / vyzkuste / firewally / firewally.exe / framework-2.3.exe / grammar.h < prev    next >
C/C++ Source or Header  |  2003-12-30  |  2KB  |  94 lines

  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 */
  94.