| FSM Parser
==========
What is it?
~~~~~~~~~~~
A PHP class for creating parsers and preprocessors using Finite State Machine.
How to use?
~~~~~~~~~~~
First, include the class file.
Then you must define language constructs (as regular expressions), actions
to take when each of them are found, and optional machine states: the default
target state (can be changed inside action; can be NULL if no change) and
required state (NULL if no state check is needed).
Example: xmlparser.php - a very simple XML parser.
It is also possible to load FSM definition from file or another source using
LoadFSM() and LoadFSMFile() methods.
Example: xmlparser_loadfsm.php - the same XML parser loaded from .fsm file.
FSM definition syntax.
~~~~~~~~~~~~~~~~~~~~~~
It is just like Makefile syntax:
Line beginning with "#" is a comment.
Empty line is an end of state definiton (it is required even at EOF).
Line starting with an alphanumeric symbol is a state definition:
<Required state or *> <regular expression> [Default state]
Any following line starting with tab character is an action string.
Method description.
~~~~~~~~~~~~~~~~~~~
void FSM( string Expect, string Do [, string Target [, string Require] ] )
 Add a state definition.
  Expect: regex to match closest to current position.
  Do: PHP code to execute on best match. Inside this code, $STRING is that portion of parsed text that matches "Expect", $STATE is current state.
  Target: state to take if "Do" code did not specify it explicitly.
  Require: search for "Expect" only if macine is in this state.
 "Do" code may return:
   string: state to take.
   array("STOP"=> stop ,"NEWSTATE"=> state):
    if "stop" is nonzero, the FSM will stop with FSMSTOP_STOP return code.
    if "state" is nonempty string, the machine will take this state.
void LoadFSM( string data )
 Load state definitions from string in syntax described above.
void LoadFSMFile( string filename )
 Load state definitions from specified file (wrapper for LoadFSM() ).
int Parse( string data , string StartState)
 Runs a FSM on specified data.
 Return codes:
  FSMSTOP_OK		Stopped at data end.
  FSMSTOP_STOP		Stopped by action handler.
  FSMSTOP_UNHANDLED	No matches found.
int ParseFile( string filename , string StartState )
 Runs a FSM on specified file (wrapper for Parse() ).
 |