Análise Léxica. Correção exercícios aula passada.

19
Análise Léxica

Transcript of Análise Léxica. Correção exercícios aula passada.

Page 1: Análise Léxica. Correção exercícios aula passada.

Análise Léxica

Page 2: Análise Léxica. Correção exercícios aula passada.

Correção exercícios aula passada

Page 3: Análise Léxica. Correção exercícios aula passada.

Atualizar material aula passada

Page 4: Análise Léxica. Correção exercícios aula passada.

Introdução

É também conhecida como scanner ou leitura e é a primeira fase de um processo de compilação.

Sua função é fazer a leitura do programa fonte caractere a caractere e traduzi-lo para uma sequencia de conhecida como símbolos léxicos ou sequencia de tokens.

Os caracteres são agrupados em lexemas e produzem a sequencia de tokens

A sequencia de tokens é enviada para a próxima fase da compilação a análise sintática.

O analisador léxico deve interagir com a tabela de símbolos e inserir informações dos tokens, no caso os identificadores.

Page 5: Análise Léxica. Correção exercícios aula passada.

Introdução

Na implementação a análise léxica normalmente é uma sub-rotina da analise sintática.

A implementação da análise léxica pode ser dividida em duas etapas: Escandimento: que varre o programa fonte removendo os comentários e

compactando os espaços em branco.

Analise léxica: produz a sequencia de tokens.

Page 6: Análise Léxica. Correção exercícios aula passada.

Introdução

Termos relacionados a análise léxica: Token: é uma par constituído de um nome e um valor. O nome de um token é um

símbolo que representa uma unidade léxica. Ex: Palavras reservadas, identificadores, etc.

Padrão: é a forma que os lexemas de um token podem assumir. Ex: Palavras reservadas é a sequência de caracteres da palavra reservada, no caso de identificadores são os caracteres que formam nomes das variáveis, funções.

Lexema: é uma sequencia de caracteres reconhecidos por algum padrão de um token.

Page 7: Análise Léxica. Correção exercícios aula passada.

Tabela exemplo de termosToken Padrão Lexema Descrição

const Sequência das

palavras c, o, n, s, t.

const Palavra reservada

while Sequência das

palavras w, h, i, l, e

while, While, WHILE Palavra reservada

if Sequência das

palavras i, f

If, IF, iF, If Palavra reservada

comparadores <, >, <=, >=, ==, != ==, !=  

numero Dígitos numéricos 0.6, 18, 0.009 Constante numérica

literal Caracteres entre “” “Olá Mundo” Constante literal

id Nomes de variáveis,

funções, parâmetros

de funções.

nomeCliente, descricaoProduto,

calcularPreco()

Nome de variável, nome de

função

atribuicao = = Comando de atribuição

delimitador {, }, [, ] {, },[, ] Delimitadores de início e fim

Page 8: Análise Léxica. Correção exercícios aula passada.

Identificação de termospr int f ( “To ta l = %d\n” , score )

pr int f e score são l exemas que casão com o padrão id e id é

um token . “Tota l = %d\n” é um lexema que casa com o

padrão l i tera l , e l i tera l é um token .

const P I = 3 .1416

const é um token que casa com o padrão const e também é

um lexema . PI é um lexema que casa com o padrão id e id

é um token . = é um lexema que casa com o padrão do token

atr ibu icao . 3.1416 é um lexema que casa com o padrão do

token numero .

Page 9: Análise Léxica. Correção exercícios aula passada.

Tokens

Também conhecidos como símbolos léxicos, são unidade básicas do texto de um programa.

Cada token é representado por ter unidade de informações básicas. Classe do token: é o tipo de token reconhecido. Ex: identificadores, constantes

numéricas, cadeias de caracteres, palavras reservadas, operadores e separadores.

Valor do token: depende da classe do token, Ex: caso seja uma constante inteira representa o valor inteiro, no caso de identificadores um apontador para a tabela de símbolos.

Posição do token: Indica a linha e a coluna no texto onde ocorreu o token. É utilizado principalmente para indicar o local do erro.

Page 10: Análise Léxica. Correção exercícios aula passada.

Tokens

Os tokens são divididos em dois grupos. Tokens simples: São tokens que não tem valor associado pois a classe do token já

a descreve. Ex: palavras reservadas, operadores, delimitadores.

Tokens com argumento: são tokens que tem valor associado e corresponde a elementos da linguagem definidos pelo programador. Ex: identificadores, constantes numéricas.

Page 11: Análise Léxica. Correção exercícios aula passada.

Tokens

Estrutura de um token.

<nome-token, valor-atributo>

Nome do token: corresponde a classe do token.

Valor atributo: corresponde a um valor qualquer a ser atribuído ao valor do token,

Page 12: Análise Léxica. Correção exercícios aula passada.

Exemplo 01 – sequência de tokens Código

while indice < 10 do

indice:= total + índice;

 

Sequência de tokens

 

<while,><id,7> <<,><numero,10><do,><id,7><:=,><id,12><+,><id, 7><;,>

Page 13: Análise Léxica. Correção exercícios aula passada.

Exemplo 02 – sequência de tokens Código

position = initial + rate * 60

 

Sequência de tokens

 

<id, 1> <=, > <id, 2> <+, > <id, 3> <*, > <numero, 4>

Page 14: Análise Léxica. Correção exercícios aula passada.

Exemplo 03 – sequência de tokens Código

a[index] = 4 + 2

 

Sequência de tokens

 

<id, 1> <[,> <id, 2> <],> <=,> <numero, 3> <+,> <numero, 4>

Page 15: Análise Léxica. Correção exercícios aula passada.

Exemplo 04 – decomposição

Código

total = entrada * saida() + 2

 

Sequência de tokens

 

<id, 15> <=, > <id, 20> <*,> <id,30> <+, > <numero, 2>

Page 16: Análise Léxica. Correção exercícios aula passada.

Exemplo 04 – decomposição

Para o token temos: <id, 15> : apontador 15 da tabela de símbolos e token id.

<=, > operador de atribuição, sem necessidade de um valor para o atributo.

<id, 20> : apontador 20 da tabela de símbolos e token id.

<*, > : operador de multiplicação, sem necessidade de um valor para o atributo.

<id,30> : apontador 20 da tabela de símbolos e token id.

<+, > : operador de soma, sem necessidade de um valor para o atributo.

<numero, 2> : token numero, com valor para o atributo 2 indicado o valor do numero (constante numérica).

Page 17: Análise Léxica. Correção exercícios aula passada.

Tabela de símbolos

É uma estrutura de dados que gerada pelo compilador com o objetivo de armazenar informação sobre identificadores e outros nomes usado no programa fonte.

Exemplo: Variáveis; parâmetros de funções; procedimentos.

Informações: tipo de dados(inteiro, string); escopo de visibilidade; limite de parâmetros; tamanho da variável.

A tabela de símbolos normalmente é uma estrutura de tabela hash, árvores binárias ou listas lineares.

Nessa tabela pode ter informações sobre a posição(coluna, linha) do identificado no programa fonte.

As informações são usadas em todo o processo de compilação.

Page 18: Análise Léxica. Correção exercícios aula passada.

Erros léxicos

A análise léxica é muito prematura para identificar erros de compilação, veja o exemplo abaixo.

 fi (a == “123”) ...

O analisador léxico não conseguira identificar o erro da instrução listada acima. Isso só pode ser feita na analise sintática.

Uma estratégia utilizada para a recuperação de erros léxicos e a modalidade pânico, que remove caracteres de entrada até encontrar um token bem formado (AHO, 2008). Remover caracteres estranhos.

Inserir caracteres ausentes.

Substituir caracteres corretos por incorretos.

Page 19: Análise Léxica. Correção exercícios aula passada.

Exercícios e Prática