This is fsm.h in view mode; [Download] [Up]
//------------------------------------------------------------------------ // ^FILE: fsm.h - define a finite state machine // // ^DESCRIPTION: // This file defines a finite state machine tailored to the task of // parsing syntax strings for command-line arguments. // // ^HISTORY: // 03/27/92 Brad Appleton <brad@ssd.csd.harris.com> Created //-^^--------------------------------------------------------------------- class SyntaxFSM { public: enum state_t { START, // start-state OPTION, // just parsed an option-spec KEYWORD, // just parsed a keyword-spec VALUE, // just parsed a value-spec LIST, // just parsed "..." FINAL, // final-state ERROR, // syntax error encountered } ; struct token_t { const char * start; // start address of token unsigned len; // length of token token_t(void) : start(0), len(0) {} void set(const char * s, unsigned l) { start = s, len = l; } } ; SyntaxFSM(void) : ntoks(0), nbpairs(0), lev(0), fsm_state(START) {} // Reset the FSM void reset(void) { ntoks = 0; nbpairs = 0; lev = 0; fsm_state = START; } // Return the number of tokens parsed thus far. unsigned num_tokens(void) const { return ntoks; } // Return the number of balanced brace-pairs parsed thus far. unsigned num_braces(void) const { return nbpairs; } // Return the current nesting level of brace-pairs int level(void) const { return lev; } // Return the current machine state state_t state(void) const { return fsm_state; } // Get the next token from "input" and place it in "token" // (consuming characters from "input"). // // Return 0 if the resulting state is FINAL; // otherwise return NON-zero. // int operator()(const char * & input, token_t & token); protected: unsigned ntoks; // number of tokens parsed thus far unsigned nbpairs; // number of balanced brace-pairs parsed thus far int lev; // current nesting level of brace-pairs state_t fsm_state; // current machine state private: void skip(const char * & input); void parse_token(const char * & input); } ;
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.