Login   Register  
PHP Classes
elePHPant
Icontem

File: README

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Dmitry A. Kirilin  >  FSM Parser  >  README  >  Download  
File: README
Role: Documentation
Content type: text/plain
Description: Some documentation
Class: FSM Parser
Generic parser using finite state machine
Author: By
Last change: Fixed some errors
Date: 8 years ago
Size: 2,375 bytes
 

Contents

Class file image Download
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() ).