def comprueba_conflictos(self, siguientes, salida): if self.pd.anulable() and len(self.pd.primeros())== 0: if len(siguientes)== 1: salida.write(( u"""Aviso: hay un conflicto en la clausura de la línea %d %s con el símbolo %s. No se entrará en la clausura.\n""" % (self.nl, self.regla(), prettyCat(siguientes[0]))).encode("utf-8")) else: salida.write(( u"""Aviso: hay un conflicto en la clausura de la línea %d %s con los símbolos {%s}. No se entrará en la clausura.\n""" % (self.nl, self.regla(), ", ".join([prettyCat(s) for s in siguientes]))).encode("utf-8")) l= [ prettyCat(t) for t in self.primeros() if t in siguientes] if l: if len(l)== 1: salida.write(( u"""Aviso: hay un conflicto en la clausura de la línea %d: %s con el símbolo %s. En ese caso, desplazaré.\n""" % (self.nl, self.regla(), l[0])).encode("utf-8")) else: salida.write(( u"""Aviso: hay conflictos en la clausura de la línea %d: %s con los símbolos {%s}. En caso de encontrarlos, los desplazaré.\n""" % (self.nl, self.regla(), ", ".join(l))).encode("utf-8")) self.pd.comprueba_conflictos(siguientes|self.pd.primeros(), salida)
def comprueba_conflictos(self, siguientes, salida): if self.pd.anulable(): for t in siguientes: if not t in self.primeros(): salida.write(( u"""Aviso: hay un conflicto en la parte opcional de la línea %d: %s con el símbolo %s. En ese caso, no entraré.\n""" % (self.nl, self.regla(), prettyCat(t))).encode("utf-8")) for t in self.primeros(): if t in siguientes: salida.write(( u"""Aviso: hay un conflicto en la parte opcional de la línea %d: %s con el símbolo %s. En ese caso, desplazaré.\n""" % (self.nl, self.regla(), prettyCat(t))).encode("utf-8")) self.pd.comprueba_conflictos(siguientes, salida)
def comprueba_conflictos(self, siguientes, salida): for t in self.primeros(): if t in siguientes: salida.write(( u"""Aviso: hay un conflicto en la clausura positiva de la línea %d: %s con el símbolo %s. En ese caso, desplazaré.\n""" % (self.nl, self.regla(), prettyCat(t))).encode("utf-8")) self.pd.comprueba_conflictos(siguientes|self.pd.primeros(), salida)
def comprueba_conflictos_globales(self, salida): vistos={} for r in self.reglasizda: aceptables= r.dcha.primeros() if r.dcha.anulable(): aceptables= aceptables|self.missiguientes for t in aceptables: if vistos.has_key(t): salida.write(( u"""Aviso: hay un conflicto entre las reglas de la línea %d: %s y la de la línea %d %s al ver el símbolo %s. Se tomará la primera.\n""" % (vistos[t].nl, vistos[t].regla(), r.nl, r.regla(), prettyCat(t))).encode("utf-8")) else: vistos[t]= r r.dcha.comprueba_conflictos(self.missiguientes, salida)
def comprueba_conflictos(self, siguientes, salida): vistos={} for r in self.l: aceptables= r.primeros() if r.anulable(): aceptables= aceptables|siguientes for t in aceptables: if vistos.has_key(t): salida.write(( u"""Aviso: hay un conflicto entre las opciones: %s y %s de la disyunción de la línea %d: %s con el símbolo %s. Se tomará la primera.\n""" % (vistos[t].regla(), r.regla(), self.nl, self.regla(), prettyCat(t))).encode("utf-8")) else: vistos[t]= r r.comprueba_conflictos(siguientes, salida)
def __str__(self): return prettyCat(self.nombre)