self.flujo.devuelve(l) return componentes.real(l) else: self.flujo.devuelve(l) raise errores.ErrorLexico("Cadena no terminada.") def muestraError(self, f): cad = self.flujo.cadena() if cad[-1] == "\n": cad = cad[:-1] f.write("%s\n%s%s\n" % (cad, " " * self.poserror, "^" * (self.flujo.posleida() - self.poserror + 1))) if __name__ == "__main__": linea = sys.stdin.readline() while linea: fl = flujo.Flujo(linea) lexico = Lexico(fl) while 1: try: c = lexico.siguiente() print c if c.cat == "eof": break except errores.Error, err: sys.stderr.write("%s\n" % err) lexico.muestraError(sys.stderr) linea = sys.stdin.readline()
elif ch== "\n": #incrementa el numero de linea ya que acabamos de saltar a otra # devolver el siguiente componente encontrado ############################################################################ # # Funcion: __main__ # Tarea: Programa principal de prueba del analizador lexico # Prametros: -- # Devuelve: -- # ############################################################################ if __name__=="__main__": script, filename=argv txt=open(filename) print "Este es tu fichero %r" % filename i=0 fl = flujo.Flujo(txt) analex=Analex(fl) try: c=analex.Analiza() while c : print c c=analex.Analiza() i=i+1 except errores.Error, err: sys.stderr.write("%s\n" % err) analex.muestraError(sys.stderr)
self.componente = self.lexico.siguiente() componente = self.analizaExpresion() arbol = arboles.ValorAbsoluto(componente) if self.componente.cat != "barra": raise ErrorSintactico("Aquí tocaba cerrar una barra.") self.componente = self.lexico.siguiente() return arbol elif self.componente.cat == "opad": operacion = self.componente self.componente = self.lexico.siguiente() componente = self.analizaFactor() arbol = arboles.CambioSigno(operacion.operacion, componente) return arbol else: raise ErrorSintactico("La verdad, no sé qué hacer con esto.") if __name__ == "__main__": l = sys.stdin.readline() while l: f = flujo.Flujo(l) lex = lexico.Lexico(f) S = Sintactico(lex) try: arbol = S.analizaLinea() print arbol.evalua() except Error, err: sys.stderr.write("%s\n" % err) if err.__class__.__name__ in ["ErrorLexico", "ErrorSintactico"]: lex.muestraError(sys.stderr) l = sys.stdin.readline()