Escolar Documentos
Profissional Documentos
Cultura Documentos
Análise Léxica
• O papel do Analisador léxico no compilador
• Definições (token/lexema/padrão)
• Implementação do analisador léxico
3
ANÁLISE LÉXICA
O Papel do analisador léxico
4
Análise Léxica
• Também chamado de Scanner
• Interface entre o programa fonte e o compilador
• Interage com a tabela de símbolos inserindo
informações
5
6
Análise Léxica
Arquitetura de um compilador
Analisador
Sintático
Back-end
Analisador
Léxico
7
Análise Léxica
Atividade:
• Lê o fonte caractere a caractere juntando-os em
unidades atômicas chamadas itens léxicos
(palavras válidas na linguagem lida) .
• Reconhece padrões de palavras e os classifica.
8
Análise Léxica
Porque realizar análise léxica?
Realização da classificação funcional das palavras
de uma linguagem.
9
Análise Léxica
Classes de palavras
Em língua portuguesa
- Verbo
- Adjetivo
- Advérbio
- Substantivo
- ...
10
Análise Léxica
Classes de palavras
Em Compiladores
- Identificador - ID
- Constante Literal
- Constante numérico
§ Inteiro
§ Real
- Palavra reservada
- Operador relacional
- Operador aritmético
- Operador lógico
- Outros
11
Análise Léxica
Característica das Linguagens computacionais
para compilação
• Ausência de ambiguidade
– Permite o processamento eficaz
• A interpretação é sempre a mesma seja qual for o
compilador, a arquitetura ou o processador utilizado
12
ANÁLISE LÉXICA
Definições
13
Análise Léxica
Definição
Exemplos:
soma, aux, 12, 'a', “comentario”, if, while
14
Análise Léxica
Definição
Exemplos:
• soma, aux, => IDENTIFICADOR ou id
• +,-,*,/ => operadores aritméticos
• if, while, repeat => palavras reservadas
Análise Léxica
Definições
Análise Léxica
Exemplos
Token Lexema Padrão Descrição
ANÁLISE LÉXICA
Funcionalidade
18
Análise Léxica
Então, qual a função do analisador léxico?
Reconhecedor tokens
Como?
Realizando a leitura caracter a caracter do programa
fonte;
Implementando a máquina reconhecedora de
padrões.
19
Análise Léxica
Pra quê?
• Verificar se as palavras utilizadas pertencem ou
não a linguagem analisada;
• Atender à chamada do analisador sintático que
solicita tokens sempre que precisar.
• Realizar detecção de erros:
- Caracteres inválidos
- Literais incompletas
- Identificadores fora do padrão
20
Análise Léxica
Solicita token
Analisador
Sintático
Analisador
Token
Léxico
leitura Fluxo de
caracteres
Texto fonte
21
Análise Léxica
Outras tarefas desempenhadas pelo Léxico
Análise Léxica
Praticando:
Realize a separação dos lexemas do arquivo fonte
abaixo:
if (x==y)
z=1;
else z=2;
Código Fonte
23
Análise Léxica
Lexemas:
If | ( | x | == | y| )|z | = | 1 |
; | else | z |= | 2 | ; | EOF
24
Análise Léxica
Alguns tipos de tokens – geral (depende da definição da
linguagem)
Análise Léxica
Alguns tipos tipos de tokens – geral (depende da definição
da linguagem)
Análise Léxica
Praticando:
Para o código abaixo quantos tokens de cada
tipo temos?
if (x==y)
z=1;
else z=2;
Código Fonte
27
Análise Léxica
Para o código anterior quantos tokens de cada tipo temos?
id
Espaço
num
Delimitador
op_relacional
Fim_de_arquivo
ab_parênteses
fc_parênteses
if
else
Outros
28
Análise Léxica
Analisador léxico separado do Sintático
Análise Léxica
Análise Léxica
Ambiguidade
Linguagem FORTRAN
- Espaços em branco dentro de um token são ignorados
DO5I=1,25 -- 7 tokens
“DO” “5” “I” “=” “1” “,” “25”
DO5I=1.25 – 3 tokens
“DO5I” “=” “1.25”
31
Análise Léxica
Ambiguidade
PL/I – Programming Language One
Palavras-chave da linguagem não são reservadas
Análise Léxica
Mais algumas considerações
• Tem contato com todo o texto da linguagem-fonte;
• Um dos módulos com maior utilização;
• Um dos fatores determinísticos para a velocidade
de compilação;
33
Análise Léxica
Erros Léxicos
• Todas as palavras FORA dos padrões especificados
para palavras pertencentes à linguagem são
detectados.
• O analisador sinaliza um erro e retorna a posição e a
linha do código da ocorrência.
34
ANÁLISE LÉXICA
Implementação do analisador
35
Análise Léxica
Implementando o analisador Léxico
• Um analisador léxico poderia ser implementado
através da formalização dos padrões de formação
das palavras possíveis da linguagem por
reconhecedores de linguagens livres de contexto
(LLC). Entretanto, as LLC são complexas demais
para um problema que pode ser resolvido através
do uso de formalismos mais simples, por isso a
adoção das linguagens regulares para a
implementação da análise léxica.
36
Análise Léxica
Implementando o analisador Léxico
• O analisador léxico separado do sintático permite
que o projeto de compilador seja mais simples
aproveitando características de linguagens e
ganho de velocidade de processamento para a
compilação.
37
Análise Léxica
Implementando o analisador Léxico
Universo das linguagens – Noam Chomsky
Irrestritas
(Tipo 0)
complexidade
Sensíveis ao Contexto
(Tipo 1)
Livres de Contexto
(Tipo 2)
Regulares
(tipo 3)
38
Análise Léxica
Implementando o analisador Léxico
• Para o analisador léxico, o programa fonte é uma
sequência de palavras de uma linguagem regular.
• O conjunto de tokens de uma linguagem de programação é
uma linguagem regular.
• Então, escreve-se os padrões das palavras possíveis da
linguagem computacional utilizando os formalismos para
linguagens regulares.
39
Análise Léxica
Implementando o analisador Léxico
As linguagens regulares ou do Tipo 3 são
representadas através dos formalismos:
1. Expressões regulares
2. Autômatos finitos
3. Gramáticas regulares
Análise Léxica
Implementando o analisador Léxico
Transformações – Linguagens Regulares (LFA)
Kleene
Subconjuntos
AUTÔMATO FINITO
DETERMINÍSTICO
Hopcroft
Análise Léxica
Implementando o analisador Léxico
A análise léxica é um processo que pode ser
formalmente descrita através de expressões
regulares, produzindo uma rotina que realiza essa
análise. Essa rotina modela um autômato finito
determinístico derivado matematicamente das
expressões regulares especificadas.
- Geradores de analisadores léxicos.
42
Análise Léxica
Geradores de analisadores léxicos
• Ferramentas de automação do processo de criação do
autômato finito e reconhecimento de sentenças regulares a
partir de ER;
• Conhecidas como “Lex”;
• Trabalhoso dependendo dos padrões da linguagem
43
Análise Léxica
Geradores de analisadores léxicos
• Recebem como entrada uma especificação, conjunto de ER;
• Gera automaticamente um autômato determinístico que
reconhece as palavras da linguagem definida pela ER;
• Gera um algoritmo que lê caracteres de um arquivo
especificado;
• Verifica o casamento das sentenças com os padrões definidos
na especificação.
44
Análise Léxica
Alguns geradores de analisadores léxicos
FERRAMENTA
Flex Para C
http://flex.sourceforge.net/
Flex++ Para C++
45
ANÁLISE LÉXICA
Implementação – MÃO NA MASSA
46
Análise Léxica
Implementação - Mão na massa
Análise Léxica
Implementação
Definição da linguagem exemplo Wipy:
- Σ = {a, b,...,z, =,@,$ }
- Definição regular: L = a | b | c | ... | z
- Palavras reservadas: início, fim, escreva, leia
- Identificadores: @L+
- Atibuição: =
- Fim de arquivo: $
- Erro – Quaisquer símbolos que não estejam presentes
no alfabeto.
48
Análise Léxica
Implementação
Análise Léxica
Implementação - Funcionamento do analisador
Autômato Finito Determinístico
id
L
1 4 L
@ Tabela de Transição
Espaço em @ L = $ Espaço ≠Σ
branco ou \n
ou \n = 2 Atribuição
0 1 5 2 3 0 6
0
1 4
$
2
≠Σ
L 3 EOF 3
4 4
3
6 3
5 5 5
L Provável palavra
ERRO reservada 6
50
Análise Léxica
Implementação - Funcionamento do analisador
PALAVRAS RESERVADAS
- As palavras reservadas inicialmente são armazenadas
na tabela de símbolos.
• Elas podem ser identificadas pelo autômato como
identificadores, porém ao verificar que já se encontram na
tabela de símbolos, o analisador léxico retornará o que está
na armazenado na tabela de símbolos.
51
Análise Léxica
Implementação - Funcionamento do analisador
PALAVRAS RESERVADAS
- Palavras reservadas recebem como token o mesmo
nome do lexema.
• Nas demais análises é importante saber de qual palavra
reservada se trata para que verificações sintáticas e
semânticas sejam realizadas.
52
Análise Léxica
Análise Léxica
Implementação - Funcionamento do analisador
• O analisador léxico é um módulo controlado pelo analisador
sintático que decidirá quando o scanner entrará em ação.
• A cada chamada ao léxico, este realizará a escação da entrada
(código fonte) com caminhamento pelo autômato. Ao reconhecer
um token,
se for id
então se consultar a tabela de símbolos = V
então retornar a entrada da tabela referente ao token
senão inserir nova entrada na tabela para o id encontrado
senão retornar o token e seus atributos
54
Análise Léxica
Tabela de Transição
@ L = $ Espaço ≠Σ
ou \n
0 1 5 2 3 0 6 A saída do analisador
1 4
2
Código Fonte Saída do Léxico
3
início início, início
4 4 leia @a leia, leia
5 5 leia @b id, @a
6 @b=@a leia, leia
escreva @a id, @b
Tabela de símbolos escreva @b id, @b
3 atribuição ,=
token lexema id, @a
fim
início início escreva, escreva
fim fim id, @a
escreva, escreva
leia leia id, @b
escreva escreva ERRO, 3 – Caractere inválido
na linguagem, linha 7, coluna 1
id @a fim ,fim
id @b
55
Análise Léxica
Implementando o analisador
Tabela de símbolos Saídas do Léxico
token lexema
início, início
início início
fim fim leia, leia
leia leia
escreva escreva id, @a
Código Fonte … …
leia, leia
início
leia @a
…
id, @b
leia @b
@a=@a+@b
Escreva @a
Escreva @b Analisador Léxico
3
fim
56
Análise Léxica
Para estudar
LIVRO DO DRAGÃO
Capítulo 3
- Itens:
3.1 – tokens /lexemas/padrões
3.3 – explica sobre expressões e definições regulares
3.4 – reconhecendo tokens → implementação
3.6 – autômatos finitos determinísticos (AFD) e não determinísticos
(AFND)
3.7 – transformação de AFND em AFD e geração de autômatos a partir
de expressões regulares
3.9 – otimização de autômatos, por exemplo, minimização de estados