Professional Documents
Culture Documents
Anlise Lxica
Introduo
Motivao
Separar a Anlise Sinttica da Lxica traz algumas
vantagens:
1- A sintaxe dos smbolos pode ser descrita por uma
gramtica mais simples;
2- Recebendo tokens em vez de caracteres, o
analisador sinttico ter melhor condies de decidir
o que fazer em cada etapa, pois no precisar
considerar espaos, quebras de linha, comentrios,
etc.
Motivao
3- As propriedades lxicas e sintticas de uma
linguagem podem ser investigadas
independentemente;
4- Permite escrever vrios scanners para um mesmo
analisador sinttico, caso necessrio.
(por exemplo, usar um algoritmo melhor para leitura
de arquivos e caracteres, sem afetar o restante do
compilador)
Relacionamento entre
Analisadores Lxico / Sinttico
Os analisadores podem se relacionar de forma
independente (offline, batch) ou interativa (online).
Relacionamento entre
Analisadores Lxico / Sinttico
Independente
Programa fonte (caracteres)
Analisador Lxico
Programa fonte (tokens)
Analisador Sinttico
Relacionamento entre
Analisadores Lxico / Sinttico
Interativo
Programa fonte (caracteres)
Analisador Lxico
token
prximo token
Analisador Sinttico
Tipos de Tokens
- Identificadores(do usurio, da linguagem palavras-chave, funes embutidas);
- Nmeros (inteiros, reais, complexos);
- Operadores(aritmticos, relacionais, lgicos) ;
- Sinais de pontuao (ponto, vrgula, ponto-evrgula, dois-pontos, ...);
- Parentisadores(abre/fecha: parnteses, colchetes,
chaves)
- Gramticas Regulares
- Expresses Regulares
- Autmatos Finitos
Gramticas Regulares
Gramticas para definir alguns smbolos
Id -> Letra | Letra RestoId
RestoId -> Letra | Dgito |
Letra RestoId |
Dgito RestoId
Expresses Regulares
Expresses para os mesmos smbolos
Id: letra ( letra | dgito )*
(com letra= [A-Za-z] e dgito= [0-9])
NmeroInteiro: dgito dgito*
Operador: ("+" | "-" | "*" | "/")
Autmatos Finitos
Id:
Autmatos Finitos
NmeroInteiro:
Autmatos Finitos
Operador:
Exerccio
Especifique uma gramtica regular, expresso
regular e autmato finito para o token NmeroReal,
que representa um nmero com parte inteira e
fracionria, em notao cientfica.
Implementao do Analisador
Lxico
Atravs de um algoritmo que simula um autmato
finito, podemos implementar um Analisador Lxico.
Implementao do Analisador
Lxico
Um exemplo
Implementao do Analisador
Lxico
void readCh(): L o prximo caractere disponvel na
entrada;
boolean readCh(char c): L o prximo caractere,
retornando true se igual ao parmetro informado;
Token proximoToken(): Retorna uma instncia da
classe Token, representando o smbolo
reconhecido; caso encontre um caractere que no
pode formar nenhum smbolo, lana execeo.
Implementao do Analisador
Lxico
Consideremos o seguinte autmato:
Implementao do Analisador
Lxico
Implementao do Analisador
Lxico
Observaes:
- O atributo ch inicializado com um espao em
branco, para que o loop inicial seja executado;
- Uma alternativa a disparar uma exceo seria
retornar um Token representando um erro;
- Para o reconhecimento de smbolos mais
complexos (identificadores, nmeros) pode-se criar
Bibliografia Recomendada
AHO, A., SETHI, R. e ULLMAN, J. D.
Compiladores: Princpios, Tcnicas e
Ferramentas, LTC, 1995
LOUDEN, KENNETH C. Compiladores: Princpios
e Prctica Thomson, 2004
MONGIOVI, GIUSEPPE. Construo de
Compiladores, Notas de Aula. Joo Pessoa: 2002
NICOLLETTI, PEDRO S. Compiladores, Notas de