Class TreeNode
Once constructed, a node's 'parent' and 'previous' references are immutable.
The list of children nodes however can change. When the alternative parsers
in an or
parser are attempted one after another, they each generate new child node of
the parent node. These "alternative" nodes all point to the same parent and same "previous" node.
When exception is to be thrown, the most relevant error is picked, along with the tree node
that was recorded at time of ParseContext.raise(org.jparsec.ParseContext.ErrorType, java.lang.Object)
. That tree node is then
frozen
by setting its parent's latestChild
to this error
node's "previous" successful node, and that of its grandparent's to its parent node, all the way
up to the root. This essentially freezes and collapse the "multi universes" into a single error
state, with all other "potential" error state destroyed and forgotten.
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription(package private) TreeNode
(package private) TreeNode
freeze
(int index) Freezes the current tree node to make it the latest child of its parent (discarding nodes that have been tacked on after it in the same hierarchy level); and recursively apply to all of its ancestors.(package private) TreeNode
When this leaf node has errors, it didn't complete and shouldn't be part of the parse tree that is the current partial parse result with all successful matches.(package private) TreeNode
parent()
(package private) void
setEndIndex
(int index) (package private) void
(package private) ParseTree
Converts this node into aParseTree
representation.toString()
-
Field Details
-
name
-
beginIndex
private final int beginIndex -
parent
-
previous
-
endIndex
private int endIndex -
result
-
latestChild
TreeNode latestChild
-
-
Constructor Details
-
TreeNode
TreeNode(String name, int beginIndex) -
TreeNode
-
-
Method Details
-
setEndIndex
void setEndIndex(int index) -
setResult
-
parent
TreeNode parent() -
addChild
-
orphanize
TreeNode orphanize()When this leaf node has errors, it didn't complete and shouldn't be part of the parse tree that is the current partial parse result with all successful matches. In that case, return the parent node, by setting itslatestChild
toprevious
. -
freeze
Freezes the current tree node to make it the latest child of its parent (discarding nodes that have been tacked on after it in the same hierarchy level); and recursively apply to all of its ancestors.This is because it's only called at time of error. If an ancestor node has a child node that was added during the process of trying other alternatives and then failed, those paths don't matter. So we should restore the tree back to when this most relevant error happened.
Returns the root node, which can then be used to
toParseTree()
. -
toParseTree
ParseTree toParseTree()Converts this node into aParseTree
representation. -
toString
-