else if ("**".equals(head)) return Repeat.maximal0((Element)walk(tree.child(0)));
else if ("++".equals(head)) return Repeat.maximal1((Element)walk(tree.child(0)));
else if ("?".equals(head)) return Repeat.maybe((Element)walk(tree.child(0)));
+ else if ("!".equals(head)) return walk(tree.child(0));
else if ("&".equals(head))
return ((Sequence)walk(tree,0)).and(new PreSequence((Element[])Reflection.lub((Object[])walk(tree, 1)), null).buildSequence(null, true, false));
else if ("&~".equals(head))