Skip to content

Trabalho desenvolvido durante a disciplina de Compiladores

Notifications You must be signed in to change notification settings

pixel-debug/Compilador

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

81 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Compilador



Compilador é um processador de linguagens. Um programa que traduz um programa escrito em uma linguagem (linguagem fonte) e gera um programa equivalente escrito em outra linguagem (linguagem alvo ou linguagem objeto).

Suas funcionalidades são divididas em duas etapas: análise e síntese.


Análise

  • Também denominada de front-end do compilador.
  • O compilador subdivide o programa fonte e o submete a análise a fim de verificar sua correção conforme a linguagem de programação fonte.
  • Compreende análise léxica, análise sintática e análise semântica.
  • Na presença de uma não conformidade com as especificações da linguagem fonte, o compilador apresenta mensagem esclarecedora do erro.
  • O compilador armazena informações sobre o programa fonte em uma estrutura denominada tabela de símbolos.

Síntese

  • Também denominada de back-end do compilador.
  • O compilador constroi o programa objeto com base na representação intermediária (código intermediário) e nas informações da tabela de símbolos.
  • Alguns compiladores podem realizar também otimizações nos código gerados


Análise Léxica

  • A primeira fase do compilador é a análise léxica ou leitura (scanning).
  • O analisador léxico lê o arquivo do programa fonte, caractere a caractere, e os agrupa em sequências significativas denominadas lexemas.
  • Para cada lexema obtido do código fonte, o analisado léxico gera um token no formato abaixo. Esse token é passado para o analisador sintático.

Nela, também foi implementada a tabela de símbolos, uma estrutura de dados na qual são armazenadas informações sobre os nomes utilizados no programa:

  • Nome, tipo, escopo, espaço de memória alocado
  • No caso de funções: quantidade e tipos de argumentos , tipo de retorno, método de passagem de parâmetro

A estrutura deve ser projetada de forma a permitir que o compilador armazene e recupere rapidamente dados de nomes encontrados no programa fonte.



Análise Sintática

A segunda fase do compilador é a análise sintática. Ele recebe como entrada os tokens identificados pelo analisador léxico e cria uma representação da estrutura gramatical da sequência de tokens.

  • A representação utilizada pelo analisador sintático é uma árvore sintática.
  • O analisador sintático verifica se a ordem em que os tokens aparecem no código fonte está de acordo com a sintaxe da linguagem.


Análise Semântica

A terceira fase do compilador. O analisador semântico utiliza a tabela de símbolos e a árvore sintática gerada pelo analisador sintático para verificar se o programa está semanticamente de acordo com as especificações da linguagem fonte.

Sua atividade principal realizada pelo analisador semântico é a verificação de tipos: consiste em verificar se cada operador possui operandos compatíveis



Geração de Código Intermediário1

É uma representação intermediária (código intermediário) de baixo nível pode ser gerada pelo compilador a fim de facilitar a tradução para a linguagem alvo.

Exemplo de representação intermediária: código de três endereços.

  • Sequência de instruções do tipo assembly
  • Cada instrução possui até três operandos
  • Cada instrução de atribuição possui no máximo um operador do lado direito
  • O compilador precisa gerar um nome temporário para guardar o valor computado



Execução

Para a execução do arquivo utilize o codigo no terminal:

  * java -jar /ArquivoJAR/Compilador.java

Envolvidos:

Alunos:
Bruna Gomes
Diego Simões
Marina Bernardes

Footnotes

  1. O gerador de código está em construção

About

Trabalho desenvolvido durante a disciplina de Compiladores

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages