private boolean validate(CROM left, CROM right, int pos) throws Exception {
if(isAllGroup(parent0)||parent0.isSubstitutionGroupHead())return true;
if(right==left && left.isLoopNode())return true;
CROM leftParent=left.getParent();
if(leftParent.isOneOfNode()){
if(leftParent.isLoopNode()){
if(right.getParent()==leftParent)return true;
}
}
int left_pos=cromToIndex_map.get(left), right_pos=cromToIndex_map.get(right);
boolean forward=left_pos < right_pos;
if(forward){
for(int i=left_pos+1; i<right_pos; ++i){
CROM next=cromChildSequence[i];
if(next.isOptionalNode())continue;
if(next.isOptionalValueElement())continue;
if(next.isCollectionNode())continue;
CROM optionalParent=getOptionalParent(left, next, right);
if(optionalParent==null)return false;
i=skipToLastSiblingPosition(optionalParent, next);
}
return true;
}