Você está na página 1de 43

Análise Léxica

Parte 1

1
REVISÃO

● O que são linguagens de programação de alto nível?

● O que é um compilador?

● Quais são as etapas de um compilador?

2
FASES DA COMPILAÇÃO

3
O ANALISADOR LÉXICO

Introdução

token
Programa Analisador Analisador
léxico Obter sintático
fonte
proximo
token

Tabela de
símbolos

4
O ANALISADOR LÉXICO

Introdução

token
Programa Analisador Analisador
léxico Obter sintático
fonte
proximo
token

Tabela de
Lê o arquivo onde se encontra o
programa-fonte e produzir
símbolos
como saída uma sequência de
tokens. Cada token é
normalmente formado por seu
tipo (se é um operador lógico,
um identificador, um número
inteiro, etc.) e pelo seu valor.
5
O ANALISADOR LÉXICO

Introdução

token
Programa Analisador Analisador
léxico Obter sintático
fonte
proximo
token

Estrutura de dados utilizada


Tabela de pelo compilador para acessar
símbolos informações sobre a linguagem
fonte. A informação é coletada
nas fases da análise do
compilador e utilizada nas fases
de síntese.

6
O ANALISADOR LÉXICO
Tokens, Padrões e Lexemas
● Token
○ Um token é composto de: <nome-token, valor-atributo>
○ nome-tokem: representa tipo de unidade léxica
○ valor-atributo: valor ou referência a tabela de símbolos
○ Exemplos:
■ Palavras-chave
■ Operadores
■ Identicadores
■ Constantes
■ Literais
■ Símbolos
● Padrão
○ Descrição da forma da instância de um token
● Lexema
○ Caracteres na entrada que casam com um padrão de token
○ Instância de um token
7
O ANALISADOR LÉXICO

Tokens, Padrões e Lexemas


O analisador léxico lê o arquivo
onde se encontra o programa
fonte e produz como saída uma
sequência de tokens

8
O ANALISADOR LÉXICO

Tokens, Padrões e Lexemas


O analisador léxico lê o arquivo
onde se encontra o programa
fonte e produz como saída uma
sequência de tokens

Desconsidera o trecho do código


fonte que encontra-se entre
delimitadores de comentários,
espaços e tabulações

9
O ANALISADOR LÉXICO

Tokens, Padrões e Lexemas


O analisador léxico lê o arquivo
onde se encontra o programa
fonte e produz como saída uma
sequência de tokens

Desconsidera o trecho do código


fonte que encontra-se entre
delimitadores de comentários,
espaços e tabulações

Em geral, existe um conjunto de


cadeias para as quais um mesmo
token é produzido como saída.
Esse conjunto de cadeias é
descrito por um padrão associado
ao token de entrada.
10
O ANALISADOR LÉXICO
Exemplos:
Tokens, Padrões e Lexemas Token Lexemas Descrição
Exemplo Informal do
Padrão

CONST const

IF if

relação <, <=, =, >, >= < ou <= ou = ou >=


ou >

id gcd, a, b, pi, Letra seguida por


contador letras e/ou dígitos

num 3.1416, 0, 6.0256 Qualquer constante


numérica

literal “Conteúdo da Quaisquer


memória” caracteres entre
aspas, exceto aspa
11
O ANALISADOR LÉXICO

● A separação da análise léxica da análise sintática facilita o projeto e torna o compilador


mais eficiente e portável;
● A interação é comumente implementada fazendo o AL como Uma subrotina ou co-rotina
do Analisador Sintático (AS);
● Quando o AS ativa a sub ou co-rotina, o AL lê caracteres do arquivo até que ele possa
identificar o próximo token e o devolve devolve com seu código.

token
Programa Analisador Analisador
léxico Obter sintático
fonte
proximo
token

Tabela de
símbolos

12
O ANALISADOR LÉXICO
Atributos Para os Tokens

● Há 2 tipos de lexemas:
○ cadeias específicas tal como IF ou ' ; ‘
○ classes de cadeias tal como identificadores, números e operadores de relação.

● Por conveniência, um lexema consistindo de uma cadeia específica tal como ' ; ' ou
IF , será tratado como tendo como nome-token a própria cadeia, mas nenhum valor.
Um lexema tal como um identificador, M, tem um terá como nome-token ID e um
atributo consistindo da sua linha na tabela de símbolo.

13
O ANALISADOR LÉXICO
Atributos Para os Tokens

Exercício:

14
ESPECIFICAÇÃO DE TOKENS

Vimos que o papel do analisador léxico é reconhecer os padrões da linguagem-fonte e


retornar os tokens associados a estes padrões.

15
ESPECIFICAÇÃO DE TOKENS

Vimos que o papel do analisador léxico é reconhecer os padrões da linguagem-fonte e


retornar os tokens associados a estes padrões.

Como descrever esses padrões?

16
ESPECIFICAÇÃO DE TOKENS

Vimos que o papel do analisador léxico é reconhecer os padrões da linguagen-fonte e


retornar os tokens associados a estes padrões.

Como descrever esses padrões?

Expressões
Regulares

17
ESPECIFICAÇÃO DE TOKENS

Vimos que o papel do analisador léxico é reconhecer os padrões da linguagen-fonte e


retornar os tokens associados a estes padrões.

Como descrever esses padrões?

Como reconhecer esse padrões?

Expressões
Regulares

18
ESPECIFICAÇÃO DE TOKENS

Vimos que o papel do analisador léxico é reconhecer os padrões da linguagen-fonte e


retornar os tokens associados a estes padrões.

Como descrever esses padrões?

Como reconhecer esse padrões?

Expressões Autômatos
Regulares Finitos

19
ESPECIFICAÇÃO DE TOKENS

Vimos que o papel do analisador léxico é reconhecer os padrões da linguagem-fonte e


retornar os tokens associados a estes padrões.

Como descrever esses padrões?


Tokens podem ser reconhecidos por meio de
autômatos finitos, sendo que o estado final dispara
Como reconhecer esse padrões? o reconhecimento de um token específico e/ou um
procedimento específico (inserir na tabela de
símbolo, por exemplo).

Expressões Autômatos
Regulares Finitos

20
ESPECIFICAÇÃO DE TOKENS

21
Expressões Regulares

22
Expressões Regulares

23
Expressões Regulares

24
Expressões Regulares

25
Expressões Regulares

26
Expressões Regulares

27
Expressões Regulares

28
Expressões Regulares

29
ESPECIFICAÇÃO DE TOKENS
Exercícios:

1 - Descreva, através de uma expressão regular, todas as cadeias com a e b,


começando por b e não tendo duas letras a consecutivas?

30
ESPECIFICAÇÃO DE TOKENS
Exercícios:

1 - Descreva, através de uma expressão regular, todas as cadeias com a e b,


começando por b e não tendo duas letras a consecutivas?

2 - Descreva as seguintes linguagens


● (a| )(b|ba)
● 0∗10∗10∗10∗
● (aa|bb)∗((ab|ba)(aa|bb)∗(ab|ba)(aa|bb)∗)∗

31
ESPECIFICAÇÃO DE TOKENS

Definições Regulares

Por conveniência de notação, podemos desejar dar nomes a expressões regulares, bem com
definir outras, usando esses nomes como se fossem símbolos. Se for um alfabeto de símbolos
básicos, então uma definição regular é uma sequência de definições da forma

Onde cada di é um nome distinto de cada ri.

32
ESPECIFICAÇÃO DE TOKENS

Definições Regulares

33
ESPECIFICAÇÃO DE TOKENS

Definições Regulares

34
ESPECIFICAÇÃO DE TOKENS

Simplificações Notacionais

Exemplo:

35
RECONHECIMENTO DE TOKENS

36
RECONHECIMENTO DE TOKENS

37
RECONHECIMENTO DE TOKENS

38
RECONHECIMENTO DE TOKENS
Diagramas de Transição

Diagrama de transições para operadores relacionais

39
RECONHECIMENTO DE TOKENS

40
RECONHECIMENTO DE TOKENS

Diagramas de Transição

Diagrama de transições para identificadores

● Como são reconhecidos os identificadores e as palavras reservadas ?


● Como um compilador sabe o que é uma palavra reservada ?

● Em geral a tabela de símbolos é inicializada com o registro das palavras reservadas da


linguagem.
● O compilador sempre insere identificadores na tabela de símbolo? Isto é necessário?
○ Não, os identificadores são armazenados apenas uma vez, mas seus atributos podem ser
alterados ao longo da análise de um programa.
41
RECONHECIMENTO DE TOKENS

42
RECONHECIMENTO DE TOKENS

43

Você também pode gostar