def visitShapeDefinition(self, ctx: ShExDocParser.ShapeDefinitionContext):
        """ shapeDefinition: qualifier* '{' oneOfShape? '}' annotation* semanticActions """
        if ctx.qualifier():
            for q in ctx.qualifier():
                self.visit(q)
        if ctx.oneOfShape():
            oneof_parser = ShexOneOfShapeParser(self.context)
            oneof_parser.visit(ctx.oneOfShape())
            self.shape.expression = oneof_parser.expression
        if ctx.annotation() or ctx.semanticActions():
            ansem_parser = ShexAnnotationAndSemactsParser(self.context)
            for annot in ctx.annotation():
                ansem_parser.visit(annot)
            ansem_parser.visit(ctx.semanticActions())
            if ansem_parser.semacts:
                self.shape.semActs = ansem_parser.semacts
            if ansem_parser.annotations:
                self.shape.annotations = ansem_parser.annotations