Please use this identifier to cite or link to this item: http://hdl.handle.net/1843/30386
Full metadata record
DC FieldValueLanguage
dc.contributor.advisor1Fernando Magno Quintão Pereirapt_BR
dc.contributor.advisor1Latteshttp://lattes.cnpq.br/4608001746330875pt_BR
dc.contributor.advisor-co1Rodrigo Geraldo Ribeiropt_BR
dc.contributor.referee1Fábio Mascarenhaspt_BR
dc.contributor.referee2Fernando José Castor de Lima Filhopt_BR
dc.contributor.referee3Renato Antônio Celso Ferreirapt_BR
dc.contributor.referee4Rodolfo Sérgio Ferreira de Resendept_BR
dc.creatorLeandro Terra Cunha Melopt_BR
dc.creator.Latteshttp://lattes.cnpq.br/7679788114818348pt_BR
dc.date.accessioned2019-10-15T16:03:14Z-
dc.date.available2019-10-15T16:03:14Z-
dc.date.issued2019-05-24-
dc.identifier.urihttp://hdl.handle.net/1843/30386-
dc.description.abstractType inference is a feature that is common to a variety of programming languages. While, in the past, it has been prominently present in functional languages (e.g., ML andHaskell),today,manyobject-oriented/multi-paradigmlanguageslikeC#andC++ offer, to a certain extent, such a feature. Nevertheless, whole-program type inference is still an unsolved problem in C. The first difficulty encountered when tackling this problem is the fact that parsing C requires, not only syntactic, but also semantic information. Yet, greater challenges emerge due to C’s intricate type system. In this work, we present a solution to this problem: a unification-based approach that lets us infer types that are not declared. As a primary application of our technique, we investigate the reconstruction of partial C programs. Incomplete source code naturally appears in software development: during design, and while evolving, testing and analyzing programs. Therefore, the ability to understand it is a valuable asset. Reconstructing a partial program into a complete well typed one can: (i) enable static analysis tools in scenarios where components may be absent; (ii) improve precision of static analysis tools that require no build-specifications; (iii) allow stub-generation and testing tools to work on code snippets; and (iv) assist programmers on the extraction of data-structures from algorithms. We evaluate our technique on code from a variety of C libraries such as GNU’s Coreutils, GNULib, GNOME’s GLib, and GDSL; from implementations of a book; and on snippets from popular projects like CPython, FreeBSD, and Git.pt_BR
dc.description.resumoA inferência de tipos é uma funcionalidade comum a diversas linguagens de programação. Enquantoque,nopassado,elaerapredominanteemlinguagensfuncionais(e.g., ML e Haskell), hoje em dia muitas linguagens orientadas a objeto ou multi-paradigmas tais como C# e C++ oferecem tal recurso. Ainda assim, a inferência de tipos para programas inteiros, não restrita apenas a expressões isoladas, continua sendo um problema em aberto no âmbito de C. A primeira dificuldade a ser driblada ao abordar esse problema é o fato da análise sintática dessa linguagem requerer, também, informações semânticas sobre programa. Além disso, inúmeros desafios complexos emergem ao longo do processo devido ao intricado sistema de tipos de C. Neste trabalho, apresentamos uma solução para este problema: uma abordagem baseada no algoritmo de unificação que nos permite inferir a estrutura de tipos da linguagem C. Como principal aplicação de nossa técnica, investigamos a reconstrução de programas parciais. Código-fonte incompleto aparece naturalmente durante o desenvolvimento de software: nas etapas de projeto, evolução, testes, manutenção e, inclusive, visando a análise de programas. Portanto, a capacidade de entender fragmentos de código-fonte é um ativo valioso. Haja vista a variedade de tarefas nas quais tal conhecimento pode ser utilizado: para (i) habilitar ferramentas de análise estática em cenários onde componentes de software estejam inacessíveis; (ii) melhorar a precisão de ferramentas de análise estática que não exigem configurações extras/especiais; (iii) permitir que ferramentas para geração de testes e stubs possam ser aplicadas sem a necessidade de compilar todo um projeto; e (iv) auxiliar programadores na extração de estruturas de dados a partir de algoritmos. Nossa técnica foi avaliada em várias bibliotecas C, tais como o GNU Coreutils, a GNULib, o GLib do GNOME e a GDSL; em implementações disponíveis em um livro texto; e em trechos de código retirados de projetos como CPython, FreeBSD e Git.pt_BR
dc.languageporpt_BR
dc.publisherUniversidade Federal de Minas Geraispt_BR
dc.publisher.countryBrasilpt_BR
dc.publisher.departmentICX - DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃOpt_BR
dc.publisher.programPrograma de Pós-Graduação em Ciência da Computaçãopt_BR
dc.publisher.initialsUFMGpt_BR
dc.rightsAcesso Abertopt_BR
dc.subjectInferência de tipospt_BR
dc.subjectLinguagens de programaçãopt_BR
dc.subject.otherComputaçãopt_BR
dc.subject.otherAnálise estáticapt_BR
dc.titleType inference for C: applications to the analysis of incomplete programspt_BR
dc.typeTesept_BR
Appears in Collections:Teses de Doutorado

Files in This Item:
File Description SizeFormat 
LeandroTerraCunhaMelo.pdfAberto2.78 MBAdobe PDFView/Open


Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.