Projeto e Implementação de um Compilador para um Processador Didático
Abstract. The project and development of compilers are non-trivial tasks, which require time and effort. This paper aims to describe concepts of compilers, such as: grammar, lexical analysis, syntactic analysis, semantic analysis and intermediate code generation, beyond the design and implementation of a compiler without the aid of automated tools for didactic architecture SIC/XE. Such compiler has purpose to read a file containing code of a program in C, showing step-by-step execution of each step, report any errors present in the code and generate target code.
Resumo. O projeto e o desenvolvimento de compiladores são tarefas não triviais, que demandam tempo e esforço. O presente artigo tem por objetivo descrever conceitos do funcionamento de um compilador, tais como: gramática, análise léxica, análise sintática, análise semântica e geração de código intermediário, além do projeto e implementação de um compilador sem auxílio de ferramentas automáticas para a arquitetura didática SIC/XE. Tal compilador tem a finalidade de ler um arquivo contendo código de um programa em C, mostrando o passo-a-passo da execução em cada etapa, relatar os eventuais erros presentes no código e gerar código alvo.
1. Introdução
A área de desenvolvimento de software necessita cada vez mais de ferramentas que aumentem a abstração e sejam capazes de indicar os erros presentes no código do desenvolvedor, consequentemente aumentando a produtividade. A ferramenta com esta finalidade é um software chamado de compilador.
De uma maneira geral, um compilador é um programa que recebe como entrada um código escrito em uma determinada linguagem de programação – linguagem fonte - e o traduz para um programa equivalente em uma outra linguagem – linguagem alvo, relatando ao usuário, se houver, a presença de erros no programa fonte [Louden 2004].
Os compiladores são implementados para uma determinada linguagem, e o uso de