Пример #1
0
    def deleteTable(self, database: Database, name: str, line, column):
        """
        Method to remove a table in database

        :param database: Table database
        :param name: The name of table
        :param line: The instruction line
        :param column: The instruction column
        :return: Returns nothing
        """
        dbStatement = jsonMode.dropTable(database.name, name)

        if dbStatement == 0:
            table = self.searchTable(database, name)
            database.tables.remove(table)
            self.writeFile()
            print('Table deleted successfully')

        elif dbStatement == 1:
            desc = f": Can't drop table {name}"
            ErrorController().addExecutionError(34, 'Execution', desc, line,
                                                column)

        elif dbStatement == 2:
            desc = f": Database {database.name} does not exist"
            ErrorController().addExecutionError(35, 'Execution', desc, line,
                                                column)

        elif dbStatement == 3:
            desc = f": Table {name} does not exist"
            ErrorController().addExecutionError(27, 'Execution', desc, line,
                                                column)
Пример #2
0
 def process(self, expression):
     value1 = self.value1.process(expression)
     value2 = self.value2.process(expression)
     operador = self.operador
     try:
         if value1.data_type != DATA_TYPE.NUMBER and value2.data_type != DATA_TYPE.NUMBER:
             desc = "FATAL ERROR, ArithmeticBinaryOperation, no acepta ids"
             ErrorController().add(34, 'Execution', desc, self.line, self.column)
         value = 0
         if operador == SymbolsAritmeticos.PLUS:
             value = round(value1.value + value2.value, 2)
         elif operador == SymbolsAritmeticos.MINUS:
             value = round(value1.value - value2.value, 2)
         elif operador == SymbolsAritmeticos.TIMES:
             value = round(value1.value * value2.value, 2)
         elif operador == SymbolsAritmeticos.DIVISON:
             value = round(value1.value / value2.value, 2)
         elif operador == SymbolsAritmeticos.EXPONENT:
             value = round(value1.value ** value2.value, 2)
         elif operador == SymbolsAritmeticos.MODULAR:
             value = round(value1.value % value2.value, 2)
         elif operador == SymbolsAritmeticos.BITWISE_SHIFT_LEFT:
             value = round(value1.value << value2.value, 2)
         elif operador == SymbolsAritmeticos.BITWISE_SHIFT_RIGHT:
             value = round(value1.value >> value2.value, 2)
         elif operador == SymbolsAritmeticos.BITWISE_AND:
             value = round(value1.value & value2.value)
         elif operador == SymbolsAritmeticos.BITWISE_OR:
             value = round(value1.value | value2.value)
         elif operador == SymbolsAritmeticos.BITWISE_XOR:
             value = round(value1.value ^ value2.value)
         return PrimitiveData(DATA_TYPE.NUMBER, value, self.line, self.column)
     except:
         desc = "FATAL ERROR, ArithmeticBinaryOperation, no acepta ids"
         ErrorController().add(34, 'Execution', desc, self.line, self.column)
Пример #3
0
    def extractTable(self, name: str, noLine, noColumn) -> list:
        """
        Method to get a list of records from a table

        :param name: The name of table
        :param noLine: The instruction line
        :param noColumn: The instruction column
        :return: Returns a list of records
        """
        database = SymbolTable().useDatabase
        if not database:
            desc = f": Database not selected"
            ErrorController().add(4, 'Execution', desc, noLine, noColumn)
            return None

        if not TypeChecker().searchTable(database, name):
            desc = f": Table {name} does not exist"
            ErrorController().add(27, 'Execution', desc, noLine, noColumn)
            return None

        data = data_mode.mode(database.mode).extractTable(
            database.name.lower(), name.lower())
        if data == None:
            ErrorController().add(34, 'Execution', '', noLine, noColumn)
            return None

        return data
Пример #4
0
    def extractRow(self, name: str, columns: list, noLine, noColumn) -> list:
        """
        Method to extract a record from a table

        :param name: The name of table
        :param columns: List with number of columns of primary keys
        :param noLine: The instruction line
        :param noColumn: The instruction column
        :return: Returns nothing
        """
        database = SymbolTable().useDatabase
        if not database:
            desc = f": Database not selected"
            ErrorController().add(4, 'Execution', desc, noLine, noColumn)
            return None

        if not TypeChecker().searchTable(database, name):
            desc = f": Table {name} does not exist"
            ErrorController().add(27, 'Execution', desc, noLine, noColumn)
            return None

        data = data_mode.mode(database.mode).extractRow(
            database.name.lower(), name.lower(), columns)
        if data == None:
            ErrorController().add(34, 'Execution', '', noLine, noColumn)
            return None
        return data
Пример #5
0
 def process(self, expression):
     value1 = self.value1.process(expression)
     value2 = self.value2.process(expression)
     operator = self.operator
     try:
         value = 0
         if isinstance(value1, PrimitiveData) and isinstance(value2, PrimitiveData):
             if operator.lower() == "and":
                 value = value1.value and value2.value
             elif operator.lower() == "or":
                 value = value1.value or value2.value
             else:
                 print("Operador no valido: " + operator)
                 return
             return PrimitiveData(DATA_TYPE.BOOLEANO, value, self.line, self.column)
         else:
             data = ""
             if operator.lower() == 'and':
                 data = f'({value1}) and ({value2})'
                 return data
             elif operator.lower() == 'or':
                 data = f'({value1})  or ({value2})'
                 return data
             else:
                 print("Operador no valido: " + operator)
                 return
     except TypeError:
         desc = "FATAL ERROR --- LogicalOperators"
         ErrorController().add(34, 'Execution', desc, self.line, self.column)
     except:
         desc = "FATAL ERROR --- LogicalOperators"
         ErrorController().add(34, 'Execution', desc, self.line, self.column)
Пример #6
0
    def createDatabase(self, database: Database, line, column):
        """
        Method to create a database in type checker

        :param database: Database object
        :param line: The instruction line
        :param column: The instruction column
        :return: Returns nothing
        """
        if self.searchDatabase(database.name):
            desc = f": Database {database.name} already exists"
            ErrorController().add(30, 'Execution', desc, line, column)
            return

        dbStatement = data_mode.mode(database.mode).createDatabase(
            database.name.lower())

        if dbStatement == 0:
            self._typeCheckerList.append(database)
            self.writeFile()

            SymbolTable().add(database, 'New Database', 'Database', 'Global',
                              None, line, column)
            DataWindow().consoleText(
                'Query returned successfully: Database created')

        elif dbStatement == 1:
            desc = f": Can't create database {database.name}"
            ErrorController().add(34, 'Execution', desc, line, column)

        elif dbStatement == 2:
            desc = f": Database {database.name} already exists"
            ErrorController().add(30, 'Execution', desc, line, column)
Пример #7
0
 def process(self, environment):
     try:
         val = None
         result = 0
         lista1 = []
         if isinstance(self.value, Identifiers):
             val = self.value.process(environment)
             result = [len(columns) for columns in val[0]]
             lista1.append(result)
             lista1.append(self.alias)
             return lista1
         else:
             val = self.value.process(environment).value
             l = len(val)
             return PrimitiveData(DATA_TYPE.NUMBER, l, self.line,
                                  self.column)
     except TypeError:
         desc = "Tipo de dato invalido para Length"
         ErrorController().add(37, 'Execution', desc, self.line,
                               self.column)
         return
     except:
         desc = "FATAL ERROR --- StringFuncs"
         ErrorController().add(34, 'Execution', desc, self.line,
                               self.column)
Пример #8
0
    def createDatabase(self, database: str, line, column):
        """
        Method to create a database in type checker

        :param database: The name of database
        :param line: The instruction line
        :param column: The instruction column
        :return: Returns nothing
        """
        dbStatement = jsonMode.createDatabase(database)

        if dbStatement == 0:
            db = Database(database)
            self._typeCheckerList.append(db)
            self.writeFile()

            SymbolTable().add(db, 'New Database', 'Database', 'Global', None,
                              line, column)
            print('Database created successfully')
            # Query returned successfully in # secs # msec.

        elif dbStatement == 1:
            desc = f": Can't create database {database}"
            ErrorController().addExecutionError(34, 'Execution', desc, line,
                                                column)

        elif dbStatement == 2:
            desc = f": Database {database} already exists"
            ErrorController().addExecutionError(30, 'Execution', desc, line,
                                                column)
Пример #9
0
 def process(self, environment):
     try:
         index = self.pos.process(environment).value
         char = self.no_char.process(environment).value
         if isinstance(self.value, Identifiers):
             lista1 = []
             val = self.value.process(environment)
             result = [(columns[:index] + chr(char) + columns[index + 1:])
                       for columns in val[0]]
             lista1.append(result)
             lista1.append(self.alias)
             return lista1
         else:
             cadena = self.value.process(environment).value
             result = cadena[:index] + chr(char) + cadena[index + 1:]
             return PrimitiveData(DATA_TYPE.STRING, result, self.line,
                                  self.column)
     except TypeError:
         desc = "Tipo de dato invalido para SetByte"
         ErrorController().add(37, 'Execution', desc, self.line,
                               self.column)
         return
     except:
         desc = "FATAL ERROR --- StringFuncs"
         ErrorController().add(34, 'Execution', desc, self.line,
                               self.column)
Пример #10
0
 def process(self, environment):
     try:
         if self.data_type.lower() == "integer":
             if isinstance(self.value, Identifiers):
                 lista1 = []
                 val = self.value.process(environment)
                 result = [int(columns) for columns in val[0]]
                 lista1.append(result)
                 lista1.append(self.alias)
                 return lista1
             else:
                 cadena = self.value.process(environment).value
                 return PrimitiveData(DATA_TYPE.NUMBER, int(cadena),
                                      self.line, self.column)
         else:
             if isinstance(self.value, Identifiers):
                 lista1 = []
                 val = self.value.process(environment)
                 result = [str(columns) for columns in val[0]]
                 lista1.append(result)
                 lista1.append(self.alias)
                 return lista1
             else:
                 cadena = self.value.process(environment).value
                 return PrimitiveData(DATA_TYPE.STRING, cadena, self.line,
                                      self.column)
     except TypeError:
         desc = "Tipo de dato invalido para Convert"
         ErrorController().add(37, 'Execution', desc, self.line,
                               self.column)
         return
     except:
         desc = "FATAL ERROR --- StringFuncs"
         ErrorController().add(34, 'Execution', desc, self.line,
                               self.column)
Пример #11
0
    def deleteDatabase(self, name: str, line, column):
        """
        Method to remove a database in type checker

        :param name: The name of the database
        :param line: The instruction line
        :param column: The instruction column
        :return: Returns nothing
        """
        database = self.searchDatabase(name)
        if not database:
            desc = f": Database {name} does not exist"
            ErrorController().add(35, 'Execution', desc, line, column)
            return

        dbStatement = data_mode.mode(database.mode).dropDatabase(name.lower())

        if dbStatement == 0:
            self._typeCheckerList.remove(database)
            self.writeFile()

            SymbolTable().delete(database)
            DataWindow().consoleText(
                'Query returned successfully: Database deleted')

        elif dbStatement == 1:
            desc = f": Can't drop database {name}"
            ErrorController().add(34, 'Execution', desc, line, column)

        elif dbStatement == 2:
            desc = f": Database {name} does not exist"
            ErrorController().add(35, 'Execution', desc, line, column)
Пример #12
0
    def addCheck(self, conditionColumn):
        #                           L (L|D)*
        whatColumnIs = re.search('[a-zA-z]([a-zA-z]|[0-9])*',
                                 conditionColumn.alias)
        bandera = False
        if whatColumnIs != None:
            whatColumnIs = whatColumnIs.group(0)
            for columna in self._column_list:
                if isinstance(columna, CreateCol):
                    if (columna._column_name == whatColumnIs):
                        if columna._properties != None:
                            bandera = True
                            columna._properties[0][
                                'check_condition'] = conditionColumn
                            break
            if not bandera:
                desc = f": Undefined column in check ()"
                ErrorController().add(26, 'Execution', desc, 0, 0)
                self._can_create_flag = False
                return
            bandera = False

        else:
            desc = f": column not given in check()"
            ErrorController().add(26, 'Execution', desc, 0, 0)
            self._can_create_flag = False
            return
Пример #13
0
    def compile(self, environment):
        value1 = self.value1.compile(environment)
        value2 = self.value2.compile(environment)
        if isinstance(value1, PrimitiveData):
            if value1.data_type == DATA_TYPE.STRING:
                value1.value = f"\'{value1.value}\'"
        if isinstance(value1, PrimitiveData):
            if value2.data_type == DATA_TYPE.STRING:
                value2.value = f"\'{value2.value}\'"
        try:
            temporal = ThreeAddressCode().newTemp()
            ThreeAddressCode().addCode(
                f"{temporal} = {value1.value} {getOperador(self.operator)} {value2.value}"
            )

            return PrimitiveData(DATA_TYPE.NUMBER, temporal, self.line,
                                 self.column)
        except TypeError:
            desc = "Error de tipo"
            ErrorController().add(34, 'Execution', desc, self.line,
                                  self.column)
        except:
            desc = "FATAL ERROR, Relop, no acepta ids"
            ErrorController().add(34, 'Execution', desc, self.line,
                                  self.column)
Пример #14
0
 def process(self, instruction):
     #Jalando Base de Datos
     print("EJECUTANDO INSERT")
     database_id = SymbolTable().useDatabase
     
     if not database_id:
         desc = f": Database not selected"
         ErrorController().addExecutionError(4, 'Execution', desc, 0, 1)#manejar linea y columna
         return None
     #Base de datos existe --> Obtener tabla
     table_tp = TypeChecker().searchTable(database_id, self.table.value)
     if not table_tp:
         desc = f": Table does not exists"
         ErrorController().addExecutionError(4, 'Execution', desc, 0, 1)#manejar linea y columna
         return None
     # Obtenida la tabla ---> TODO: VALIDAR TIPOS
     # for column in table_tp.columns:
     #     if column.
     if self.arr_columns == None:
     #Solo nos dieron los valores, tienen que venir todos ---> Espino ya valida longitud?
         vals_insert = []
         for column in self.arr_values:
             val = column.process(instruction)
             vals_insert.append(val.value)
         print(vals_insert)
         DataController().insert(self.table.value, vals_insert,0,1)
     else:
         if len(self.arr_columns) == len(self.arr_values):
             pass
         else:
             print("Error Datos incompletos")
Пример #15
0
    def deleteDatabase(self, name: str, line, column):
        """
        Method to remove a database in type checker

        :param name: The name of the database
        :param line: The instruction line
        :param column: The instruction column
        :return: Returns nothing
        """
        dbStatement = jsonMode.dropDatabase(name)

        if dbStatement == 0:
            database = self.searchDatabase(name)
            self._typeCheckerList.remove(database)
            self.writeFile()

            SymbolTable().delete(database)
            print('Database deleted successfully')

        elif dbStatement == 1:
            desc = f": Can't drop database {name}"
            ErrorController().addExecutionError(34, 'Execution', desc, line,
                                                column)

        elif dbStatement == 2:
            desc = f": Database {name} does not exist"
            ErrorController().addExecutionError(35, 'Execution', desc, line,
                                                column)
Пример #16
0
    def createTable(self, database: Database, name: str, columns: int, line,
                    column):
        """
        Method to create a table in database

        :param database: Table database
        :param name: The name of table
        :param columns: Number of columns
        :param line: The instruction line
        :param column: The instruction column
        :return: Returns nothing
        """
        dbStatement = jsonMode.createTable(database.name, name, columns)

        if dbStatement == 0:
            table = Table(name)
            database.tables.append(table)
            self.writeFile()
            print('Table created successfully')

            return table
        elif dbStatement == 1:
            desc = f": Can't create table {name}"
            ErrorController().addExecutionError(34, 'Execution', desc, line,
                                                column)

        elif dbStatement == 2:
            desc = f": Database {database.name} does not exist"
            ErrorController().addExecutionError(35, 'Execution', desc, line,
                                                column)

        elif dbStatement == 3:
            desc = f": Table {name} already exists"
            ErrorController().addExecutionError(31, 'Execution', desc, line,
                                                column)
Пример #17
0
    def updateDatabase(self, databaseOld: str, databaseNew: str, line, column):
        """
        Method to update the name of a database in type checker

        :param databaseOld: The old name of the database
        :param databaseNew: The new name of the database
        :param line: The instruction line
        :param column: The instruction column
        :return: Returns nothing
        """
        dbStatement = jsonMode.alterDatabase(databaseOld, databaseNew)

        if dbStatement == 0:
            database = self.searchDatabase(databaseOld)
            database.name = databaseNew
            self.writeFile()
            print('Database updated successfully')

        elif dbStatement == 1:
            desc = f": Can't update database {databaseOld}"
            ErrorController().addExecutionError(34, 'Execution', desc, line,
                                                column)

        elif dbStatement == 2:
            desc = f": Database {databaseOld} does not exist"
            ErrorController().addExecutionError(35, 'Execution', desc, line,
                                                column)

        elif dbStatement == 3:
            desc = f": Database {databaseNew} already exists"
            ErrorController().addExecutionError(30, 'Execution', desc, line,
                                                column)
Пример #18
0
    def agregarCheck(self, conditionColumn, tablaId):
        typeChecker = TypeChecker()
        bandera = False
        tableToAlter = typeChecker.searchTable(SymbolTable().useDatabase,
                                               tablaId)

        #                           L (L|D)*
        whatColumnIs = re.search('[a-zA-z]([a-zA-z]|[0-9])*',
                                 conditionColumn.alias)

        if whatColumnIs != None:
            whatColumnIs = whatColumnIs.group(0)
            for columna in tableToAlter.columns:
                if (columna._name == whatColumnIs):
                    bandera = True
                    columna._check = conditionColumn.alias
                    break
            if not bandera:
                desc = f": Undefined column in alter check ()"
                ErrorController().add(26, 'Execution', desc, 0, 0)
                return
            bandera = False

        else:
            desc = f": column not given in check()"
            ErrorController().add(26, 'Execution', desc, 0, 0)
            return
        typeChecker.writeFile()
Пример #19
0
 def process(self, environment):
     try:
         val = None
         result = 0
         lista1 = []
         i = self.down.process(environment).value
         j = self.up.process(environment).value
         if isinstance(self.value, Identifiers):
             val = self.value.process(environment)
             result = [columns[i:j] for columns in val[0]]
             lista1.append(result)
             lista1.append(self.alias)
             return lista1
         else:
             cadena = self.value.process(environment).value
             substr = cadena[i:j]
             return PrimitiveData(DATA_TYPE.STRING, substr, self.line,
                                  self.column)
     except TypeError:
         desc = "Tipo de dato invalido para Substring"
         ErrorController().add(37, 'Execution', desc, self.line,
                               self.column)
         return
     except:
         desc = "FATAL ERROR --- StringFuncs"
         ErrorController().add(34, 'Execution', desc, self.line,
                               self.column)
Пример #20
0
 def process(self, environment):
     try:
         if isinstance(self.value, Identifiers):
             lista1 = []
             val = self.value.process(environment)
             result = [
                 hashlib.sha256(columns.encode()).hexdigest()
                 for columns in val[0]
             ]
             lista1.append(result)
             lista1.append(self.alias)
             return lista1
         else:
             cadena = self.value.process(environment).value
             result = hashlib.sha256(cadena.encode())
             return PrimitiveData(DATA_TYPE.STRING, result.hexdigest(),
                                  self.line, self.column)
     except TypeError:
         desc = "Tipo de dato invalido para sha256"
         ErrorController().add(37, 'Execution', desc, self.line,
                               self.column)
         return
     except:
         desc = "FATAL ERROR --- StringFuncs"
         ErrorController().add(34, 'Execution', desc, self.line,
                               self.column)
Пример #21
0
 def process(self, expression):
     value1 = self.value1.process(expression)
     value2 = self.value2.process(expression)
     operator = self.operator
     try:
         value = 0
         if isinstance(value1, PrimitiveData) and isinstance(
                 value2, PrimitiveData):
             if operator.lower() == "and":
                 value = value1.value and value2.value
             elif operator.lower() == "or":
                 value = value1.value or value2.value
             else:
                 print("Operador no valido: " + operator)
                 return
             return PrimitiveData(DATA_TYPE.BOOLEANO, value, self.line,
                                  self.column)
         else:
             data = ""
             if isinstance(value1, list) and isinstance(value2, list):
                 if operator.lower() == 'and':
                     lista_temp = []
                     lista_temp.append(value1[2])
                     lista_temp.append(value2[2])
                     lista_temp = self.convert_unic_list2(lista_temp)
                     name_list = self.convert_unic_list(
                         value1[0], value2[0])
                     data = f'({value1[1]}) and ({value2[1]})'
                     return [name_list, data, lista_temp]
                 elif operator.lower() == 'or':
                     lista_temp = []
                     lista_temp.append(value1[2])
                     lista_temp.append(value2[2])
                     lista_temp = self.convert_unic_list2(lista_temp)
                     name_list = self.convert_unic_list(
                         value1[0], value2[0])
                     data = f'({value1[1]})  or ({value2[1]})'
                     return [name_list, data, lista_temp]
                 else:
                     print("Operador no valido: " + operator)
                     return
             else:
                 if operator.lower() == 'and':
                     data = f'({value1}) and ({value2})'
                     return data
                 elif operator.lower() == 'or':
                     data = f'({value1})  or ({value2})'
                     return data
                 else:
                     print("Operador no valido: " + operator)
                     return
     except TypeError:
         desc = "FATAL ERROR --- LogicalOperators"
         ErrorController().add(34, 'Execution', desc, self.line,
                               self.column)
     except:
         desc = "FATAL ERROR --- LogicalOperators"
         ErrorController().add(34, 'Execution', desc, self.line,
                               self.column)
Пример #22
0
def p_error(p):
    try:
        # print(str(p.value))
        description = ' or near ' + str(p.value)
        column = find_column(p)
        ErrorController().add(33, 'Syntactic', description, p.lineno, column)
    except AttributeError:
        # print(number_error, description)
        ErrorController().add(1, 'Syntactic', '', 'EOF', 'EOF')
Пример #23
0
    def generar_tac(self):
        global report_error
        global report_ast

        DataWindow().clearConsole()
        SymbolTable().destroy()
        ThreeAddressCode().destroy()

        texto = self.entrada.get('1.0', END)
        result = parse(texto)
        print(result)  # Imprime el AST
        report_error = ReportError()

        if len(ErrorController().getList()) > 0:
            messagebox.showerror('ERRORES', 'Se encontraron errores')
        else:

            ambito = Ambito(None)
            for inst in result:
                inst.compile(ambito)

            DataWindow().consoleText(ThreeAddressCode().getCode())
            ThreeAddressCode().writeFile()

            result2 = parse2(texto)  #AST GRAFICO
            report_ast = result2
Пример #24
0
    def compile(self, expression):
        expression1 = self.value.compile(expression)
        type_unary_or_other = self.sign
        temporal = ThreeAddressCode().newTemp()

        try:
            if expression1.data_type != DATA_TYPE.NUMBER:
                print('error')
                return
            dataTemp = f"{temporal} = 0"

            if type_unary_or_other == SymbolsUnaryOrOthers.UMINUS or type_unary_or_other == SymbolsUnaryOrOthers.BITWISE_NOT:
                dataTemp = f"{temporal} = -{expression1.value}"

            elif type_unary_or_other == SymbolsUnaryOrOthers.UPLUS:
                dataTemp = f"{temporal} = {expression1.value}"

            elif type_unary_or_other == SymbolsUnaryOrOthers.SQUARE_ROOT:
                dataTemp = f"{temporal} = sqrt({expression1.value})  # |/"

            elif type_unary_or_other == SymbolsUnaryOrOthers.CUBE_ROOT:
                temporal1 = ThreeAddressCode().newTemp()
                ThreeAddressCode().addCode(f"{temporal1} = 1 / 3")
                dataTemp = f"{temporal} = {expression1.value} ** {temporal1} # ||/"

            ThreeAddressCode().addCode(dataTemp)
            return PrimitiveData(DATA_TYPE.NUMBER, temporal, self.line,
                                 self.column)
        except:
            desc = "FATAL ERROR --- UnaryOrSquareExpressions"
            ErrorController().add(34, 'Execution', desc, self.line,
                                  self.column)
Пример #25
0
    def agregarNuevoTipo(self, tablaAMod, colAMod, nuevoTipo):
        typeChecker = TypeChecker()
        bandera = False
        tableToAlter = typeChecker.searchTable(SymbolTable().useDatabase,
                                               tablaAMod)

        tipoFinal = {
            '_tipoColumna': str(nuevoTipo._tipoColumna),
            '_paramOne': nuevoTipo._paramOne,
            '_paramTwo': nuevoTipo._paramTwo
        }

        for columna in tableToAlter.columns:
            if (columna._name == colAMod):
                bandera = True
                columna._dataType = tipoFinal
                break

        if not bandera:
            desc = f": Undefined column in alter type ()"
            ErrorController().add(26, 'Execution', desc, 0, 0)
            return
        bandera = False
        typeChecker.writeFile()
        pass
Пример #26
0
 def report_errors_ubuntu(self):
     global report_error
     report = open('./team28/dot.txt', 'w')
     report.write(report_error.get_report(ErrorController().getList()))
     report.close()
     os.system('dot -Tpdf ./team28/dot.txt -o ./team28/error.pdf')
     os.system('xdg-open ./team28/error.pdf')
Пример #27
0
    def ejecutar_sql(self):
        global report_error
        global report_ast

        DataWindow().clearConsole()
        SymbolTable().destroy()
        ThreeAddressCode().destroy()

        texto = self.entrada.get('1.0', END)
        result = parse(texto)
        # jsonStr = json.dumps(result, default=lambda o: o.__dict__) #Convierte el AST a formato JSON para poder saber como se esta formando
        # print(result)  # Imprime el AST

        report_error = ReportError()
        if len(ErrorController().getList()) > 0:
            messagebox.showerror('ERRORES', 'Se encontraron errores')
        else:
            result2 = parse2(texto)
            report_ast = result2

            # ---------- TEST ---------
            for inst in result:
                # esto es por los select anidados (subquerys), no encontre otra menera
                # de retornar la tabla dibujada, lo hacia en mi clase
                # pero si lo dejaba ahi me tronaban las subquery,
                # prueben que no les de problema
                if isinstance(inst, Select):
                    result = inst.process(0)
                    if isinstance(result, DataFrame):
                        DataWindow().consoleText(format_df(result))
                    elif isinstance(result, list):
                        DataWindow().consoleText(format_table_list(result))
                else:
                    inst.process(0)
Пример #28
0
    def generar_optimization(self):
        global report_error
        global report_ast
        global report_optimization

        DataWindow().clearConsole()
        OptimizationController().destroy()

        texto = self.entrada.get('1.0', END)
        list_instrucciones = parse_optimizacion(texto)
        # print(result)  # Imprime el AST
        report_error = ReportError()
        report_optimization = ReportOfOptimization()
        if len(ErrorController().getList()) > 0:
            messagebox.showerror('ERRORES', 'Se encontraron errores')
        else:
            for index, inst in enumerate(list_instrucciones):
                if inst != None:
                    result = inst.process(0)
                    regla1(result, list_instrucciones, index)
                    regla2(result, list_instrucciones, index)
                    regla3(result, list_instrucciones, index)
                    regla4y5(result, list_instrucciones, index)
                    regla6(result, list_instrucciones, index)
                    regla7(result, list_instrucciones, index)
            DataWindow().consoleText('CD3 RETURNED: Optimization Finished')
Пример #29
0
 def report_errors_windows(self):
     global report_error
     report = open('dot.txt', 'w')
     report.write(report_error.get_report(ErrorController().getList()))
     report.close()
     os.system('dot -Tpdf dot.txt -o  error.pdf')
     os.startfile('error.pdf')
Пример #30
0
    def compile(self, environment):
        try:
            if self.data_type.lower() == 'integer':
                temp = ThreeAddressCode().newTemp()
                val = self.value.compile(environment).value
                dataTemp = f"{temp} = '{val}'"

                cambio = False
                if val[0] == 't':
                    sub = val[1:]
                    if sub.isnumeric():  # ES UN TEMPORAL
                        dataTemp = f"{temp} = {val}"
                        cambio = True
                if cambio is False:
                    dataTemp = f"{temp} = '{val}'"

                ThreeAddressCode().addCode(dataTemp)
                temporal = ThreeAddressCode().newTemp()
                ThreeAddressCode().addCode(f"{temporal} = int({temp})")
                return PrimitiveData(DATA_TYPE.STRING, temporal, self.line,
                                     self.column)
            else:
                temp = ThreeAddressCode().newTemp()
                val = self.value.compile(environment).value
                dataTemp = f"{temp} = '{val}'"
                ThreeAddressCode().addCode(dataTemp)
                temporal = ThreeAddressCode().newTemp()
                ThreeAddressCode().addCode(f"{temporal} = {temp}")
                return PrimitiveData(DATA_TYPE.STRING, temporal, self.line,
                                     self.column)
        except:
            desc = "FATAL ERROR --- StringFuncs"
            ErrorController().add(34, 'Execution', desc, self.line,
                                  self.column)