Provided by: libmarpa-r2-perl_2.086000~dfsg-5build1_amd64 bug

NAME

       Marpa::R2::NAIF::Semantics::Phases - Details of NAIF parse evaluation

Overview of the semantic phases

       This document deals with Marpa's low-level NAIF interface.  If you are new to Marpa, or
       are not sure which interface you are interested in, or do not know what the Named Argment
       InterFace (NAIF) is, you probably want to look instead at the document on semantics for
       the SLIF interface.

       Most applications will find that the order in which Marpa's NAIF executes its semantics
       "just works".  This document describes that order in detail.  These details can matter in
       some applications, for example, those which exploit side effects.  And some readers may
       also find this background material to be helpful.

       An advanced document, this is written on the assumption that the more low-level NAIF
       interface is in use.  The SLIF uses the same code as the NAIF for evaluation and works in
       the same way, except that it hides even more of these details from the user.

Parse trees, parse results and parse series

       As a reminder, when the semantics are applied to a parse tree, they produce a value called
       a parse result.  Because Marpa allows ambiguous parsing, each parse can produce a parse
       series -- a series of zero or more parse trees, each with its own parse result.  The first
       call to the the recognizer's "value" method after the recognizer is created is the start
       of the first parse series.  The first parse series continues until there is a call to the
       the "reset_evaluation" method or until the recognizer is destroyed.  Usually, an
       application is only interested in a single parse series.

       When the "reset_evaluation" method is called for a recognizer, it begins a new parse
       series.  The new parse series continues until there is another call to the the
       "reset_evaluation" method, or until the recognizer is destroyed.

Summary of the phases

       While processing a parse series, we have:

       •   A Series Setup Phase, which occurs during the first call of the recognizer's "value"
           method for that series.  It is followed by

       •   the processing of zero or more parse trees.

       While processing a parse tree, we have:

       •   A Tree Setup Phase, which occurs during the call of the recognizer's "value" method
           for that parse tree.  It is followed by

       •   a Tree Traveral Phase.

       Node Evaluation Time is the Tree Traversal Phase, as seen from the point of view of each
       rule node.  It is not a separate phase.

Series Setup Phase

       During the Series Setup Phase all value action names are resolved to value actions --
       constants or rule evaluation closures.  The rule evaluation closures are never called in
       the Series Setup Phase.  They will be called later, in the Tree Traversal Phase.  Also,
       during the Series Setup Phase, the logic which ranks parse trees is executed.

Tree Setup Phase

       In the Tree Setup Phase, the per-parse-tree variable is created.  If a constructor was
       found for the "action_object", it is run at this point, and the per-parse-tree variable is
       its return value.  Exactly one Tree Setup Phase occurs for each parse tree.

Tree Traversal Phase

       During the Tree Traversal Phase, the rule evaluation closures are called.  Node Evaluation
       Time is the Tree Traversal Phase, as seen from the point of view of the individual nodes
       of the parse tree.

Copyright and License

         Copyright 2014 Jeffrey Kegler
         This file is part of Marpa::R2.  Marpa::R2 is free software: you can
         redistribute it and/or modify it under the terms of the GNU Lesser
         General Public License as published by the Free Software Foundation,
         either version 3 of the License, or (at your option) any later version.

         Marpa::R2 is distributed in the hope that it will be useful,
         but WITHOUT ANY WARRANTY; without even the implied warranty of
         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
         Lesser General Public License for more details.

         You should have received a copy of the GNU Lesser
         General Public License along with Marpa::R2.  If not, see
         http://www.gnu.org/licenses/.