bintree : BINTREE startbintree STRING vertobj bintreeoptlist SEMICOLON
        | BINTREE startbintree STRING vertobj LEFT_PAREN STRING bintreerand RIGHT_PAREN bintreeoptlist SEMICOLON
        | BINTREE startbintree STRING vertobj LEFT_PAREN STRING bintreerand COMMA STRING bintreerand2 RIGHT_PAREN bintreeoptlist SEMICOLON
        ;
g: bintree Vertex
g: bintree Vertex(MyRand)
g: bintree Vertex(MyParentRand,MyLeafRand)

options:
;
childprob(3);
childprob(1,3);
left(MyLeft);
right(MyRight);
parent(MyParent);
root(MyRoot);
childprob(3) left(MyLeft) right(MyRight) parent(MyParent) root(MyRoot);
childprob(1,3) left(MyLeft) right(MyRight) parent(MyParent) root(MyRoot);

statements:
g: bintree Vertex ;
g: bintree Vertex(MyRand) ;
g: bintree Vertex(MyParentRand,MyLeafRand) ;
g: bintree Vertex childprob(3);
g: bintree Vertex(MyRand) childprob(3);
g: bintree Vertex(MyParentRand,MyLeafRand) childprob(3);
g: bintree Vertex childprob(1,3);
g: bintree Vertex(MyRand) childprob(1,3);
g: bintree Vertex(MyParentRand,MyLeafRand) childprob(1,3);
g: bintree Vertex left(MyLeft);
g: bintree Vertex(MyRand) left(MyLeft);
g: bintree Vertex(MyParentRand,MyLeafRand) left(MyLeft);
g: bintree Vertex right(MyRight);
g: bintree Vertex(MyRand) right(MyRight);
g: bintree Vertex(MyParentRand,MyLeafRand) right(MyRight);
g: bintree Vertex parent(MyParent);
g: bintree Vertex(MyRand) parent(MyParent);
g: bintree Vertex(MyParentRand,MyLeafRand) parent(MyParent);
g: bintree Vertex root(MyRoot);
g: bintree Vertex(MyRand) root(MyRoot);
g: bintree Vertex(MyParentRand,MyLeafRand) root(MyRoot);
g: bintree Vertex childprob(3) left(MyLeft) right(MyRight) parent(MyParent) root(MyRoot);
g: bintree Vertex(MyRand) childprob(3) left(MyLeft) right(MyRight) parent(MyParent) root(MyRoot);
g: bintree Vertex(MyParentRand,MyLeafRand) childprob(3) left(MyLeft) right(MyRight) parent(MyParent) root(MyRoot);
g: bintree Vertex childprob(1,3) left(MyLeft) right(MyRight) parent(MyParent) root(MyRoot);
g: bintree Vertex(MyRand) childprob(1,3) left(MyLeft) right(MyRight) parent(MyParent) root(MyRoot);
g: bintree Vertex(MyParentRand,MyLeafRand) childprob(1,3) left(MyLeft) right(MyRight) parent(MyParent) root(MyRoot);

searchtree : SEARCHTREE startbintree LEFT_PAREN STRING savevertsel COMMA STRING savevaluesel RIGHT_PAREN STRING vertobj bintreeoptlist SEMICOLON
           | SEARCHTREE startbintree  LEFT_PAREN STRING savevertsel COMMA STRING savevaluesel RIGHT_PAREN STRING
             vertobj LEFT_PAREN STRING bintreerand RIGHT_PAREN bintreeoptlist SEMICOLON
           ;

g: searchtree(%{vc},%{val}) Vertex
g: searchtree(%{vc},%{val}) Vertex(MyRand)
options:
;
left(MyLeft);
right(MyRight);
parent(MyParent);
root(MyRoot);
value(MyValue);
left(MyLeft) right(MyRight) parent(MyParent) root(MyRoot) value(MyValue);


statements:
g: searchtree(%{vc},%{val}) Vertex ;
g: searchtree(%{vc},%{val}) Vertex(MyRand) ;
g: searchtree(%{vc},%{val}) Vertex left(MyLeft);
g: searchtree(%{vc},%{val}) Vertex(MyRand) left(MyLeft);
g: searchtree(%{vc},%{val}) Vertex right(MyRight);
g: searchtree(%{vc},%{val}) Vertex(MyRand) right(MyRight);
g: searchtree(%{vc},%{val}) Vertex parent(MyParent);
g: searchtree(%{vc},%{val}) Vertex(MyRand) parent(MyParent);
g: searchtree(%{vc},%{val}) Vertex root(MyRoot);
g: searchtree(%{vc},%{val}) Vertex(MyRand) root(MyRoot);
g: searchtree(%{vc},%{val}) Vertex value(MyValue);
g: searchtree(%{vc},%{val}) Vertex(MyRand) value(MyValue);
g: searchtree(%{vc},%{val}) Vertex left(MyLeft) right(MyRight) parent(MyParent) root(MyRoot) value(MyValue);
g: searchtree(%{vc},%{val}) Vertex(MyRand) left(MyLeft) right(MyRight) parent(MyParent) root(MyRoot) value(MyValue);

rbtree : RBTREE startbintree LEFT_PAREN STRING savevertsel COMMA STRING savevaluesel RIGHT_PAREN STRING vertobj bintreeoptlist SEMICOLON
           | RBTREE startbintree  LEFT_PAREN STRING savevertsel COMMA STRING savevaluesel RIGHT_PAREN STRING
             vertobj LEFT_PAREN STRING bintreerand RIGHT_PAREN bintreeoptlist SEMICOLON
           ;
g: rbtree(%{vc},%{val}) Vertex
g: rbtree(%{vc},%{val}) Vertex(MyRand)
options:
;
left(MyLeft);
right(MyRight);
parent(MyParent);
root(MyRoot);
value(MyValue);
color(MyColor);
red(MyRed);
black(MyBlack);
left(MyLeft) right(MyRight) parent(MyParent) root(MyRoot) value(MyValue) color(MyColor) red(MyRed) black(MyBlack);


statements:
g: rbtree(%{vc},%{val}) Vertex ;
g: rbtree(%{vc},%{val}) Vertex(MyRand) ;
g: rbtree(%{vc},%{val}) Vertex left(MyLeft);
g: rbtree(%{vc},%{val}) Vertex(MyRand) left(MyLeft);
g: rbtree(%{vc},%{val}) Vertex right(MyRight);
g: rbtree(%{vc},%{val}) Vertex(MyRand) right(MyRight);
g: rbtree(%{vc},%{val}) Vertex parent(MyParent);
g: rbtree(%{vc},%{val}) Vertex(MyRand) parent(MyParent);
g: rbtree(%{vc},%{val}) Vertex root(MyRoot);
g: rbtree(%{vc},%{val}) Vertex(MyRand) root(MyRoot);
g: rbtree(%{vc},%{val}) Vertex value(MyValue);
g: rbtree(%{vc},%{val}) Vertex(MyRand) value(MyValue);
g: rbtree(%{vc},%{val}) Vertex color(MyColor);
g: rbtree(%{vc},%{val}) Vertex(MyRand) color(MyColor);
g: rbtree(%{vc},%{val}) Vertex red(MyRed);
g: rbtree(%{vc},%{val}) Vertex(MyRand) red(MyRed);
g: rbtree(%{vc},%{val}) Vertex black(MyBlack);
g: rbtree(%{vc},%{val}) Vertex(MyRand) black(MyBlack);
g: rbtree(%{vc},%{val}) Vertex left(MyLeft) right(MyRight) parent(MyParent) root(MyRoot) value(MyValue) color(MyColor) red(MyRed) black(MyBlack);
g: rbtree(%{vc},%{val}) Vertex(MyRand) left(MyLeft) right(MyRight) parent(MyParent) root(MyRoot) value(MyValue) color(MyColor) red(MyRed) black(MyBlack);

