O back-end de um compilador agrupa todo um conjunto de tarefas cuja implementação é intrinsecamente dependente das características do processador para o qual se pretende gerar código. A rápida evolução da industria dos processadores e microcontroladores levou esta área de desenvolvimento de software a realizar fortes investimentos na pesquisa de meios que permitissem dar uma resposta rápida e de qualidade à procura verificada.
É dentro deste contexto que surge o tema e o trabalho desenvolvido ao longo desta tese de mestrado, que pretende de alguma forma sintetizar o que já se encontra feito e propor algumas soluções, que apesar de individualmente não serem originais permitem, quando em conjunto, vislumbrar alternativas aos sistemas já concebidos e avançar um pouco mais na área de investigação dos geradores de código final e optimizadores.
O trabalho aqui descrito é extremamente abrangente para uma qualquer tese, cobrindo todas as áreas do processo de compilação a partir da análise semântica até à geração do código máquina, passando pela apresentação de modelos de compiladores, representação da informação, sistemas de análise de fluxo de controlo e de dados, alocação de registos local e global, selecção de instruções e geração de selectores, optimização de código a vários níveis, etc.
É ainda de referir que do trabalho desenvolvido resultou o Back-End Development System, que como o nome indica é um sistema de apoio ao desenvolvimento das tarefas de back-end de um compilador. The back-end of a compiler gathers a group of tasks, whose implementation is
directly dependent on the features of the processor for which machine code is intended
to be generated. The fast evolution of processors and micro-controllers industry lead
this area of software development to perform strong investments in the research of
means, which would give a fast and proper answer to the demand.
It is within this context that the theme and the work carried on through this thesis
emerges. The aim of this work is to synthesise what has already been done and to give
some solutions which, although individually not original, when put together, they allow
alternatives to the pre-established systems and move on a little further in the research of
generators of final code and optimisers.
This work is extremely wide-ranging, covering all areas of the compiling process,
going from the semantic analyses till the generation of machine code. It also contains
the presentation of models of compilers, representation of information, control and data
flow analysis, local and global registers allocation, instructions selection and generation
of selectors, code optimisation at several levels, etc.
It is also important to refer that from the development work emerged the Back-End
Development System, which, as the name itself indicates, is a software system to
support development of back-end tasks of a compiler.