logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

grammar::fa::dexec - Execute deterministic finite automatons

Api

       The package exports the API described here.

       ::grammar::fa::dexecdaNamefa ?-anyany? ?-commandcmdprefix?
              Creates a new deterministic executor with an associated global Tcl command whose name  is  daName.
              This  command  may  be  used  to  invoke  various operations on the executor. It has the following
              general form:

              daNameoption ?argarg...?
                     Option and the args determine the exact behavior  of  the  command.  See  section  EXECUTORMETHODS for more explanations.

                     The  executor  will be based on the deterministic finite automaton stored in the object fa.
                     It will keep a copy of the relevant data of the FA in its own storage, in a  form  easy  to
                     use for its purposes. This also means that changes made to the fa after the construction of
                     the executor willnot influence the executor.

                     If  any  has  been specified, then the executor will convert all symbols in the input which
                     are unknown to the base FA to that symbol before proceeding with the processing.

Bugs, Ideas, Feedback

       This  document,  and  the package it describes, will undoubtedly contain bugs and other problems.  Please
       report such in the category grammar_fa of  the  TcllibTrackers  [http://core.tcl.tk/tcllib/reportlist].
       Please also report any ideas for enhancements you may have for either package and/or documentation.

       When proposing code changes, please provide unifieddiffs, i.e the output of diff-u.

       Note  further  that  attachments  are strongly preferred over inlined patches. Attachments can be made by
       going to the Edit form of the ticket immediately after its creation, and then using the left-most  button
       in the secondary navigation bar.

Category

       Grammars and finite automata

Description

       This  package  provides  a  class  for  executors constructed from deterministic finiteautomatons (DFA).
       Executors are objects which are  given  a  string  of  symbols  in  a  piecemal  fashion,  perform  state
       transitions and report back when they enter a final state, or find an error in the input.  For the actual
       creation of the DFAs the executors are based on we have the packages grammar::fa and grammar::fa::op.

       The  objects  follow  a  push  model.  Symbols are pushed into the executor, and when something important
       happens, i.e. error occurs, a state transition, or a final state is entered this will be reported via the
       callback specified via the option -command. Note that conversion of this into  a  pull  model  where  the
       environment  retrieves messages from the object and the object uses a callback to ask for more symbols is
       a trivial thing.

       Sidenote: The acceptor objects provided by grammar::fa::dacceptor could have been implemented on top  of
       the  executors  provided  here,  but were not, to get a bit more performance (we avoid a number of method
       calls and the time required for their dispatch).

Examples

Executor Callback

       The  callback  command  cmdprefix  given  to  an executor via the option -command will be executed by the
       object at the global level, using the syntax described below. Note that cmdprefix is not simply the  name
       of  a  command,  but a full command prefix. In other words it may contain additional fixed argument words
       beyond the command word.

       cmdprefixerrorcodemessage
              The executor has encountered an error, and message contains a human-readable text  explaining  the
              nature  of  the  problem.   The  code  on  the  other  hand is a fixed machine-readable text.  The
              following error codes can be generated by executor objects.

              BADSYM An unknown symbol was found in the input. This can happen if and only if no -any symbol was
                     specified.

              BADTRANS
                     The underlying FA has no transition for the current combination of input symbol and  state.
                     In other words, the executor was not able to compute a new state for this combination.

       cmdprefixfinalstateid
              The executor has entered the final state stateid.

       cmdprefixreset
              The executor was reset.

       cmdprefixstatestateid
              The FA changed state due to a transition. stateid is the new state.

Executor Methods

       All executors provide the following methods for their manipulation:

       daNamedestroy
              Destroys the automaton, including its storage space and associated command.

       daNameputsymbol
              Takes the current state of the  executor  and  the  symbol  and  performs  the  appropriate  state
              transition.  Reports  any errors encountered via the command callback, as well as entering a final
              state of the underlying FA.

              When an error is reported all further  invokations  of  put  will  do  nothing,  until  the  error
              condition has been cleared via an invokation of method reset.

       daNamereset
              Unconditionally  sets the executor into the start state of the underlying FA. This also clears any
              error condition  put may have encountered.

       daNamestate
              Returns the current state of the underlying FA. This allow for introspection without the  need  to
              pass data from the callback command.

Keywords

       automaton,  execution,  finite  automaton, grammar, parsing, regular expression, regular grammar, regular
       languages, running, state, transducer

Name

       grammar::fa::dexec - Execute deterministic finite automatons

Synopsis

       package require Tcl8.59

       package require snit

       package require grammar::fa::dexec?0.3?::grammar::fa::dexecdaNamefa ?-anyany? ?-commandcmdprefix?

       daNameoption ?argarg...?

       daNamedestroydaNameputsymboldaNameresetdaNamestatecmdprefixerrorcodemessagecmdprefixfinalstateidcmdprefixresetcmdprefixstatestateid

________________________________________________________________________________________________________________

See Also