Vous êtes sur la page 1sur 29

COMPILADO

RES
ROBERTO TENORIO FIGUEIREDO
www.osfedera.com
tenorio.petrolina@bol.com.br

Anlise
Lxica
ROBERTO TENORIO FIGUEIREDO
www.osfedera.com
tenorio.petrolina@bol.com.br

Analisador Lxico Scanner


Fazer a leitura do programa fonte,
caractere a caractere e traduz-lo
para uma seqncia de smbolos
lxicos,
tambm
chamados
de
tokens.

Analisador lxico
Programa
fonte

Scanner

token
getNextTok
en()

Outros
nomes:
lexer e
lexical
analyzer

tabela de
smbolos

Parser

Tokens

Unidades
programa

Cada Token representado por


trs informaes: Classe, valor e
posio.

bsicas

do

texto

do

Tokens
Classe: Representa o tipo do token.
Exemplo: identificadores, constantes
numricas, cadeias de caracteres,
palavras reservadas, operadores e
separadores;

Posio: indica qual o local (linha e


coluna) em que o token se encontra
no cdigo fonte.

Tokens
Valor: depende da classe do token.
Exemplo: identificadores o string do
identificador, constante numrica o
nmero que representa a constante.

Tokens
Em relao ao valor temos os:
Tokens simples: no possuem valor
associado, como palavra reservada,
operacores e delimitadores;
Tokens com argumentos: token com
valor associado, como identificadores e
constantes.

Especificao
O analisador lxico especificados
atravs de linguagens formais, como
as expresses regulares, autmatos
finitos e gramticas regulares. Em
nvel mais avanado, as gramticas
livres-de-contexto.

Implementao
A implementao pode ser feita de vrias
maneiras. A mais simples utiliza a Tabela
de Smbolos, que guarda todas as
informaes importantes referentes ao
programa fonte que est sendo lido.
Alm da tabela de smbolos importante
criar a tabela de erros e incluir os erros
lxicos que podem ocorrer no programa
fonte.

Separao do Scanner e Parser


Simplicidade: misturar anlise lxica
com sinttica torna o parser mais
complicado.
Eficincia: separao possibilita
construir processadores lxicos e
sintticos mais eficientes.

Tokens, Padres e Lexemas


Tokens: par com o nome do token e
atributos opcionais
Padro: descrio dos possveis
lexemas associados a um tipo de
token (gramtica)
Lexema: sequncia de caracteres
que casam com o padro de um tipo
de token.

Exemplo
Para a entrada: var1 = 23;
Primeiro token: <ID,var1>
ID o tipo do token
Padro de ID: <Id> ::= letra {letra |
digito}*
Lexema var1

Observaes
Existem conjuntos de strings na entrada
que geram o mesmo tipo de token
Exemplo: var1, xyz2 so tokens do mesmo
tipo ID

Smbolos terminais (alfabeto) de uma


gramtica correspondem a tokens
Exemplo: Palavras reservadas, operadores,
identificadores, constantes, parenteses, etc.

Erros lxicos
Alguns analisadores lxicos podem
recuperar erros.
Dependendo da linguagens alguns
erros so possveis no lxico (Ex.:
identificador muito grande), mas no
nosso caso apenas um erro ser
reconhecido:

Erros lxicos
Erro 01: Identificador ou smbolo
invlido;

Erro 01 pois todos os erros tero


um nmero para entrada na tabela
de erros, como um vetor de erros.

Erros lxicos
Alguns analisadores lxicos podem
recuperar erros.
Dependendo da linguagens alguns
erros so possveis no lxico (Ex.:
identificador muito grande), mas no
nosso caso apenas um erro ser
reconhecido:

Desenvolvimento

Trabalho 01: Desenvolver em qualquer linguagem um


analisador lxico.

O analisador deve ser um Procedimento ou Funo.

No bloco principal desde trabalho deve chamar a


funo/procedimento SCANNER at o final do arquivo fonte
e criar a tabela de smbolos.

Tambm deve apresentar os erros, caso existam.

Desenvolvimento
Program teste;
Integer x, y , zz1;
real i1, i2;
String l1;
Begin
Begin
i1 := i2 + 10;
if (( x > 20) and (y < 10)) then
All (l1);
end;
end.

Desenvolvimento
TOKEN

LEXEMA

Program
ID

VALOR

POSIO
1,1

Teste

1,9

1,14

Integer

2,5

ID

,
ID

2,13
2,14

2,16

Desenvolvimento
TOKEN

LEXEMA

,
ID

VALOR

POSIO
2,18

Zz1

2,20

2,23

Real

3,5

ID

i1

,
ID
;

3,10
3,12

I2

3,14
3,16

Desenvolvimento
TOKEN

LEXEMA

String
ID

VALOR

POSIO
4,5

L1

4,12

4,14

Begin

5,5

Begin

6,9

ID

I1

:=
ID

7,13
7,16

i2

7,19

Desenvolvimento
TOKEN

LEXEMA

VALOR

POSIO
7,22

Numerico

10

7,24

7,26

IF

8,13

8,16

8,17

ID

8,19

>
Numerico
)

8,21
20

8,23
8,25

Desenvolvimento
TOKEN

LEXEMA

VALOR

POSIO

And

8,27

8,31

ID

8,32

<
Numerico

8,34
10

8,36

8,38

8,39

Then

8,41

Desenvolvimento
TOKEN

LEXEMA

VALOR

POSIO

All

9,17

9,21

ID

L1

9,22

9,24

9,25

End

10,9

10,12

End

11,5

11,8

Desenvolvimento
Program teste;
Integer x, y , zz1;
real i1, 2i2;
String l1;
Begin
Begin
i1 := i2 + 10;
if (( x > 20) and (y < 10)) then
All (l1);
end;
end.

Desenvolvimento
TOKEN

LEXEMA

Program
ID

VALOR

POSIO
1,1

Teste

1,9

1,14

Integer

2,5

ID

,
ID

2,13
2,14

2,16

Desenvolvimento
TOKEN

LEXEMA

,
ID

VALOR

POSIO
2,18

Zz1

2,20

2,23

Real

3,5

ID
,

i1

3,10
3,12

rro 01: Identificador ou smbolo invlido. 2i2 - Linha 3, Coluna 14.

DVIDAS

Vous aimerez peut-être aussi