def AnalyseCode(self): self.ui.textResultados.setPlainText('') code = self.ui.textCodigoCOOL.toPlainText() Utils.Print(CODIGO, LENGTH_CONSOLE) print(code) Utils.Print(LEXER, LENGTH_CONSOLE) self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}{Utils.GetString(LEXER, 64)}\n' ) token_list = Tokenizer(code) # PrintTokens(token_list) tokens = '\n'.join(repr(token) for token in token_list) print(tokens) self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}{tokens}\n') Utils.Print(PARSER, LENGTH_CONSOLE) self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}{Utils.GetString(PARSER, 64)}\n' ) parse, operations = CoolParser(token_list) if not operations: self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}{UNEXCEPTED_TOKEN % (parse.lex, parse.line, parse.column)}\n' ) print(UNEXCEPTED_TOKEN % (parse.lex, parse.line, parse.column)) self.ui.tabWidgetCodigo.setTabEnabled(1, True) self.ui.tabWidgetCodigo.setCurrentIndex(1) return productions = '\n'.join(repr(x) for x in parse) print(productions) self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}{productions}\n') Utils.Print(AST, LENGTH_CONSOLE) self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}{Utils.GetString(AST, 64)}\n' ) ast = Utils.EvaluateReverseParse(parse, operations, token_list) formatter = FormatVisitor() tree = formatter.visit(ast) print(tree) self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}{tree}\n') Utils.Print(COLECCIONANDO_TIPOS, LENGTH_CONSOLE) self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}{Utils.GetString(COLECCIONANDO_TIPOS, 68)}\n' ) errors = [] collector = TypeCollector(errors) collector.visit(ast) context = collector.context print('ERRORES :', errors) print('CONTEXTO :') print(context) self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}ERRORES : [\n') for error in errors: self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()} {error}\n') self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}]\n') self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}CONTEXTO :\n') self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}{context}\n') Utils.Print(CONSTRUYENDO_TIPOS, LENGTH_CONSOLE) self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}{Utils.GetString(CONSTRUYENDO_TIPOS, 67)}\n' ) builder = TypeBuilder(context, errors) builder.visit(ast) print('ERRORES : [') for error in errors: print(SPACE * 4, error) print(']') print('CONTEXTO :') print(context) self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}ERRORES : [\n') for error in errors: self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()} {error}\n') self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}]\n') self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}CONTEXTO :\n') self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}{context}\n') Utils.Print(CHEQUEANDO_TIPOS, LENGTH_CONSOLE) self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}{Utils.GetString(CHEQUEANDO_TIPOS, 67)}\n' ) checker = TypeChecker(context, errors) scope = checker.visit(ast) print('ERRORES : [') for error in errors: print(SPACE * 4, error) print(']') print('CONTEXTO :') print(context) self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}ERRORES : [\n') for error in errors: self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()} {error}\n') self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}]\n') self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}CONTEXTO :\n') self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}{context}\n') Utils.Print(INFERENCIA_DE_TIPOS, LENGTH_CONSOLE) self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}{Utils.GetString(INFERENCIA_DE_TIPOS, 69)}\n' ) inferences = [] inferer = TypeInferer(context, errors, inferences) while inferer.visit(ast, scope): pass print('INFERENCIAS : [') for inference in inferences: print(SPACE * 4, inference) print(']') print('CONTEXTO :') print(context) print(f'SCOPE : {scope}') self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}INFERENCIA : [\n') for inference in inferences: self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()} {inference}\n') self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}]\n') self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}CONTEXTO :\n') self.ui.textResultados.setPlainText( f'{self.ui.textResultados.toPlainText()}{context}') self.ui.tabWidgetCodigo.setTabEnabled(1, True) self.ui.tabWidgetCodigo.setCurrentIndex(1)