Você está na página 1de 17

Universidade Estadual de Feira de Santana

Departamento de Ciências Exatas

Análise Léxica

Profa. Fabiana Cristina Bertoni


fcbertoni@gmail.com
Funções do Analisador Léxico
• Ler os caracteres de entrada do programa-fonte

• Agrupar tais caracteres em Lexemas

• Identificar os Tokens correspondentes aos lexemas

• Produzir como saída uma sequencia de tokens para


cada lexema do programa fonte

2
Funções do Analisador Léxico
• Outras funções do Analisador Léxico:

• Remover comentários e caracteres não


imprimíveis (espaço em branco, tabulação, código
de nova linha)

• Fazer as primeiras inserções na Tabela de


Símbolos

• Diagnóstico de erros

3
Definições
• Token: é cada uma das unidades lógicas do programa fonte.
Exemplo de tokens:
• Identificadores
• Palavras reservadas
• Operadores
• Números

São representados internamente por três informações:


• Classe do token
• Valor do token
• Posição do token

• Lexema: é a cadeia de caracteres que representa um token.

4
Definições
Token Lexema
Exemplo: identificador soma
soma = a + b; operador de atribuição =
identificador a
operador dor de soma +
identificador b
delimitador ;

Token Código Token Lexema


identificador 1 1 soma
operador de atribuição 4 4 =
operador dor de soma 6 1 a
Delimitador 10 6 +
1 b
5
10 ;
• Padrão: é uma regra que descreve o conjunto de
lexemas que podem representar um token.
• Exemplo:
• Token : Operadores Relacionais.
• Padrão : >, <, >=, <=, ==, !=

6
Fluxograma do Analisador Léxico

token
Programa Analisador Analisador Para análise
fonte Léxico Sintático semântica
getNextToken

Tabela de
Símbolos

7
Tabela de Símbolos
• É uma estrutura de dados gerada pelo compilador com o
objetivo de armazenar informações sobre os nomes
definidos no programa fonte (identificadores de variáveis,
de parâmetros, de funções, etc)

• Essa tabela associa atributos (tipo, escopo, limites no caso


de vetores e número de parâmetros no caso de funções)
aos nomes que foram definidos pelo programador

• A construção dessa tabela se inicia durante a análise léxica,


quando os identificadores são reconhecidos

8
Erros Léxicos
• Símbolo não pertencente ao conjunto de símbolos terminais da
linguagem:
$

• Identificador mal formado:


j@c

• Tamanho do identificador:
minha_variavel_para_...

• Número mal formado:


2.a3

• Fim de arquivo inesperado (comentário não fechado): {...

• Caractere ou string mal formados:


‘a, “hello world
9
Tratamento de Erros
• Quando o código fonte em análise não cumpre as
regras previstas, deve-se fazer o seguinte:

• Assinalar o erro - a mensagem de erro deverá (pelo


menos) indicar:
» Localização do erro (linha/coluna)
» Causa do erro

• Tentar prosseguir: recuperação/correção dos erros

10
Para prosseguir...
• Método do Pânico: remoção de sucessivos
caracteres da entrada, até que o Analisador
encontre um caractere que sinalize o início de um
novo token
int an@lisador;

• Remoção de caractere estranho


a = 5.4.3221 + 2;

• Inserção de caractere ausente


wile (a < b)
11
Tratamento de Erros
• Substituição de um caractere incorreto por um
correto
a = 5 + 2,

• Transposição de dois caracteres adjacentes


wihle (a < b)

12
Projeto do Analisador Léxico
• É desejável que se usem notações formais para
especificar e reconhecer a estrutura dos tokens que
serão retornados pelo analisador léxico
– Evitam-se erros
– Mapeamento mais consistente e direto para o programa
de análise léxica
• Notações
– Gramáticas ou expressões regulares: especificação de
tokens
– Autômatos finitos: reconhecimento de tokens

13
Autômato para Operadores Relacionais

14
Autômato para Número

15
Autômato para Identificador

16
Implementação de um AF
• Tentativa de reconhecimento da cadeia
00110. 0
1
1
q0 q1

s c Saída
q0 0 ACEITO
q2
q0 0
q0 1
q1 1
q1 0
q2 eof 17

Você também pode gostar