ahocor.cpp

Go to the documentation of this file.
00001 
00002 /* MAINTAINER: Bernard */
00003 
00004 /* Aoutomat for cutting _(" ... ") from input stream */
00005 
00006 #include <iostream>
00007 #include <string>
00008 
00009 
00010 using namespace std;
00011 
00012 
00013 int main(int argc, char* argv[])
00014 {
00015         int     state = 0; // state of automat
00016         string  s = "";    // what translate
00017         char c; // current character
00018 
00019         while (cin)
00020         {
00021                 cin.get(c);
00022 
00023 //              cout << "Trace1: c=" << c << " s=" << s << " state=" << state << endl;
00024                 
00025                 if (c == '\n') 
00026                 { 
00027                         state = 0; s="";
00028                         continue; 
00029                 }
00030                 
00031                 switch (state)
00032                 {
00033                 case 0:
00034                         if (c == '_') state = 1;
00035                         break;
00036                 case 1:
00037                         if (c == '(') { state = 2; break; }
00038                         if (c == ' ' || c == '\t') break;
00039                         state = 0;
00040                         s = "";
00041                         break;
00042                 case 2:
00043                         if (c == '"') { state = 3; break; }
00044                         if (c == ' ' || c == '\t') break;
00045                         state = 0;
00046                         s = "";
00047                         break;
00048                 case 3:
00049                         if (c == '"') { state = 4; break; }
00050                         if (c == '\\')
00051                         {
00052                                 s += c;
00053                                 cin.get(c);
00054                         }
00055                         s += c;
00056                         break;
00057                 case 4:
00058                         if (c == ' ' || c == '\t') break;
00059                         if (c == ')') 
00060                         { 
00061                                 cout << s << endl;
00062                         }
00063                         state = 0;
00064                         s = "";
00065                         break;
00066         
00067                 }
00068         }
00069 
00070 }

Generated on Wed Apr 12 13:55:27 2006 for bjs by  doxygen 1.4.5