Académique Documents
Professionnel Documents
Culture Documents
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
Programa
fonte
Scanner
token
getNextTok
en()
Outros
nomes:
lexer e
lexical
analyzer
tabela de
smbolos
Parser
Tokens
Unidades
programa
bsicas
do
texto
do
Tokens
Classe: Representa o tipo do token.
Exemplo: identificadores, constantes
numricas, cadeias de caracteres,
palavras reservadas, operadores e
separadores;
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.
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
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;
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
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
DVIDAS