home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / snip9707.zip / CMTPARSR.H < prev    next >
C/C++ Source or Header  |  1997-07-05  |  2KB  |  108 lines

  1. /* +++Date last modified: 05-Jul-1997 */
  2.  
  3. /*
  4.  * CMTPARSR.H
  5.  * Base class: comment parser.
  6.  *
  7.  * ver 1.0, 30 Jun 1996
  8.  *
  9.  * Public domain by:
  10.  *   Jari Laaksonen
  11.  *   Arkkitehdinkatu 30 A 2
  12.  *   FIN-33720 Tampere
  13.  *   FINLAND
  14.  *
  15.  *   Fidonet : 2:221/360.20
  16.  *   Internet: jla@to.icl.fi
  17.  */
  18.  
  19. #ifndef _CMTPARSR_H_
  20. #define _CMTPARSR_H_
  21.  
  22. #include <stdio.h>
  23.  
  24. class CommentParser
  25. {
  26. public:
  27.     enum State {
  28.         NormalInput,
  29.         InsideString,
  30.         InsideChar,
  31.         BeginComment,
  32.         InsideEscape,
  33.         InCppComment,
  34.         InCComment,
  35.         StarInCppComment,
  36.         StarInCComment
  37.     };
  38.  
  39.     enum Event {
  40.         ANY_CHAR,
  41.         FOUND_BACKSLASH,
  42.         FOUND_NL,
  43.         FOUND_QUOTE,
  44.         FOUND_SINGLEQUOTE,
  45.         FOUND_SLASH,
  46.         FOUND_STAR,
  47.         FOUND_WHITESPACE,
  48.         END_OF_FILE
  49.     };
  50.  
  51.     CommentParser (State InitState = NormalInput)
  52.         : itsState(InitState)
  53.         , lines(1)
  54.     { }
  55.  
  56.     virtual ~CommentParser() { }
  57.  
  58.     int Init (int argc, char **argv);
  59.     int Init (char *file);
  60.  
  61.     void Uninit();
  62.  
  63.     int Run();
  64.  
  65.     unsigned long GetLines() { return lines - 1; };
  66.  
  67.     int GetLastState() { return itsState; };
  68.  
  69. protected:
  70.     virtual void ProcessState (Event theEvent);
  71.  
  72.     virtual void ProcessActions (Event theEvent) = 0;
  73.  
  74.     void print (char ch)
  75.     {
  76.         fputc (ch, OutFile);
  77.     }
  78.  
  79.     void print (char *str)
  80.     {
  81.         fputs (str, OutFile);
  82.     }
  83.  
  84.     void ChangeChar (int ch)
  85.     {
  86.         ReadCh = ch;
  87.     }
  88.  
  89.     int ReadChar();
  90.     void PrintChar();
  91.     void PrintLineNumber();
  92.  
  93.     Event GetEvent();
  94.  
  95.     State   itsState;
  96.     State   itsPrevState;
  97.  
  98. private:
  99.     unsigned long  lines;
  100.     int     arguments;
  101.     int     ReadCh;
  102.     FILE   *InFile,
  103.            *OutFile;
  104. };
  105.  
  106. #endif // _CMTPARSR_H_
  107.  
  108.