Example #1
0
 def __init__(self,
              programa_compilado,
              mundo=None,
              limite_recursion=6500,
              limite_iteracion=6500):
     """ Inicializa el ejecutor dados un codigo fuente compilado y un
     mundo, tambien establece el limite para la recursion sobre una
     funcion antes de botar un error stack_overflow."""
     self.arbol = programa_compilado
     if mundo:
         self.mundo = mundo
         #print mundo.mundo
     else:
         self.mundo = kworld()  #En la 1,1 orientado al norte
     self.corriendo = True
     self.sal_de_instruccion = False
     self.sal_de_bucle = False
     self.limite_recursion = limite_recursion
     self.limite_iteracion = limite_iteracion
     self.pila_funciones = deque()  #La pila de llamadas a funciones
     #Las anteriores cantidades limitan que tan hondo se puede llegar
     #mediante recursion, y que tanto puede iterar un bucle, esto para
     #evitar problemas al evaluar codigos en un servidor.
     self.profundidad = 0  #El punto inicial en la recursion
     self.estado = "Ok"  #El estado en que se encuentra
     self.mensaje = ""  #Mensaje con que termina la ejecucion
Example #2
0
    def __init__(self,
                 programa_compilado,
                 mundo=None,
                 limite_recursion=65000,
                 limite_iteracion=65000,
                 limite_ejecucion=200000,
                 debug=False):
        """ Inicializa el ejecutor dados un codigo fuente compilado y un
        mundo, tambien establece el limite para la recursion sobre una
        funcion antes de botar un error stack_overflow."""
        self.ejecutable = programa_compilado
        if mundo:
            self.mundo = mundo
        else:
            self.mundo = kworld()  #En la 1,1 orientado al norte
        self.corriendo = True
        self.indice = 0  #Marcador con la posición en la cinta de ejecución
        self.ejecucion = 0  #Contador del número de instrucciones que se han ejecutado
        self.diccionario_variables = dict()

        self.sal_de_instruccion = False
        self.sal_de_bucle = False
        self.limite_recursion = limite_recursion
        self.limite_iteracion = limite_iteracion
        self.limite_ejecucion = limite_ejecucion
        self.pila = kstack()  #La pila de funciones y bucles
        self.profundidad = 0
        #Las anteriores cantidades limitan que tan hondo se puede llegar
        #mediante recursion, y que tanto puede iterar un bucle, esto para
        #evitar problemas al evaluar codigos en un servidor.
        self.estado = "Ok"  #El estado en que se encuentra
        self.mensaje = ""  #Mensaje con que termina la ejecucion
        #Debug
        self.debug = debug
Example #3
0
    def __init__ (self, programa_compilado, mundo=None, limite_recursion=65000, limite_iteracion=65000, limite_ejecucion=200000, debug=False):
        """ Inicializa el ejecutor dados un codigo fuente compilado y un
        mundo, tambien establece el limite para la recursion sobre una
        funcion antes de botar un error stack_overflow."""
        self.ejecutable = programa_compilado
        if mundo:
            self.mundo = mundo
        else:
            self.mundo = kworld() #En la 1,1 orientado al norte
        self.corriendo = True
        self.indice = 0 #Marcador con la posición en la cinta de ejecución
        self.ejecucion = 0 #Contador del número de instrucciones que se han ejecutado
        self.diccionario_variables = dict()

        self.sal_de_instruccion = False
        self.sal_de_bucle = False
        self.limite_recursion = limite_recursion
        self.limite_iteracion = limite_iteracion
        self.limite_ejecucion = limite_ejecucion
        self.pila = kstack() #La pila de funciones y bucles
        self.profundidad = 0
        #Las anteriores cantidades limitan que tan hondo se puede llegar
        #mediante recursion, y que tanto puede iterar un bucle, esto para
        #evitar problemas al evaluar codigos en un servidor.
        self.estado = "Ok" #El estado en que se encuentra
        self.mensaje = "" #Mensaje con que termina la ejecucion
        #Debug
        self.debug = debug
Example #4
0
 def __init__ (self, programa_compilado, mundo=None, limite_recursion=6500, limite_iteracion=6500):
     """ Inicializa el ejecutor dados un codigo fuente compilado y un
     mundo, tambien establece el limite para la recursion sobre una
     funcion antes de botar un error stack_overflow."""
     self.arbol = programa_compilado
     if mundo:
         self.mundo = mundo
         #print mundo.mundo
     else:
         self.mundo = kworld() #En la 1,1 orientado al norte
     self.corriendo = True
     self.sal_de_instruccion = False
     self.sal_de_bucle = False
     self.limite_recursion = limite_recursion
     self.limite_iteracion = limite_iteracion
     self.pila_funciones = deque() #La pila de llamadas a funciones
     #Las anteriores cantidades limitan que tan hondo se puede llegar
     #mediante recursion, y que tanto puede iterar un bucle, esto para
     #evitar problemas al evaluar codigos en un servidor.
     self.profundidad = 0 #El punto inicial en la recursion
     self.estado = "Ok" #El estado en que se encuentra
     self.mensaje = "" #Mensaje con que termina la ejecucion
Example #5
0
    c_fin = 0
    if len(sys.argv) == 1:
        grammar = kgrammar(debug=deb, gen_arbol=True)
    else:
        fil = sys.argv[1]
        grammar = kgrammar(flujo=open(fil), archivo=fil, futuro=True)
    try:
        c_inicio = time()
        grammar.verificar_sintaxis(gen_arbol=True)
        c_fin = time()
        #grammar.guardar_compilado('codigo.kcmp', True)
        #pprint(grammar.arbol)
    except KarelException, ke:
        print ke.args[0], "en la línea", grammar.tokenizador.lineno
    else:
        mundo = kworld(mochila='inf')
        runner = krunner(grammar.arbol, mundo)

        inicio = time()
        runner.run()
        fin = time()

        pprint(runner.mundo.mundo)
        print runner.mensaje

    print "tiempo: ", int(
        (c_fin - c_inicio) * 1000), "milisegundos en compilar"
    print "tiempo: ", int((fin - inicio) * 1000), "milisegundos en ejecutar"
    print "total:", int((c_fin - c_inicio) * 1000) + int(
        (fin - inicio) * 1000), "milisegundos"
Example #6
0
    c_fin = 0
    if len(sys.argv) == 1:
        grammar = kgrammar(debug=deb, gen_arbol = True)
    else:
        fil = sys.argv[1]
        grammar = kgrammar(flujo=open(fil), archivo=fil, futuro=True)
    try:
        c_inicio = time()
        grammar.verificar_sintaxis(gen_arbol=True)
        c_fin = time()
        #grammar.guardar_compilado('codigo.kcmp', True)
        #pprint(grammar.arbol)
    except KarelException, ke:
        print ke.args[0], "en la línea", grammar.tokenizador.lineno
    else:
        mundo = kworld(mochila='inf')
        runner = krunner(grammar.arbol, mundo)

        inicio = time()
        runner.run()
        fin = time()

        pprint(runner.mundo.mundo)
        print runner.mensaje


    print "tiempo: ", int((c_fin-c_inicio)*1000), "milisegundos en compilar"
    print "tiempo: ", int((fin-inicio)*1000), "milisegundos en ejecutar"
    print "total:", int((c_fin-c_inicio)*1000) + int((fin-inicio)*1000), "milisegundos"

Example #7
0
    if len(sys.argv) == 1:
        grammar = kgrammar(debug=False)
    else:
        fil = sys.argv[1]
        grammar = kgrammar(flujo=open(fil), archivo=fil, futuro=True)
    try:
        c_inicio = time()
        grammar.verificar_sintaxis(gen_arbol=True)
        grammar.expandir_arbol()
        c_fin = time()
    except KarelException, ke:
        print ke.args[
            0], "en la línea", grammar.lexer.linea, 'columna', grammar.lexer.columna
    else:
        casillas_prueba = {(1, 1): {'zumbadores': 0, 'paredes': set()}}
        mundo = kworld(casillas=casillas_prueba, mochila='inf')
        runner = krunner(grammar.ejecutable, mundo)

        inicio = time()
        runner.run()
        fin = time()

        pprint(runner.mundo.mundo)
        print '---'
        print runner.estado, runner.mensaje

    print "---"
    print "tiempo: ", int(
        (c_fin - c_inicio) * 1000), "milisegundos en compilar"
    print "tiempo: ", int((fin - inicio) * 1000), "milisegundos en ejecutar"
    print "total:", int((c_fin - c_inicio) * 1000) + int(
Example #8
0
        grammar = kgrammar(flujo=open(fil), archivo=fil, futuro=True)
    try:
        c_inicio = time()
        grammar.verificar_sintaxis(gen_arbol=True)
        grammar.expandir_arbol()
        c_fin = time()
    except KarelException, ke:
        print ke.args[0], "en la línea", grammar.lexer.linea, 'columna',grammar.lexer.columna
    else:
        casillas_prueba = {
            (1, 1) : {
                'zumbadores': 0,
                'paredes': set()
            }
        }
        mundo = kworld(casillas = casillas_prueba, mochila='inf')
        runner = krunner(grammar.ejecutable, mundo)

        inicio = time()
        runner.run()
        fin = time()

        pprint(runner.mundo.mundo)
        print '---'
        print runner.estado,runner.mensaje

    print "---"
    print "tiempo: ", int((c_fin-c_inicio)*1000), "milisegundos en compilar"
    print "tiempo: ", int((fin-inicio)*1000), "milisegundos en ejecutar"
    print "total:", int((c_fin-c_inicio)*1000) + int((fin-inicio)*1000), "milisegundos"