home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ctcoll95.zip / AEHNLICH / PARSER.H < prev   
C/C++ Source or Header  |  1995-04-06  |  2KB  |  46 lines

  1. /* parser.h: Headerfile fuer den Muster-Parser
  2.  * Aufruf:   int state;
  3.  *           state = parsepattern(char **pattern);
  4.  * Ergebnis: 0, falls das Muster einwandfrei ist
  5.  *           im Fehlerfall ist das Ergebnis ungleich 0 und
  6.  *           pattern zeigt auf die fehlerhafte Stelle im Muster
  7.  * Beschreibung:
  8.  *   parsepattern() betrachtet das Muster als Folge von Token
  9.  *   und erkennt die folgenden Typen von Token:
  10.  *                   c : ein normales Zeichen         (T_CHAR)
  11.  *                  \c : mit '\' geschuetztes Zeichen (T_CHAR)
  12.  *             [abc-h] : Zeichenklasse                (T_RPAREN)
  13.  *   [^abc] bzw [!abc] : Komplement-Zeichenklasse     (T_RPAREN)
  14.  *                   ? : ein beliebiges Zeichen       (T_QM)
  15.  *                   * : beliebig viele Zeichen       (T_STAR)
  16.  *               {abc} : zwischen {} Fehler unerlaubt
  17.  *
  18.  * (c) Guido Gronek, Lion Ges. f. Systementwicklung m.b.H. & c't 5/95
  19.  */
  20.  
  21. #define char unsigned char
  22. #define NSTATES     6  /* Zahl d. nichtterminalen Zustaende */
  23.  
  24. enum tokentype {               /* die erkannten Token */
  25. T_CHAR,             T_QM=NSTATES,       T_STAR=2*NSTATES,
  26. T_LPAREN=3*NSTATES, T_CINVRT=4*NSTATES, T_MINUS=5*NSTATES,
  27. T_RPAREN=6*NSTATES, T_EOT=7*NSTATES,    T_ILL=8*NSTATES,
  28. T_LBRAC=9*NSTATES,  T_RBRAC=10*NSTATES, T_OR=11*NSTATES };
  29.  
  30. typedef struct token_t {             /* ein Token */
  31.   int  type;                         /* dessen Typ */
  32.   int value;                         /* dessen Wert */
  33. } TOKEN_T;
  34.  
  35. typedef char charset_t[UCHAR_MAX+1];
  36.  
  37. int parsepattern(char **pattern);
  38. extern int user();
  39.  
  40. extern TOKEN_T Token, Lasttoken;     /* akt. und voriges Token */
  41. extern charset_t Cset;                   /* akt. Zeichenklasse */
  42. extern int Csetinv;           /* flag: Z.klasse ist invertiert */
  43. extern int State;
  44. extern int Protected;
  45. extern char *Pattern;
  46.