UNIVERSIDADE TÉCNICA DE MOÇAMBIQUE
ÁREA DE FORMAÇÃO EM CIÊNCIAS TECNOLOGICAS
LICENCIATURA EM ENGENHARIA E GESTÃO DE TECNOLOGIAS DE INFORMAÇÃO
E COMUNICAÇÃO – TIC’s
Introdução à Linguagens de Programação e
Compiladores (LPC)
Maputo, Agosto de 2016
Introdução á Linguagens de Programação e Compiladores
Compilado por Erasmo Buque / 2016
Aula 1 e 2
Estrutura geral de um Compilador
Introdução á Linguagens de Programação e Compiladores
Compilado por Erasmo Buque / 2016
Um compilador é um programa de sistema (computador) que traduz um programa escrito em
uma linguagem de alto nível para um programa equivalente em código de máquina. Em geral,
um compilador não produz directamente um programa equivalente em código de máquina,
porem, um programa equivalente em linguagem assembly que é semanticamente equivalente ao
programa em linguagem de alto nível.
Para desempenhar suas tarefas, um compilador deve executar duas actividades básicas: a Análise
e a Síntese.
Análise
É a primeira fase de um compilador, onde é analisado o código fonte e simultaneamente
reconhecidos a estrutura e o significado do programa de linguagem de alto nível (programa
fonte). Esta fase divide-se em três etapas: Análise Léxica, Análise Sintáctica e Análise
Semântica.
A. Análise Léxica (Análise de Reconhecimento) - o analisador léxico ou analisador de
reconhecimento é o analisador que preocupa-se em:
 Ler o programa fonte caracter por caracter;
 Concatenar caracteres de modo a formar lexemas (tokens);
 Construir as tabelas de lexemas e de símbolos (identificadores);
 Classificar os lexemas.
Nota: o analisador léxico não lé, não concatena, não classifica, nem inclui comentário nas
tabelas de lexemas e de símbolos, isto é, todo comentário e espaço é identificado como estado
morto.
Estrutura de tabela de lexemas:
Lexema Linha Classificação
Introdução á Linguagens de Programação e Compiladores
Compilado por Erasmo Buque / 2016
Estrutura de tabela de símbolos:
Identificador Tipo de Dado Escopo No
de parâmetros Sequência de Parâmetros
Exemplo: Construa tabela de lexemas e de símbolos para o seguinte programa fonte.
public class Aula1{
double x;
public void calcula (double a, double b){
x=a+b;
}
public double resultado (){
calcula(1, 10);
return x;
}
}
Introdução á Linguagens de Programação e Compiladores
Compilado por Erasmo Buque / 2016
Tabela de lexemas
Lexema Linha Classificação
Public 1 Palavra Reservada
Class 1 Palavra Reservada
Aula1 1 Identificador
{ 1 Símbolo
Double 2 Tipo de Dado
X 2 Identificador
; 2 Símbolo
Public 3 Palavra Reservada
Void 3 Tipo de Dado
Calcula 3 Identificador
( 3 Símbolo
Double 3 Tipo de Dado
A 3 Identificador
, 3 Símbolo
double 3 Tipo de dado
B 3 Identificador
) 3 Símbolo
{ 3 Símbolo
X 4 Identificador
= 4 Símbolo
A 4 Identificador
+ 4 Símbolo
B 4 Identificador
; 4 Símbolo
} 5 Símbolo
Public 6 Identificador
Double 6 Tipo de Dado
Resultado 6 Identificador
( 6 Símbolo
) 6 Símbolo
{ 6 Símbolo
Calcula 7 Identificador
( 7 Símbolo
1 7 Número double
, 7 Símbolo
10 7 Número double
) 7 Símbolo
; 7 Símbolo
Return 8 Palavra Reservada
x 8 Identificador
; 8 Símbolo
} 9 Símbolo
} 10 Símbolo
Introdução á Linguagens de Programação e Compiladores
Compilado por Erasmo Buque / 2016
Tabela de Símbolos (tabela de identificadores)
Identificador Tipo de Dado Escopo No
de parâmetro Sequência de parâmetro
Aula1 ----- ----- ----- -----
X double 0 ----- -----
Calcula Void 0 2 Double, double
A Double 0.1 ----- -----
B Double 0.1 ----- -----
Resultado double 0 ----- -----
B. Análise Sintáctica
Este analisador analisa a escrita do programa fonte. É feita em árvores (árvores de derivação
sintáctica). (aulas a seguir)
C. Análise Semântica
Muitos erros no programa não podem ser detectados sintacticamente, pois precisam de contexto.
(aulas a seguir)

Introducao a LPC

  • 1.
    UNIVERSIDADE TÉCNICA DEMOÇAMBIQUE ÁREA DE FORMAÇÃO EM CIÊNCIAS TECNOLOGICAS LICENCIATURA EM ENGENHARIA E GESTÃO DE TECNOLOGIAS DE INFORMAÇÃO E COMUNICAÇÃO – TIC’s Introdução à Linguagens de Programação e Compiladores (LPC) Maputo, Agosto de 2016
  • 2.
    Introdução á Linguagensde Programação e Compiladores Compilado por Erasmo Buque / 2016 Aula 1 e 2 Estrutura geral de um Compilador
  • 3.
    Introdução á Linguagensde Programação e Compiladores Compilado por Erasmo Buque / 2016 Um compilador é um programa de sistema (computador) que traduz um programa escrito em uma linguagem de alto nível para um programa equivalente em código de máquina. Em geral, um compilador não produz directamente um programa equivalente em código de máquina, porem, um programa equivalente em linguagem assembly que é semanticamente equivalente ao programa em linguagem de alto nível. Para desempenhar suas tarefas, um compilador deve executar duas actividades básicas: a Análise e a Síntese. Análise É a primeira fase de um compilador, onde é analisado o código fonte e simultaneamente reconhecidos a estrutura e o significado do programa de linguagem de alto nível (programa fonte). Esta fase divide-se em três etapas: Análise Léxica, Análise Sintáctica e Análise Semântica. A. Análise Léxica (Análise de Reconhecimento) - o analisador léxico ou analisador de reconhecimento é o analisador que preocupa-se em:  Ler o programa fonte caracter por caracter;  Concatenar caracteres de modo a formar lexemas (tokens);  Construir as tabelas de lexemas e de símbolos (identificadores);  Classificar os lexemas. Nota: o analisador léxico não lé, não concatena, não classifica, nem inclui comentário nas tabelas de lexemas e de símbolos, isto é, todo comentário e espaço é identificado como estado morto. Estrutura de tabela de lexemas: Lexema Linha Classificação
  • 4.
    Introdução á Linguagensde Programação e Compiladores Compilado por Erasmo Buque / 2016 Estrutura de tabela de símbolos: Identificador Tipo de Dado Escopo No de parâmetros Sequência de Parâmetros Exemplo: Construa tabela de lexemas e de símbolos para o seguinte programa fonte. public class Aula1{ double x; public void calcula (double a, double b){ x=a+b; } public double resultado (){ calcula(1, 10); return x; } }
  • 5.
    Introdução á Linguagensde Programação e Compiladores Compilado por Erasmo Buque / 2016 Tabela de lexemas Lexema Linha Classificação Public 1 Palavra Reservada Class 1 Palavra Reservada Aula1 1 Identificador { 1 Símbolo Double 2 Tipo de Dado X 2 Identificador ; 2 Símbolo Public 3 Palavra Reservada Void 3 Tipo de Dado Calcula 3 Identificador ( 3 Símbolo Double 3 Tipo de Dado A 3 Identificador , 3 Símbolo double 3 Tipo de dado B 3 Identificador ) 3 Símbolo { 3 Símbolo X 4 Identificador = 4 Símbolo A 4 Identificador + 4 Símbolo B 4 Identificador ; 4 Símbolo } 5 Símbolo Public 6 Identificador Double 6 Tipo de Dado Resultado 6 Identificador ( 6 Símbolo ) 6 Símbolo { 6 Símbolo Calcula 7 Identificador ( 7 Símbolo 1 7 Número double , 7 Símbolo 10 7 Número double ) 7 Símbolo ; 7 Símbolo Return 8 Palavra Reservada x 8 Identificador ; 8 Símbolo } 9 Símbolo } 10 Símbolo
  • 6.
    Introdução á Linguagensde Programação e Compiladores Compilado por Erasmo Buque / 2016 Tabela de Símbolos (tabela de identificadores) Identificador Tipo de Dado Escopo No de parâmetro Sequência de parâmetro Aula1 ----- ----- ----- ----- X double 0 ----- ----- Calcula Void 0 2 Double, double A Double 0.1 ----- ----- B Double 0.1 ----- ----- Resultado double 0 ----- ----- B. Análise Sintáctica Este analisador analisa a escrita do programa fonte. É feita em árvores (árvores de derivação sintáctica). (aulas a seguir) C. Análise Semântica Muitos erros no programa não podem ser detectados sintacticamente, pois precisam de contexto. (aulas a seguir)