def visitComparisonExpression(self, ctx):
        """
        expression: expression (LTE | LT | GTE | GT) expression
        """
        arg1, arg2 = conversions.to_same(self.visit(ctx.expression(0)), self.visit(ctx.expression(1)), self._eval_context)

        if isinstance(arg1, str):
            # string comparison is case-insensitive
            compared = (arg1.lower() > arg2.lower()) - (arg1.lower() < arg2.lower())
        else:
            compared = (arg1 > arg2) - (arg1 < arg2)

        if ctx.LTE() is not None:
            return compared <= 0
        elif ctx.LT() is not None:
            return compared < 0
        elif ctx.GTE() is not None:
            return compared >= 0
        else:  # GT
            return compared > 0