Next, a walker is applied to the parse tree to extract any raw scoring nodes. A walker is different from a copier as the walker will operate directly on the nodes in the parse tree, as opposed to a copier which returns a new copy of the parse tree with the modified nodes.
As the walker goes through the root node (type CombineNode) - since this is not a node with any scoring information, it will not get pushed into the list of score-able nodes in the walker, so it just moves on to its first child node.
The next node is a ScoredExtentNode type that has an IndexTerm as it's only child. Since this node is subclassed from indri::lang::RawScorerNode, it gets flagged and pushed into the vector of reachable nodes.
For the IndexTerm, since the _insideCount of the walker is now greater than one, the IndexTerm node will also be pushed into the vector of reachable nodes via the RawScorerNodeExtractor's defaultBefore method.
What we are left with after the walk is a vector of "reachable" scoring nodes, consisting of the following:
Raw Scoring Node (indri::lang::RawScorerNode) Raw Scoring Node (indri::lang::RawScorerNode) \ Index Term ("dog" indri::lang::IndexTerm)
Next: [Gathering Statistics]
Wiki: Extent Restriction
Wiki: Gathering Statistics
Wiki: Indri Query Flow