Você está na página 1de 5

Avaliação 1

Compiladores
Professora Tatiane Fernandes

Nome: Erik Bernardo Da Silva - 482148


Nome: Francisco Keven Almeida Da Silva - 500699

1. Analisador Léxico
1.1. A análise léxica é a primeira fase de um compilador também
conhecido como leitura(scanning). O analisador léxico lê o
código-fonte e agrupa em sequência caracteres de acordo com o
padrão correspondente de um token, é essa abordagem é conhecida
como lexema. Também é chamado de instância de um token.
formato do token: <nome-token, valor-atributo>.
O analisador léxico divide essa sintaxe em uma série de tokens que
são as menores unidades com significado no programa-fonte. Um
token pode ser pensado como sendo similar a uma palavra, vale
ressaltar que nesse processo é removido qualquer espaço extra ou
comentário escrito no código-fonte.
A imagem abaixo, demonstra o início do fluxo de compilação, que
seria desde o agrupamento de código fonte em lexema, análise léxica
e geração de token e sua etapa posterior análise sintaxe.
Exemplo 1.2 retirado do livro.
position = initial + rate * 60
Tabela de símbolos:
Lexema Tipo IDs
position Variável 1
= Operador
initial Variável 2
+ Operador
rate Variável 3
* Operador
60 Número

2. Analisador Sintático
2.1. A análise sintática é a etapa do compilador que ocorre após a análise
léxica. O objetivo da análise sintática é determinar a estrutura sintática
do código-fonte que está sendo compilado. Para isso, a análise
sintática utiliza o fluxo de tokens produzido pela análise léxica para
validar as informações ou tokens.
Uma representação comum é uma árvore de sintaxe(As árvores na
ciência da computação são normalmente desenhadas de cabeça para
baixo, com a raiz no topo) onde cada nó em seu interior representa
uma operação, e os filhos do nó representam os argumentos da
operação, logo abaixo temos uma imagem que representa a árvore
sintaxe do exemplo 1.2
3. Analisador Semântico
3.1. A análise semântica utiliza a árvore de sintaxe e as informações na
tabela de símbolos para verificar a consistência semântica do
programa fonte com a definição da linguagem. Essa etapa de análise
do código fonte, reúne informações sobre os tipos dos dados e as
salva na tabela de símbolos ou na árvore de sintaxe, para uso
subsequente na geração de código intermediário.
Uma das responsabilidades do analisador semântico é verificar se os
operadores estão com os operandos especificados.
As especificações de linguagem podem permitir conversões de tipos
chamadas coerções.

Exemplo 3.1 retirado do livro.

Logo abaixo temos a imagem que representa a árvore semântica.


4. Gerador De Código
4.1. O gerador de código recebe como entrada uma representação
intermediária do programa fonte e o mapeia em linguagem objeto. Se
a linguagem objeto for código de máquina de alguma arquitetura é
necessário selecionar registradores ou ou localizações de memórias
para cada variável usada pelo programa. Depois, os códigos
intermediários são traduzidos em sequências de instruções de
máquina que realizam a mesma tarefa. Um aspecto crítico ao gerar
código é a atribuição dos registradores às variáveis do programa.

Exemplo usando dois registradores R1 e R2 o código mostrado no


exemplo 3.1 pode ser traduzido para o seguinte código de máquina.
Cada operando de cada instrução especifica um destino. O F em cada
instrução informa que manipula números de ponto flutuante. O código mostrado no
exemplo 3.1, carrega o conteúdo do endereço id3 no registrador R2, depois o
multiplica pela constante de ponto flutuante 60.0 . O “#” significa que o valor 60.0
deve ser tratado como uma constante imediata. A terceira instrução move id2 para o
registrador R1, e a quarta o soma com o valor previamente calculado no registrador
R2, Finalmente, o valor no registrador R1 é armazenado no endereço de id1.

Você também pode gostar