Exemple #1
0
class Asignacion(Instruccion):
    def __init__(self, nombre, valor):
        self.nombre = nombre
        self.valor = valor

    def ejecutar(self, ent):
        'ejecutar asignacion'
        sim = ent.buscarSimbolo(self.nombre)
        if sim == None:
            reporteerrores.append(
                Lerrores("Error Semantico",
                         'Error,no existe la variable ' + self.nombre, 0, 0))
            variables.consola.insert(
                INSERT, 'Error,no existe la variable ' + self.nombre + '\n')
            return

        util = Tipo(None, None, -1, -1)
        if isinstance(self.valor, Select):
            val = self.valor.ejecutar(ent, 0)
            val = val[1][0]
            self.valor = Terminal(sim.tipo, val[0])
        if isinstance(self.valor, Terminal):
            sim.valor = self.valor.getval(ent).valor
            ent.editarSimbolo(self.nombre, sim)

        else:
            self.valor = self.valor.getval(ent)
            sim.valor = self.valor.getval(ent).valor
            ent.editarSimbolo(self.nombre, sim)

    def traducir(self, entorno):
        'traduzco asignacion'
        expval = self.valor.traducir(entorno)
        cad = expval.codigo3d
        cad += self.nombre + '=' + str(expval.temp) + '\n'
        self.codigo3d = cad

        sql = self.nombre
        if self.valor != None:
            sql += ' = ' + self.valor.stringsql
        sql += ';'
        self.stringsql = sql
        return self
Exemple #2
0
    def resolver(self, expresion, entorno, result, tabla, fila):
        # para expresion binaria
        if not isinstance(expresion, Terminal) and not isinstance(
                expresion, Unaria) and not isinstance(expresion,
                                                      FuncionesNativas):
            'resuelvo logicas,aritmeticas y relacionales'
            exp1 = expresion.exp1
            exp2 = expresion.exp2
            res1 = self.resolver(exp1, entorno, result, tabla, fila)
            res2 = self.resolver(exp2, entorno, result, tabla, fila)

            op = None
            if isinstance(expresion, Logica):
                op = Logica(res1, res2, expresion.operador)
            if isinstance(expresion, Relacional):
                op = Relacional(res1, res2, expresion.operador)
            if isinstance(expresion, Aritmetica):
                op = Aritmetica(res1, res2, expresion.operador)

            return op.getval(entorno)
        elif isinstance(expresion, Unaria):  # para expresion unaria
            exp = expresion.exp1
            res = self.resolver(exp, entorno, result, tabla, fila)
            op = Unaria(res, expresion.operador)
            return op.getval(entorno)

        else:
            'aqui resuelvo los terminales y funciones'
            if isinstance(expresion, Terminal):
                if expresion.tipo.tipo == 'identificador':
                    for i in range(0, len(self.encabezado)):
                        nombrediv = self.encabezado[i].split('.')
                        nombrecol = nombrediv[0]
                        if expresion.getval(entorno).valor == nombrecol:
                            dato = result[fila][i]
                            tipo = None
                            tipo = self.gettipo(entorno, tabla, nombrediv[0])
                            term = Terminal(tipo, dato)
                            return term
                elif expresion.tipo.tipo == 'acceso':
                    for i in range(0, len(self.encabezado)):
                        nombrediv = self.encabezado[i].split('.')
                        nombrecol = nombrediv[0]
                        nombretabla = nombrediv[1]
                        nombrecol = nombretabla + '.' + nombrecol
                        if expresion.getval(entorno).valor == nombrecol:
                            dato = result[fila][i]
                            tipo = None
                            tipo = self.gettipo(entorno, tabla, nombrediv[0])
                            term = Terminal(tipo, dato)
                            return term.getval(entorno)

                else:
                    return expresion

            elif isinstance(expresion, FuncionesNativas):
                tempexp = []
                for exp in expresion.expresiones:
                    tempexp.append(exp)

                for j in range(0, len(expresion.expresiones)):
                    if expresion.expresiones[j].tipo.tipo == 'identificador':
                        val = expresion.expresiones[j].getval(entorno).valor
                        for i in range(0, len(self.encabezado)):
                            nombrediv = self.encabezado[i].split('.')
                            nombrecol = nombrediv[0]
                            if val == nombrecol:
                                tipo = None
                                tipo = self.gettipo(entorno, tabla, val)
                                dato = result[fila][i]
                                tempexp[j] = Terminal(tipo, dato)
                    func = FuncionesNativas(expresion.identificador, tempexp)
                return func.getval(entorno)
Exemple #3
0
def p_EXPT11(t):
    'EXP : current_date'
    tipo = Tipo('date', t[1], len(t[1]), -1)
    tipo.getTipo()
    ter = Terminal(tipo, t[1])
    t[0] = ter.getval(ent).valor