def _parse_join(self, tokens):
        """ Parses a join.
         Join ::= 'join' '(' SuperRange [',' SuperRange] ')'
        """
        children = []
        tokens.pop(0)  # Pop 'join'
        tokens.pop(0)  # Pop '('
        children.append(self._parse_nested_interval(tokens))
        while tokens[0] == ',':
            tokens.pop(0)
            children.append(self._parse_nested_interval(tokens))
        tokens.pop(0)  # Pop ')'

        chromosome, strand = next((child.chromosome, child.strand) for child in children)
        start = min(child.start.position for child in children)
        stop = max(child.stop.position for child in children)
        parent = NestedGenomicInterval(start, stop, chromosome=chromosome, strand=strand)
        parent.children = children
        return parent