LVParseTree_CreateIteratorBegin
and
LVParseTree_CreateIteratorEnd

LVParseTree_CreateIteratorBegin and LVParseTree_CreateIteratorEnd provide iterators for visiting every node in the tree in a top-to-bottom, left-to-right descent.   It is also the basis for the Tag and Terminal iterators.

Functions

H_PARSE_TREE_ITR LVParseTree_CreateIteratorBegin(H_PARSE_TREE Tree)

H_PARSE_TREE_ITR LVParseTree_CreateIteratorEnd(H_PARSE_TREE Tree)

Parameters

Tree

Handle to a parse tree.

Example

The following code prints out every node in a parse tree.

H_PARSE_TREE_ITR Itr;
H_PARSE_TREE_ITR End;
H_PARSE_TREE_NODE Node;

 

Itr = LVParseTree_CreateIteratorBegin(Tree);
End = LVParseTree_CreateIteratorEnd(Tree);

while (!LVParseTree_Iterator_AreEqual(Itr,End))
{
     H_PARSE_TREE_NODE Node = LVParseTree_Iterator_GetNode(Itr);
     for (int i = 0; i < LVParseTree_Node_GetLevel(Node); ++i) printf("\t");
     if (LVParseTree_Node_IsRule(Node))
          printf("$%s:\n",LV_ParseTree_Node_GetRuleName(Node));
     if (LVParseTree_Node_IsTag(Node))
          printf("{%s}\n",LVParseTree_Node_GetText(Node));
     if (LVParseTree_Node_IsTerminal(Node))
          printf("\"%s\"\n",LVParseTree_Node_GetText(Node));
     LVParseTree_Iterator_Advance(Itr);
}

LVParseTree_Iterator_Release(Itr);
LVParseTree_Iterator_Release(End);

/* Note: Node handles don't get released; They are part of the tree,
   and the tree releases them when it gets released */

If the grammar was the top level navigation example grammar, and the engine recognized "go back", the the above code would print out:

$directive:
     "go"
     "back"
     {$ = "APPLICATION_BACK"}

See Also


Complete Help Topic List | Speech Engine Product Information