Sei sulla pagina 1di 5

Estrutura de um compilador

programa fonte analisador lxico

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)

2. Regras de formao e exemplos de E.R.


Operaes Exemplo de uso no Linux: grep.

3. Autmatos Finitos e E.R.


Definio e exemplos. Construo de um autmato reconhecedor de E.R.

Tabela de Smbolos
(identificadores e constantes)

Motivao para anlise lexical


Projeto simples:
separao da anlise lxica da sinttica faz com que seja possvel simplificar cada etapa

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

Exemplos: Tokens, Padres, Lexemas


TOKEN const if relation id num literal LEXEMAS const if <,<=,=,<>,>, >= pi, contador, D2 3.1416, 0, 6.0E23 compiladores PADRO const if < ou <= ou = ou <> ou ... letra seguida por letras ou dgitos constante numrica caracteres entre aspas

Como definir padres ?


Enumerar os valores possveis:
<,<=,=,<>,>, >=

Usar conceitos de linguagens formais 4 categorias de linguagens (classificao de Chomsky):


linguagens regulares - tipo 3
Autmato de estados finitos

linguagens livres de contexto 2


Autmato com pilha

linguagens sensveis ao contexto - tipo 1


Mquina de Turing com fita limitada

recursivamente enumerveis - tipo 0


Mquina de Turing

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

Expresso Regular (ER)


A definio de E.R. recursiva:
Uma ER bsica definida por literais ER complexas so definidas pela combinao de ER bsicas.

Regras para formao de palavras vlidas


Concatenao:
xy (x seguido de y)

Alternao:
x | y (x ou y)

Repetio(0):
x* (x repetido 0 ou mais vezes)

Repetio(1):
x+ (x repetido 1 ou mais vezes)

Precedncias em Expresses Regulares


Operador unrio *,+ Concatenao Operador | Usa-se parnteses em casos ambguos. Exemplo:
(a) | ((b)*(c)) equivalente a a(b|c)d diferente de ab|cd a | b*c

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

di so nomes distintos ri expresso sobre os smbolos U {d1, d2,..., dn}

Exemplo: o token num


Representao de nmeros sem sinal :
5280, 39.37, 6.336E4, 1.894E-4 num digitos fracao_opc expoente_opc digito 0 | 1 | ... | 9 digitos digito digito* fracao_opc .digitos | expoente_opc (E (+ | -| ) digitos) |

Outras notaes e simplificaes


E+ equivalente a EE*
E presente pelo menos uma vez.

E? equivalente a | E
E presente zero ou uma vez.

[xy] equivalente a x|y


Sintaxe de sed/grep

[a-z] equivalente a a|b|c|...|z


[0-9] [A-Z] [^a-l] : negao de [a-l]

^ ... $ delimitam uma linha.


Obs: estamos introduzindo uma noo de contexto!

Exerccios
Descrever as linguagens seguintes:
(a| )(b|ba)* 0*10*10*10*
if then else relop idf num space

Expresses Regulares comuns em compiladores


Como se reconhece uma palavra da linguagem seguinte?
if then else < | <= | = | <> | > \ >= letra (letra | digito)* digito+(.digito+)?(E(+|-)?digito+)? (\n | | \t)+

Problema seguinte: reconhecer se um lexema est de acordo com uma E. R.: Ser que tmp_1 um idf?

Definio de Autmato Finito


Autmato finito M sobre um alfabeto uma 5upla (K, , , e0, F), onde:
K o conjunto finito de estados o alfabeto dos smbolos da linguagem : K x K a funo de transio de estados e0 o estado inicial F o conjunto de estados finais

Exemplo de autmato finito


M = (K, , , e0, F) = (d, .) K = (e0, e1, e2, e3) F = (e1, e3)
d e1 e1 e3 e3 . e2 Autmato que reconhece nmeros inteiros e reais

(e0, d) = e1 (e1, d) = e1 (e1, .) = e2 (e2, d) = e3 (e3, d) = e3

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

Exemplo de autmato finito


Estado Atual Inicial q0 q1 Final q2 0 q1 q0 q2 1 q2 q2 q2

Dois tipos de autmatos: AFD e AFND


Um Autmato Finito No-Determinstico (AFND)
Tem um conjunto de estados S Uma entrada definida como um string s de um alfabeto Uma funo de transio (S, ) -> S+ Um estado de partida Um conjunto de estados finais (de aceitao)

q0 1

0 0 1 q2

q1

0,1

Um Autmato Finito Determinstico


Qual expresso regular corresponde a este autmato ? um AFND No tem -transio No mximo uma transio saindo de um estado com rtulo um dado smbolo.

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

AFND para reconhecer um smbolo x


x

Cada AFND tem exatamente um estado de partida e um estado final.

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

Potrebbero piacerti anche