#include <stdio.h> #include <iostream.h> #include "FSM.h" #include "Filter_eventhandler.h" // Maximal number of transitions const int MaxNumTransitions = 20; int main( int argc, char *argv[] ) { // Check the input arguments // not shown // Create an instance of a filter // events handler (without error handling) Filter_EventHandler *ptrHandler = 0; ptrHandler = new Filter_EventHandler(MaxNumTransitions, argv[1], argv[2]); // Create an instance of the FSM FSM myFSM(ptrHandler, MaxNumTransitions, VALID); // Define the FSM's transitions myFSM.defineTransition(VALID, VALID, OTHER, Ind_writeChar); myFSM.defineTransition(VALID, VALID, NEWLINE, Ind_writeChar); myFSM.defineTransition(VALID, VALID, ASTERISK, Ind_writeChar); myFSM.defineTransition(VALID, WAIT_COMMENT, SLASH, Ind_ignoreChar); myFSM.defineTransition(WAIT_COMMENT, VALID, OTHER, Ind_writeSlash); myFSM.defineTransition(WAIT_COMMENT, GARBAGE1, SLASH, Ind_ignoreChar); myFSM.defineTransition(GARBAGE1, VALID, INTERNAL_ERROR, Ind_InternalError); // not shown: the rest of // the define Transition() calls ... int char_read, event; char_read = ptrHandler->getCharacter(); while (char_read != EOF) { // Convert a character into an event switch (char_read) { case SLASH: case ASTERISK: case NEWLINE: event = char_read; break; default: event = OTHER; } // execute transition and // associated actions if (myFSM.control(event, (void *)&char_read) == FALSE) break; // Read a character from an input file char_read = ptrHandler->getCharacter(); } // Clean up ... if ( ptrHandler ) delete ptrHandler; return(0); } //End of File