home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_100 / 154_01 / eatcom.c < prev    next >
Text File  |  1979-12-31  |  1KB  |  72 lines

  1. /* eatcom.c:    strip comments from STDIN    */
  2.  
  3. #include <stdio.h>
  4. #define START 1
  5. #define MAYBE 2
  6. #define YES 3
  7. #define LEAVING 4
  8. #define QUOTE 5
  9. #define APOST 6
  10.  
  11. main()
  12. {    int c, state, escape = 0;
  13.  
  14.     state = START;
  15.     while ((c = getchar()) != EOF)
  16.         switch(state)
  17.         {
  18.             case START:
  19.                 if (c != '/')
  20.                 {
  21.                     putchar(c);
  22.                     if (c == '\"')
  23.                         state = QUOTE;
  24.                     else if (c == '\'')
  25.                         state = APOST;
  26.                 }
  27.                 else
  28.                     state = MAYBE;
  29.                 break;
  30.             case MAYBE:    
  31.                 if (c == '*')
  32.                     state = YES;
  33.                 else
  34.                 {
  35.                     putchar('/');
  36.                     putchar(c);
  37.                     state = START;
  38.                 }
  39.                 break;
  40.             case YES:
  41.                 if (c == '*')
  42.                     state = LEAVING;
  43.                 break;
  44.             case LEAVING:
  45.                 if (c == '/')
  46.                     state = START;
  47.                 else if (c != '*')
  48.                     state = YES;
  49.                 break;
  50.             case QUOTE:
  51.                 putchar(c);
  52.                 if (escape)
  53.                     escape = 0;
  54.                 else if (c == '\\')
  55.                     escape = 1;
  56.                 else if (c == '\"')
  57.                     state = START;
  58.                 break;
  59.             case APOST:
  60.                 putchar(c);
  61.                 if (escape)
  62.                     escape = 0;
  63.                 else if (c == '\\')
  64.                     escape = 1;
  65.                 else if (c == '\'')
  66.                     state = START;
  67.         }
  68.  
  69.     if (state != START)
  70.         printf("Invalid comment syntax!\n");
  71. }
  72.