Traduz códigos escritos em uma linguagem (fonte) para códigos em uma outra linguagem (alvo), normalmente de ``nível mais baixo'' que a primeira (Ver Fig. 1 e Fig. 2).
Agrupa caracteres que aparecem no código fonte em ``palavras'' ou Tokens (Equivalem ao Símbolos Terminais de uma Grámatica). Um Token é uma sequência ``mínima'' de caracteres que possui significado na linguagem em que o código fonte é escrito.
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: ( PalRes1 void, PalRes Mede, Simbolo AP2, PalRes int, Ident y, Simbolo FP, Simbolo AC3, PalRes int, Ident Altura, Simbolo PV, Ident Altura, Simbolo AT4, Ident X, Simbolo +, Ident y, Simbolo *, Inteiro 60, Ident PV, Simbolo FP )
Agrupa token em unidades ``maiores'', que por sua vez, podem ser agrupadas em unidades ainda maiores. Estas unidades equivalem as formas sentenciais e sentencas de uma gramática. Sentenças são representadas, normalmente, através de uma árvore de derivação (parse tree). O análisador sintática é também chamado de parser.
A figura 3 e 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
#define MAXITEM 1000
#define ImpNum($1) printf("%i",$1);
#include <stdio.h>
Fonte:
MOV a, R1
ADD #2, R1 ; b = a + 2;
MOV R1, b
Alvo:
0001 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.
Modulo do Sistema Operacional que carrega o programa, fazendo o relocamento de enderecos.