Escolar Documentos
Profissional Documentos
Cultura Documentos
COMPILADORES
Conceitos de Linguagens de
Programação e Análise Léxica
LINGUAGENS E COMPILADORES
Agenda:
aplicações
desenvolvedores
ARQUITETURA DE VON NEUMANN
COMPUTADOR E LINGUAGENS
• Um computador pode ser representado por:
• uma máquina virtual, capaz de executar operações mais abstratas
(representadas através de uma linguagem de programação)
• uma máquina real, capaz de executar um determinado conjunto de
operações concretas (expressas em linguagem de máquina)
máquina
vitual mapeamento
L0
DEFINIÇÃO
• Compilador: Um programa de computador que
traduz código escrito em uma determinada
linguagem (código-fonte) em código escrito em
outra linguagem (linguagem-objeto).
Exemplos:
• Traduzir de C++ para C
• Traduzir de Java para JVM
• Traduzir de C para C (Por que?) Para tornar o código mais
eficiente, menor, mais rápido, ou mesmo medir
desempenho).
DEFINIÇÃO
• Compilador: Um programa de computador que
traduz código escrito em uma determinada
linguagem (código-fonte) em código escrito em
outra linguagem (linguagem-objeto).
Exemplos:
• Traduzir de C++ para C
• Traduzir de Java para JVM
• Traduzir de C para C (Por que? Para tornar o
código mais eficiente, menor, mais rápido,
ou mesmo medir desempenho).
ESTRUTURA LÓGICA Árv. sint.
Código e tabela
fonte Analisador Tokens Analisador Árvore Analisador símbolos
Léxico Sintático sintática Semântico
Identifica palavras Identifica estrutura Identifica Tipos, etc.
Operadores, números, Expressões, declarações,
etc. etc.
Tokens etc.
Nome de
variáveis Números Palavras-chave
• Analisador Léxico
• Recebe como entrada um string e retorna
tokens
• Retira símbolos sem valor sintático/
semântico
Slide extraído de Clauirton Siebra – UFPB “Construção de Compiladores”
DEFINIÇÃO
• Entrada: Arquivo texto contendo os strings segundo
alguma codificação (ASCII, UTF-8, etc.).
• Saída: Tokens - representação dos lexemas (objetos
léxicos da linguagem, ex.: IF, ELSE, etc.) sob a forma
de estrutura de dadosclasse, valor.
• classe: indica a classificação que pode ser
número, identificador, palavra-reservada,
etc.
• valor: o valor do token, por exemplo se for
número seu valor numérico – “12” 12.
DEFINIÇÃO
• Os tokens usualmente são definidos pelo seu lexema
(string ou sequência de caracteres que compõem um
único token) e atributos adicionais.
• Os tokens podem ser entregues ao parser como tuplas
na forma <a, b,..., n > assim, a entrada:
a=b+3
• poderia gerar as tuplas <classe, valor>:
<id, a> <=,> <id, b> <+,> <num, 3>
• note “a” e “b” podem ser ponteiros
para outra estrutura de dados (tabela de
símbolos) e que alguns tokens não
necessitam atributos adicionais.
Slide modificado de Maurício Rodrigues de Morais – “Compiladores”
OBJETIVO
• Remoção de espaços em branco e
comentários.
• Identificação de constantes.
• Identificação de palavras-reservadas
(construções da linguagem).
• Reconhecimento dos identificadores.
• Separação entre o analisador sintático
e a representação da entrada.
Slide extraído de Maurício Rodrigues de Morais – “Compiladores”
CLASSES DE TOKENS
• As linguagens de programação usualmente
distinguem certas classes ou tipos de tokens:
• palavras-reservadas
• operadores
• identificadores
• números
• literais
• símbolos de pontuação
Slide extraído de Maurício Rodrigues de Morais – “Compiladores”
ATRIBUTOS DOS TOKENS
• Quando um lexema é reconhecido por um
padrão, o analisador léxico deve
providenciar outras informações adicionais
(atributos) conforme o padrão.
Analisador
lexema classe Gramatical
Analisador token
Léxico atributos
Geração de
Código
0 0
3 1
11 1 13
10
1 2
4
5
6
7 8 . 9
12 14
15 16
0 0
1 1
5,7,2,3,4,8 13,15,10,11,12,16
1 1
1,2,3,4,8 1 9,10,11,12,16 1
0 0
0 6,7,2,3,4,8 0 14,15,10,11,12,16
0 0
1 1
2 5
1 1
1 1 4 1
0 0
0 3 0 6
0 0