Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Compiladores
Anlise lexical (1) Expresses Regulares
analisador sinttico analisador semntico gerador de cdigo intermedirio otimizador de cdigo gerador de cdigo objeto programa objeto
anlise
sntese
Plano da aula
1. Motivao do uso de Expresses Regulares e definies
Linguagens, tokens, lexemas...
Anlise lexical
identifica as principais seqncias de caracteres que constituem unidades lxicas (tokens) comea a construo da tabela de smbolos retorna mensagens no caso de erro
Programa fonte Analisador lxico token Analisador sinttico (scanner) get token (parser)
Tabela de Smbolos
(identificadores e constantes)
Vocabulrio bsico
Lexema:
Conjunto de caracteres no programa fonte
Tokens:
Palavras-chaves, operadores, identificadores, constantes, literais, cadeias e smbolos Smbolos terminais na gramtica
Remete ao analizador sinttico!
Eficincia:
em separado, o analisador lxico pode ser mais eficiente
Portabilidade:
restries referentes ao dispositivo podem ser encapsuladas dentro do analisador lxico
Padro:
Regra que descreve o conjunto de lexemas que podem representar um token
No contexto de LP, as linguagens so representadas por gramticas ou por autmatos que as reconhecem.
Linguagens Formais
Smbolo: entidade abstrata. Ex: letras, dgitos, caracteres especiais, etc. Alfabeto (): Um conjunto finito de smbolos. Ex: = {0, 1} String (cadeia, frase): Uma seqncia finita de smbolos de um determinado alfabeto String vazio (): string com 0 smbolos Linguagem Formal (*): Conjunto de todos os possveis strings de um alfabeto
Alternao:
x | y (x ou y)
Repetio(0):
x* (x repetido 0 ou mais vezes)
Repetio(1):
x+ (x repetido 1 ou mais vezes)
Exemplos de E. R.
00: representa o conjunto {00} (0 | 1): representa o conjunto {0,1} (0 | 1)(0 | 1): representa o conjunto {00,01,10,11} 0*: {, 0, 00, 000, 0000, 00000, ...} (0 | 1)*: representa todos os strings de 0s e 1s (0 | 1)* 00 (0 | 1)*: representa todos os strings de 0s e 1s com pelo menos dois 0s consecutivos Todos os strings de 0s e 1s comeando por 1 e no tendo dois 0s. consecutivos ?
Propriedades Algbricas
r|s r | (s | t) (rs)t r(s|t) (s|t)r r r r* r** s|r (r | s) | t r(st) rs | rt st | sr r r (r | )* r* comutativa associativa concatenao associativa concatenao distributiva concatenao distributiva identidade da concatenao identidade da concatenao relao entre * e * idempotente
Definies regulares
Associar nomes a expresses regulares Seja um alfabeto de smbolos bsicos
Definio regular
d1 r1 d2 r2
. .
dn rn
E? equivalente a | E
E presente zero ou uma vez.
Exerccios
Descrever as linguagens seguintes:
(a| )(b|ba)* 0*10*10*10*
if then else relop idf num space
Problema seguinte: reconhecer se um lexema est de acordo com uma E. R.: Ser que tmp_1 um idf?
uma funo parcial, pois no precisa estar definida para todos os pares K x Interesse: h equivalncia entre AEF e ER
e0 e1 e2 e3
q0 1
0 0 1 q2
q1
0,1
Da ER ao Autmato (AFND)
Construo de Thompson
Cada ER bsica se traduz em AFND Pode-se agregar os AFND conforme se agregam as ERs.
Segue as regras de definio de uma ER:
ERs bsicas Alternativa, repetio, concatenao...
Reconhecedores bsicos
AFND para reconhecer
Reconhecedor de alternativa
AFND que reconhece a alternativa (r1|r2)
Reconhecedor de concatenao
A partir de dois AFNDs que reconhecem r1 e r2, pode-se reconhecer r1r2 assim:
r1
r1
r2
r2
AFND reconhecedor de r*
A partir do AFND que reconhece r, podese criar um AFND que reconhece r*
Exemplo:
Construir um AFND que reconhea
(a|b)*abb
r1
Do AFND ao AFD
Problema: as -transies e as transies mltiplas atrapalham!
No h como determinar, simplesmente, a partir de um smbolo de entrada, qual estado atingir.
Referncias
Livro do Drago, cap. 3
Tokens e uso de ERs: 3.3 Autmatos: 3.6 Construo de Thompson: 3.7
muito mais eficiente trabalhar com AFDs para reconhecer uma linguagem.
Por outro lado, mais complicado obter o AF a partir da ER!
Soluo: transformar automaticamente um AFND em AFD! ... Ser o assunto da prxima aula! ... E ter mais: o FLEX.
Srie Didtica:
Compiladores: Cap. 2 Linguagens Formais (Blauth): Cap. 3