Interface Axe

All Known Implementing Classes:
PriorityAxe, RandomAxe, SequentialAxe

public interface Axe
An axe is a tool an Arborist might use to extract trees from a forest.
  • Method Details

    • isSpecialist

      boolean isSpecialist()
      Is this a specialist axe?

      A specialist axe can consider every tree in the forest differently every time it is used. A non-specialist axe considers every tree at most once and returns all the trees that are selected.

      Returns:
      true if the axe is specialist
    • select

      List<Family> select(ParseTree tree, ForestNode forestNode, int count, List<Family> choices)
      Select a branch from a list of branches.

      In an ambiguous forest, some nodes will have more than one possible choice. In any given tree, only one choice may be selected. This function is called to make the selection.

      There will always be at least one element in the choices list when the method is called. The method must return at least one.

      The first node in the list returned is the choice selected for the tree currently under construction. If only one choice is returned, the node becomes unambiguous on subsequent parses, the same selection will always be used. If additional choices are returned, they will be considered on subsequent parses. Note that if you want the selected choice to be considered on future parses, it must appear in the list twice. It is the only node that may appear twice.

      Parameters:
      tree - the parent node in the parse tree
      forestNode - the forest node
      count - the number of times node has occurred in this parse
      choices - the possible paths
      Returns:
      the acceptable paths
      Throws:
      NullPointerException - if null is returned
      TreeWalkerException - if an invalid choice is made
    • wasAmbiguousSelection

      boolean wasAmbiguousSelection()
      Was the previous selection ambiguous?

      This method asks if the previous selection was ambiguous. If the axe ever indicates that an ambiguous selection was made, the resulting parse is considered ambiguous. For example, the SequentialAxe always returns true because it treats all choices as equivalent. The PriorityAxe only considers a selection ambiguous if there wasn't a uniquely highest priority selection.

      Returns:
      true if the choice made was random
    • forArborist

      void forArborist(Arborist arborist)
      Who's using this axe?

      Do not pass the same axe to more than one Arborist.

      Parameters:
      arborist - the Arborist using this axe.