![]() |
![]() |
Figura 1: Visão Externa | Figura 2: Visão Interna |
Espaços, saltos de linha e comentários são ignorados (normalmente).
void Mede(int y) { int Altura ; Altura = x + y * 60; /* Um comentário */ }Produto da Análise Léxica: ( PalRes void, PalRes Mede, Simbolo AP, PalRes int, Ident y, Simbolo FP, Simbolo AC, PalRes int, Ident Altura, Simbolo PV, Ident Altura, Simbolo AT, Ident X, Simbolo +, Ident y, Simbolo *, Inteiro 60, Ident PV, Simbolo FP )
A figura abaixo é um exemplo de parse tree.
:= id1 + id2 * id3 inttoreal 60
temp1 := inttoreal(60) temp2 := id3 * temp1 temp3 := id2 + temp2 id1 := temp3
temp1 := id3 * 60.0 id1 := id2 + temp1 x = 50; x = 80; if(x>100) { ==> x = 80; ... return(x); ... } return(x);
MOVF id3, R2 ; Move conteudo da memoria na posicao id3 para registrador R2 MULF #60.0, R2 ; Multiplica R2 pela constante 60 e coloca resultado em R2 MOVF id2, R1 ; Carrega conteudo de id2 em R1 ADDF R2 , R1 ; Adiciona R2 e R1 e colocar resultado em R1 MOVF R1 , id1 ; Salva R1 em id1
Preprocessadores
#define MAXITEM 1000 #define ImpNum($1) printf("%i",$1);
#include <stdio.h>
MOV a, R1
ADD #2, R1 ; b = a + 2;
MOV R1, b0001 01 00 00000000 *
0011 01 10 00000010
0010 01 00 00000100 *Formato da Instrucao . 4 bits - Codigo da Instrucao 0001 = Load 0010 = Store 0011 = Add . 2 bits - Indentifica Registrador . 2 bits - Tag (Modo de Enderecamento, ...) 00 - Memoria Para Registrador Ultimos Bits: Endereco de memoria. 10 - Modo Imediato Ultimos Bits: Valor Constante.Link-Editores
Agrupa varios 'codigos objeto' em um unico 'executavel' Verifica Referencias Externas. Carregador
Modulo do Sistema Operacional que carrega o programa, fazendo o relocamento de enderecos.