ShExC: literalRange: literal (STEM_MARK literalExclusion*)? 
            ShExJ: valueSetValue: objectValue | LiteralStem | LiteralStemRange
                   literalStem: {stem:STRING}
                   literalStemRange: {stem:STRING exclusions:[STRING|LiteralStem+]?

def visitLiteralRange(self, ctx: ShExDocParser.LiteralRangeContext):
        """ ShExC: literalRange: literal (STEM_MARK literalExclusion*)? 
            ShExJ: valueSetValue: objectValue | LiteralStem | LiteralStemRange
                   literalStem: {stem:STRING}
                   literalStemRange: {stem:STRING exclusions:[STRING|LiteralStem+]?
        """
        baseliteral = self.context.literal_to_ObjectLiteral(ctx.literal())
        if not ctx.STEM_MARK():
            vsvalue = baseliteral               # valueSetValue = objectValue / objectValue = ObjectLiteral
        else:
            if ctx.literalExclusion():          # valueSetValue = LiteralStemRange /
                vsvalue = LiteralStemRange(baseliteral.value.val, exclusions=[])
                self._literal_exclusions(vsvalue, ctx.literalExclusion())
            else:
                vsvalue = LiteralStem(baseliteral.value)
        self.nodeconstraint.values.append(vsvalue)