Example #1
0
    def execute_Rajale(self, exec_ctx):
        list_ = exec_ctx.symbol_table.get("list")
        index = exec_ctx.symbol_table.get("index")

        if not isinstance(list_, List):
            return RTResult().failure(RTError(
                self.pos_start, self.pos_end,
                "Motri me tenes que dar una lista pa rajar un elemento",
                exec_ctx
            ))

        if not isinstance(index, Number):
            return RTResult().failure(RTError(
                self.pos_start, self.pos_end,
                "CAPO dame el index en el segundo argumento",
                exec_ctx
            ))

        try:
            element = list_.elements.pop(index.value)
        except:
            return RTResult().failure(RTError(
                self.pos_start, self.pos_end,
                detailsMessages["outOfIndex"],
                exec_ctx
            ))
        return RTResult().success(element)
Example #2
0
 def execute_Argentina(self, exec_ctx):
     import ctypes
     import os
     from playsound import playsound
     print("\n¡VIVA LA PATRIA!\n\n¡VIVA!\n")
     notDone = True
     try:
         imageUri = os.path.abspath(os.environ["CheLangPath"]) + "\\assets\\Argentina.jpg"
         soundUri = os.path.abspath(os.environ["CheLangPath"]) + "\\assets\\Malvinas.mp3"
         os.startfile(imageUri)
         ctypes.windll.user32.SystemParametersInfoW(20, 0, imageUri , 0)
         playsound(soundUri)
         notDone = False
     except (KeyboardInterrupt, SystemExit):
         notDone = False
         return RTResult().success(Empty())
     except:
         if notDone:
             try:
                 imageUri = os.path.abspath(os.getcwd()) + "\\assets\\Argentina.jpg"
                 soundUri = os.path.abspath(os.getcwd()) + "\\assets\\Malvinas.mp3"
                 os.startfile(imageUri)
                 ctypes.windll.user32.SystemParametersInfoW(20, 0, imageUri , 0)
                 playsound(soundUri)
             except FileNotFoundError:
                 print("Pasó algo, no pude cargar las cosas... Para mi es culpa del kernel imperialista...")
             except:
                 return RTResult().success(Empty())
         return RTResult().success(Empty())
     finally:
         return RTResult().success(Empty())
Example #3
0
 def execute_Campora(self, exec_ctx):
     import os
     from playsound import playsound
     print("\nAGUANTE CRISTIIINA PAPAAA!")
     print("\nNESTOR KIRCHNER\n1950 - SIEEEMPRE\n")
     print("\nLA PATRIA ES EL OOTRO\n✌ ✌ ✌ ✌ ✌ ✌ ✌ ✌ ✌ ✌ ✌ ✌\n")
     notDone = True
     global inflacion
     inflacion += .2
     try:
         soundUri = os.path.abspath(
             os.environ["CheLangPath"]) + "\\assets\\Peron.mp3"
         playsound(soundUri)
         notDone = False
     except (KeyboardInterrupt, SystemExit):
         notDone = False
         return RTResult().success(Empty())
     except:
         if notDone:
             try:
                 soundUri = os.path.abspath(
                     os.getcwd()) + "\\assets\\Peron.mp3"
                 playsound(soundUri)
             except FileNotFoundError:
                 print(
                     "Pasó algo, no pude cargar las cosas... Para mi es culpa del kernel imperialista..."
                 )
             except:
                 return RTResult().success(Empty())
         return RTResult().success(Empty())
     finally:
         return RTResult().success(Empty())
Example #4
0
    def execute_Correme(self, exec_ctx):
        fn = exec_ctx.symbol_table.get("fn")

        if not isinstance(fn, String):
            return RTResult().failure(
                RTError(self.pos_start, self.pos_end, "Dame un string papá",
                        exec_ctx))

        if fn.value[-4:] != ".che":
            return RTResult().failure(
                RTError(self.pos_start, self.pos_end,
                        "CAPO tiene que ser un archivo .che , que te pensas?",
                        exec_ctx))

        fn = os.path.abspath(fn.value)
        try:
            with open(fn, "r") as f:
                script = f.read()
        except Exception as e:
            return RTResult().failure(
                RTError(
                    self.pos_start, self.pos_end,
                    f"Que pasó perro? No arrancó? Algo va mal en \"{fn}\"\n" +
                    str(e), exec_ctx))
        from CheLang.cheLangCompiler import run
        _, error = run(fn, script)

        if error:
            return RTResult().failure(
                RTError(
                    self.pos_start, self.pos_end,
                    f"Che \"{fn}\" no funcó, fijate que onda.\n" +
                    error.as_string(), exec_ctx))

        return RTResult().success(Empty())
Example #5
0
 def execute_HalloEbribodi(self, exec_ctx):
     import os
     from playsound import playsound
     notDone = True
     try:
         soundUri = os.path.abspath(
             os.environ["CheLangPath"]) + "\\assets\\HalloEbribodi.mp3"
         playsound(soundUri)
         notDone = False
     except (KeyboardInterrupt, SystemExit):
         notDone = False
         return RTResult().success(String("Seriusli"))
     except:
         if notDone:
             try:
                 soundUri = os.path.abspath(
                     os.getcwd()) + "\\assets\\HalloEbribodi.mp3"
                 playsound(soundUri)
             except FileNotFoundError:
                 print(
                     "Pasó algo, no pude cargar las cosas... Para mi es culpa del kernel imperialista..."
                 )
             except:
                 return RTResult().success(String("Seriusli"))
         return RTResult().success(String("Seriusli"))
     finally:
         return RTResult().success(String("Seriusli"))
Example #6
0
 def execute_Viborita(self, exec_ctx):
     ev = exec_ctx.symbol_table.get("value")
     if isinstance(ev, String):
         return RTResult().success(String(str(eval(ev.value))))
     else:
         return RTResult().failure(
             RTError(self.pos_start, self.pos_end,
                     "Capo dame un string pa evaluar, dale?", exec_ctx))
Example #7
0
    def visit_ReturnNode(self, node, context):
        res = RTResult()

        if node.node_to_return:
            value = res.register(self.visit(node.node_to_return, context))
            if res.should_return() : return res
        else:
            value = Number.null

        return res.success_return(value)
Example #8
0
 def take_item(self, other):
     res = RTResult()
     if isinstance(other, Number):
         try:
             return res.success(self.elements[other.value])
         except:
             return res.failure(
                 RTError(other.pos_start, other.pos_end,
                         detailsMessages["outOfIndex"], self.context))
     else:
         return res.failure(Value.illegal_operation(self, other))
Example #9
0
 def execute_Boludear(self, exec_ctx):
     from time import sleep
     n = exec_ctx.symbol_table.get("value")
     if isinstance(n, Number):
         sleep(n.value)
     else:
         return RTResult().failure(
             RTError(
                 self.pos_start, self.pos_end,
                 "Flaco dame una cantidad de segundos, no cualquier cosa",
                 exec_ctx))
     return RTResult().success(Empty())
Example #10
0
    def execute_TaLargo(self, exec_ctx):
        value = exec_ctx.symbol_table.get("value")

        if isinstance(value, List):
            return RTResult().success(Number(len(value.elements)))
        if isinstance(value, String):
            return RTResult().success(Number(len(value.value)))

        return RTResult().failure(
            RTError(self.pos_start, self.pos_end,
                    "Che el TaLargo tiene que tener una lista o un string",
                    exec_ctx))
Example #11
0
    def visit_ListNode(self, node, context):
        res = RTResult()
        elements = []

        for element_node in node.element_nodes:
            elements.append(res.register(self.visit(element_node, context)))
            # if res.error: return res
            if res.should_return(): return res

        return res.success(
            List(elements).set_context(context).set_pos(node.pos_start, node.pos_end)
        )
Example #12
0
    def visit_FuncDefNode(self, node, context):
        res = RTResult()

        func_name = node.var_name_tok.value if node.var_name_tok else None
        body_node = node.body_node
        arg_names = [arg_name.value for arg_name in node.arg_name_toks]
        func_value = Function(func_name, body_node, arg_names, node.should_auto_return).set_context(context).set_pos(node.pos_start, node.pos_end)
        
        if node.var_name_tok:
            context.symbol_table.set(func_name, func_value)

        return res.success(func_value)
Example #13
0
    def execute_Agregale(self, exec_ctx):
        list_ = exec_ctx.symbol_table.get("list")
        value = exec_ctx.symbol_table.get("value")

        if not isinstance(list_, List):
            return RTResult().failure(
                RTError(
                    self.pos_start, self.pos_end,
                    "Motri me tenes que dar una lista pa poner un elemento",
                    exec_ctx))

        list_.elements.append(value)
        return RTResult().success(list_)
Example #14
0
    def visit_VarAccessNode(self,node,context):
        res = RTResult()
        var_name = node.var_name_tok.value
        value = context.symbol_table.get(var_name)

        if not value:
            return res.failure(RTError(
                node.pos_start, node.pos_end,
                detailsMessages["unknownVariable"] + var_name + "'",
                context
            ))

        value = value.copy().set_context(context).set_pos(node.pos_start, node.pos_end)
        return res.success(value)
Example #15
0
 def execute_Sumate(self, exec_ctx):
     arg = exec_ctx.symbol_table.get("list").copy()
     if isinstance(arg, List):
         try:
             for i, n in enumerate(arg.elements):
                 arg.elements[i] = n.value
             return RTResult().success(Number(sum(arg.elements)))
         except:
             return RTResult().failure(
                 RTError(self.pos_start, self.pos_end,
                         "Capo pasame una lista CON SOLO NUMEROS, dale?",
                         exec_ctx))
     else:
         return RTResult().failure(
             RTError(self.pos_start, self.pos_end,
                     "Capo pasame una lista, dale?", exec_ctx))
Example #16
0
 def execute_Chorro(self, exec_ctx):
     from time import sleep
     print("\nSi entra el chorro no lo podes amasijar en el patio porque despues dicen que se cayo de la medianera.", end="\n\n")
     sleep(4)
     print("Vos lo tenes que llevar al lugar mas recóndito de tu casa.", end="\n\n")
     sleep(2)
     print("Al ultimo dormitorio.", end="\n\n")
     sleep(1.5)
     print("Y si es posible al sótano.", end="\n\n")
     sleep(1.5)
     print("Bien escondido.", end="\n\n")
     sleep(2)
     print("Y ahí lo reventas a balazos. Le tiras todos los tiros.", end="\n\n")
     sleep(3)
     print("No uno, porque vas a ser habil tirador y te comes un garron de la gran flauta.", end="\n\n")
     sleep(3)
     print("Vos estabas en un estado de emocion violenta y de locura.", end="\n\n")
     sleep(2)
     print("Lo rreventaste a tiros, le vaciaste todo el cargador.", end="\n\n")
     sleep(2)
     print("Le zapateas arriba. Lo meas. Para demostrar tu estado de locura y de inconsciencia temporal.", end="\n\n")
     sleep(3.3)
     print("¿Me explico?", end="\n\n")
     sleep(1.5)
     print("Ademas tenes que tener una botella de chiv va a mano, te tomas media botella,", end="\n\n")
     sleep(3)
     print("y si tenes un sobre de cocaina, papoteate y vas al juzgado así. *Movimientos epilepticos*", end="\n\n")
     sleep(3)
     print("Sos inimputable hermano.", end="\n\n")
     sleep(2.3)
     print("En diez dias salis.", end="\n\n")
     sleep(1)
     return RTResult().success(Empty())
Example #17
0
    def visit_WhileNode(self, node, context):
        res = RTResult()
        elements = []
        # aca ta el loop
        while True:
            condition = res.register(self.visit(node.condition_node, context))
            # if res.error: return res
            if res.should_return(): return res

            if not condition.is_true(): break

            value = res.register(self.visit(node.body_node, context))
            # if res.error: return res
            if res.should_return()  and res.loop_should_continue == False and res.loop_should_break == False: return res

            if res.loop_should_continue:
                continue
            if res.loop_should_break:
                break

            elements.append(value)
        
        return res.success(
            Empty() if node.should_return_null else
            List(elements).set_context(context).set_pos(node.pos_start, node.pos_end)
            )
Example #18
0
    def execute_Metele(self, exec_ctx):
        listA = exec_ctx.symbol_table.get("listA")
        listB = exec_ctx.symbol_table.get("listB")

        if not isinstance(listA, List):
            return RTResult().failure(
                RTError(self.pos_start, self.pos_end,
                        "Tiene que ser una lista el primer argumento crack",
                        exec_ctx))

        if not isinstance(listB, List):
            return RTResult().failure(
                RTError(self.pos_start, self.pos_end,
                        "También tiene que ser una lista el segundo crack",
                        exec_ctx))

        listA.elements.extend(listB.elements)
        return RTResult().success(listA)
Example #19
0
 def execute_TraemeNumerito(self, exec_ctx):
     while True:
         text = input(exec_ctx.symbol_table.get('inputValue?') or "Tirame un numero: ")
         try:
             number = int(text)
             break
         except ValueError:
             print(f"'{text}' tiene que ser un numero tarao, mandale denuevo")
     return RTResult().success(Number(number))
Example #20
0
    def visit_CallListNode(self, node, context):
        res = RTResult()

        value_to_call = res.register(self.visit(node.list_to_call, context))
        if res.should_return(): return res
        value_to_call = value_to_call.copy().set_pos(node.pos_start, node.pos_end)

        listIndex = res.register(self.visit(node.listIndex, context))
        if res.should_return(): return res
        listIndex = listIndex.copy().set_pos(node.pos_start, node.pos_end)

        return_value = res.register(value_to_call.take_item(listIndex))
        if res.should_return(): return res
        return_value = return_value.copy().set_context(context).set_pos(node.pos_start,node.pos_end)
        return res.success(return_value)
Example #21
0
 def execute_ElMasGrande(self, exec_ctx):
     from time import sleep
     print("\nEl mas grande. Quien va a ser el mas grande papa?.",
           end="\n\n")
     sleep(1)
     print("\nEl Diego, Hermano", end="\n\n")
     sleep(2)
     print("\nY me llenan, mira, mira...", end="\n\n")
     sleep(1)
     print("\nSe me caen las lagrimas.", end="\n\n")
     sleep(1)
     print("\nEl Diego, loco.", end="\n\n")
     sleep(3)
     print("\nEl Dieeeego...", end="\n\n")
     sleep(1)
     print("\nEl Diegote.", end="\n\n")
     sleep(3)
     print("\nEl que lo bardeaba a...", end="\n\n")
     sleep(4)
     print("\nA los Grondona...", end="\n\n")
     sleep(2)
     print("\nEse es el mas grande de toda la vida...", end="\n\n")
     sleep(1)
     print("\nDe toda la historia.", end="\n\n")
     sleep(2)
     print("\nEl Diego Armando Maradona...", end="\n\n")
     sleep(1)
     print("\nAca papa", end="\n\n")
     sleep(1)
     print("\nAca chabon", end="\n\n")
     sleep(2)
     print("\nFenomeno...", end="\n\n")
     sleep(1)
     print("\nDrogadicto", end="\n\n")
     sleep(1)
     print("\nLo que sea Papa", end="\n\n")
     sleep(1)
     print("\nYo te llevo en el alma, loco.", end="\n\n")
     sleep(2)
     print("\nEste es el mas grande", end="\n\n")
     sleep(1)
     print("\nEste se la jugo por la Argentina", end="\n\n")
     sleep(1)
     print("\nPeron robo", end="\n\n")
     sleep(1)
     print("\nTodos robaron, este...", end="\n\n")
     sleep(1)
     print("\nCon el tobillo asi con Brasil, hizo asi", end="\n\n")
     sleep(1)
     print("\nCani, Cani", end="\n\n")
     sleep(2)
     print("\nY quien?", end="\n\n")
     sleep(1)
     print("\nEl futbolero lo entiende, hermano.", end="\n\n")
     sleep(1)
     return RTResult().success(Empty())
Example #22
0
 def execute_AFlotantito(self, exec_ctx):
     n = exec_ctx.symbol_table.get("value")
     if isinstance(n, String):
         try:
             ret = float(n.value)
             return RTResult().success(Number(ret))
         except:
             return RTResult().failure(
                 RTError(
                     self.pos_start, self.pos_end,
                     "Flaco no se que me pasaste pero no se puede hacer numerito",
                     exec_ctx))
     elif isinstance(n, Number):
         return RTResult().success(Number(float(n.value)))
     else:
         return RTResult().failure(
             RTError(self.pos_start, self.pos_end,
                     "Capo pasame un numerito o un string, dale?",
                     exec_ctx))
Example #23
0
    def visit_CallNode(self, node, context):
        res = RTResult()
        args = []

        value_to_call = res.register(self.visit(node.node_to_call, context))
        if res.should_return(): return res
        value_to_call = value_to_call.copy().set_pos(node.pos_start, node.pos_end)

        for arg_node in node.arg_nodes:
            args.append(res.register(self.visit(arg_node, context)))
            if res.should_return(): return res

        return_value = res.register(value_to_call.execute(args))
        if res.should_return(): return res
        return_value = return_value.copy().set_context(context).set_pos(node.pos_start,node.pos_end)
        return res.success(return_value)
Example #24
0
    def execute(self, args):
        res = RTResult()
        exec_ctx = self.generate_new_context()

        method_name = f'execute_{self.name}'
        method = getattr(self, method_name, self.no_visit_method)

        res.register(self.check_and_populate_args(method.arg_names, args, exec_ctx))
        if res.should_return(): return res

        return_value = res.register(method(exec_ctx))
        if res.should_return(): return res
        return res.success(return_value)
Example #25
0
    def execute(self, args):
        from CheLang.Interpreter import Interpreter
        res = RTResult()
        interpreter = Interpreter()
        exec_ctx = self.generate_new_context()

        res.register(self.check_and_populate_args(self.arg_names, args, exec_ctx))
        if res.should_return(): return res

        value = res.register(interpreter.visit(self.body_node, exec_ctx))
        if res.should_return() and res.func_return_value == None: return res
        
        ret_value = (value if self.should_auto_return else None) or res.func_return_value or Empty()
        return res.success(ret_value)
Example #26
0
    def check_args(self, arg_names, args):
        res = RTResult()
        final_arg_names = []

        for arg_name in arg_names:
            if not arg_name[-1] == "?":
                final_arg_names.append(arg_name)

        if len(args) > len(arg_names):
            return res.failure(
                RTError(
                    self.pos_start, self.pos_end,
                    f"Che me pasaste como {len(args) - len(arg_names)} argumentos, son menos en {self} viste",
                    self.context))

        if len(args) < len(final_arg_names):
            return res.failure(
                RTError(
                    self.pos_start, self.pos_end,
                    f"Che me pasaste como {len(final_arg_names) - len(args)} argumentos, son más en {self} viste",
                    self.context))

        return res.success(None)
Example #27
0
    def visit_BinOpNode(self, node, context):
        res = RTResult()
        left = res.register(self.visit(node.left_node, context))
        # if res.error: return res
        if res.should_return(): return res
        right = res.register(self.visit(node.right_node, context))
        # if res.error: return res
        if res.should_return(): return res

        if node.op_tok.type == TT_PLUS:
            result, error = left.added_to(right)
        elif node.op_tok.type == TT_MINUS:
            result, error = left.subbed_by(right)
        elif node.op_tok.type == TT_MUL:
            result, error = left.multed_by(right)
        elif node.op_tok.type == TT_MOD:
            result, error = left.modded_by(right)
        elif node.op_tok.type == TT_DIV:
            result, error = left.dived_by(right)
        elif node.op_tok.type == TT_POW:
            result, error = left.powed_by(right)
        elif node.op_tok.type == TT_EE:
            result, error = left.get_comparison_ee(right)
        elif node.op_tok.type == TT_NE:
            result, error = left.get_comparison_ne(right)
        elif node.op_tok.type == TT_LT:
            result, error = left.get_comparison_lt(right)
        elif node.op_tok.type == TT_GT:
            result, error = left.get_comparison_gt(right)
        elif node.op_tok.type == TT_LTE:
            result, error = left.get_comparison_lte(right)
        elif node.op_tok.type == TT_GTE:
            result, error = left.get_comparison_gte(right)
        elif node.op_tok.type == TT_MM:
            result, error = left.get_comparison_mm(right)
        elif node.op_tok.matches(TT_KEYWORD, "y"):
            result, error = left.anded_by(right)
        elif node.op_tok.matches(TT_KEYWORD, "o"):
            result, error = left.ored_by(right)

        if error:
            return res.failure(error)
        else:

            return res.success(result.set_pos(node.pos_start,node.pos_end))
Example #28
0
 def visit_VarAssignNode(self, node, context):
     res = RTResult()
     var_name = node.var_name_tok
     value = res.register(self.visit(node.value_node, context))
     # if res.error: return res
     if res.should_return(): return res
     for var in var_name:
         if var.value.lower() == "dolar":
             return res.failure(LanguageThingError(
                     var.pos_start, var.pos_end,
                     detailsMessages["dolarVarAssign"]
                     ))
         context.symbol_table.set(var.value,value)
     return res.success(value)
Example #29
0
    def visit_UnaryOpNode(self, node, context):
        res = RTResult()
        number = res.register(self.visit(node.node, context))
        # if res.error: return res
        if res.should_return(): return res

        error = None

        if node.op_tok.type == TT_MINUS:
            number, error = number.multed_by(Number(-1))
        
        if node.op_tok.matches(TT_KEYWORD, "no"):
            number, error = number.notted()

        if error:
            return res.failure(error)
        else:
            return res.success(number.set_pos(node.pos_start,node.pos_end))
Example #30
0
 def execute_Dolar(self, exec_ctx):
     d = datetime.datetime.now()
     dolar = 193 + ((d - START_TIME).total_seconds() / 2) * inflacion
     return RTResult().success(Number(float("{:.2f}".format(dolar))))