Returns a string from the Diff resutl.
        Depending on the method, either the string will
        be generated directly from the PDA using the state
        removal method, or the PDA will be first translated to
        a CFG and then a string will be generated from the CFG
        Args:
             None
        Returns:
            A string from the Diff

def get_string(self):
        """
        Returns a string from the Diff resutl.
        Depending on the method, either the string will
        be generated directly from the PDA using the state
        removal method, or the PDA will be first translated to
        a CFG and then a string will be generated from the CFG
        Args:
             None
        Returns:
            A string from the Diff
        """
        return_string = None
        if not self.mmc:
            return ""
        method = 'PDASTRING'
        if method == 'PDASTRING':
            stringgen = PdaString()
            print '* Reduce PDA using DFA BFS (remove unreachable states):'
            newpda = self.mmc.s
            handle = IntersectionHandling()
            newpda = handle.get(newpda, self.mmc.accepted)
            reduce_b = ReducePDA()
            newpda = reduce_b.get(newpda)
            #simply = SimplifyStateIDs()
            #newpda, biggestid, newaccepted = simply.get(
            #    newpda, self.mmc.accepted)
            print "- Total PDA states after reduction are " + repr(len(newpda))
            return_string = stringgen.init(newpda, self.mmc.accepted)
            if return_string is not None:
                return_string = return_string[0]
        elif method == 'PDACFGSTRING':

            optimized = 1
            dt1 = datetime.datetime.fromtimestamp(time.time())
            print '* Initiating PDA simplification'
            print ' - Total PDA states are ' + repr(len(self.mmc.s))
            handle = IntersectionHandling()
            newpda = handle.get(self.mmc.s, self.mmc.accepted)
            newpda = self.mmc.s
            simply = SimplifyStateIDs()
            newpda, biggestid, newaccepted = simply.get(
                newpda, self.mmc.accepted)
            print ' - Total PDA states after id clearence are ' + repr(len(newpda))
            replace = ReadReplace(newpda, biggestid)
            newpda = replace.replace_read()
            print ' - Total PDA states after read elimination are ' + repr(len(newpda))
            maxstate = replace.nextstate() - 1
            print '* Reduce PDA using DFA BFS (remove unreachable states):'
            reduce_b = ReducePDA()
            newpda = reduce_b.get(newpda)
            print "- Total PDA states after reduction are " + repr(len(newpda))

            dt2 = datetime.datetime.fromtimestamp(time.time())
            rdelta = dateutil.relativedelta.relativedelta(dt2, dt1)
            print "* PDA was simplyfied in %d days, %d hours, %d minutes and %d seconds" % (
                rdelta.days, rdelta.hours, rdelta.minutes, rdelta.seconds)
            dt1 = datetime.datetime.fromtimestamp(time.time())
            print '* Initiating CNF from PDA generation'
            cnfgenerator = PdaCnf(newpda, newaccepted)
            dt2 = datetime.datetime.fromtimestamp(time.time())
            rdelta = dateutil.relativedelta.relativedelta(dt2, dt1)
            print "* CNF was generated in %d days, %d hours, %d minutes and %d seconds" % (
                rdelta.days, rdelta.hours, rdelta.minutes, rdelta.seconds)
            dt1 = datetime.datetime.fromtimestamp(time.time())
            print '* Initiating string from CFG generation'
            grammar = cnfgenerator.get_rules(optimized)
            print ' - Total grammar rules are ' + repr(len(grammar))
            gen = CFGGenerator(CNFGenerator(grammar),
                               optimized=optimized,
                               splitstring=0,
                               maxstate=maxstate)
            return_string = gen.generate()
            dt2 = datetime.datetime.fromtimestamp(time.time())
            rdelta = dateutil.relativedelta.relativedelta(dt2, dt1)
            print "* A string was generated in %d days, %d hours, %d minutes and %d seconds" % (
                rdelta.days, rdelta.hours, rdelta.minutes, rdelta.seconds)

            print return_string
        else:
            return_string = None
        return return_string