コード例 #1
0
ファイル: gramatica.py プロジェクト: rdonate/MiniCalc
    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)
コード例 #2
0
ファイル: gramatica.py プロジェクト: rdonate/MiniCalc
    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)
コード例 #3
0
ファイル: gramatica.py プロジェクト: rdonate/MiniCalc
    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)
コード例 #4
0
ファイル: gramatica.py プロジェクト: rdonate/MiniCalc
    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)
コード例 #5
0
ファイル: gramatica.py プロジェクト: rdonate/MiniCalc
    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)
コード例 #6
0
ファイル: gramatica.py プロジェクト: rdonate/MiniCalc
 def __str__(self):
     return prettyCat(self.nombre)