// Recurse on both children, and return a binary op node
// with the two created sub nodes as its children. The node
// type is the same type as the source.
//
nodeRet = new CMBinOp
(
specNode.type
, buildSyntaxTree(leftNode, specNode)
, buildSyntaxTree(rightNode, specNode)
);
}
else if (specNode.type == XMLContentSpecNode.CONTENTSPECNODE_ZERO_OR_MORE)
{
nodeRet = new CMUniOp
(
specNode.type
, buildSyntaxTree(leftNode, specNode)
);
}
else if (specNode.type == XMLContentSpecNode.CONTENTSPECNODE_ZERO_OR_ONE)
{
// Convert to (x|epsilon)
nodeRet = new CMBinOp
(
XMLContentSpecNode.CONTENTSPECNODE_CHOICE
, buildSyntaxTree(leftNode, specNode)
, new CMLeaf(XMLContentSpecNode.CONTENTSPECNODE_LEAF, fEpsilonIndex)
);
}
else if (specNode.type == XMLContentSpecNode.CONTENTSPECNODE_ONE_OR_MORE)
{
// Convert to (x,x*)
nodeRet = new CMBinOp
(
XMLContentSpecNode.CONTENTSPECNODE_SEQ
, buildSyntaxTree(leftNode, specNode)
, new CMUniOp
(