I - Noções dum compilador
-
Upload
gil-rasmussen -
Category
Documents
-
view
12 -
download
0
description
Transcript of I - Noções dum compilador
![Page 1: I - Noções dum compilador](https://reader036.fdocumentos.com/reader036/viewer/2022082818/568134c6550346895d9bea1a/html5/thumbnails/1.jpg)
I - Noções dum compilador
• Linguagens formais
• Autómatos finitos
• Expressões regulares
• Bibliografia aconselhada:– Apontamentos
LFA 1999/2000 - 1Jorge Morais
![Page 2: I - Noções dum compilador](https://reader036.fdocumentos.com/reader036/viewer/2022082818/568134c6550346895d9bea1a/html5/thumbnails/2.jpg)
Monóide
• Grupóide:– Par (A, . ), onde A é um conjunto, e . Representa
uma operação binária em A.
• Semigrupo:– Grupóide em que . é associativa, isto é,
a (b c) = (a b) c
• Monóide:– Semigrupo com elemento neutro e:
aA : a e = e a = a
LFA 1999/2000 - 2Jorge Morais
![Page 3: I - Noções dum compilador](https://reader036.fdocumentos.com/reader036/viewer/2022082818/568134c6550346895d9bea1a/html5/thumbnails/3.jpg)
Palavras
• Alfabeto: conjunto finito
• Palavra (sequência finita de elementos de ) é a palavra vazia
– a1 a2 ... an (ai ) representa uma palavra não vazia
– Convenção: an = a a ... a (n vezes, n>0); a0 =
LFA 1999/2000 - 3Jorge Morais
![Page 4: I - Noções dum compilador](https://reader036.fdocumentos.com/reader036/viewer/2022082818/568134c6550346895d9bea1a/html5/thumbnails/4.jpg)
Palavras (cont.)
• Comprimento duma palavra– |a1 a2 ... an| = n
– || = 0
• Conteúdo duma palavra:– cont(a1 a2 ... an) = {a1, a2, ..., an}
– cont() =
LFA 1999/2000 - 4Jorge Morais
![Page 5: I - Noções dum compilador](https://reader036.fdocumentos.com/reader036/viewer/2022082818/568134c6550346895d9bea1a/html5/thumbnails/5.jpg)
Monóide livre
* - Monóide livre em * (conjunto das palavras em ) – Concatenação (operação binária associativa)
• (a1 a2 ... an)(an+1 an+2 ... an+k)=a1 a2...an an+1 an+2...an+k
(elemento neutro)• (a1 a2 ... an) = (a1 a2 ... an) = a1 a2 ... an
+ = * \{} - Semigrupo livre em
LFA 1999/2000 - 5Jorge Morais
![Page 6: I - Noções dum compilador](https://reader036.fdocumentos.com/reader036/viewer/2022082818/568134c6550346895d9bea1a/html5/thumbnails/6.jpg)
Prefixo, sufixo, factor
• Sejam u, v *
• u é prefixo de v v = uw w *
• u é sufixo de v v = wu w *
• u é factor de v v = wuz w,z *
LFA 1999/2000 - 6Jorge Morais
![Page 7: I - Noções dum compilador](https://reader036.fdocumentos.com/reader036/viewer/2022082818/568134c6550346895d9bea1a/html5/thumbnails/7.jpg)
Autómato finito
• Um autómato é um vector (S, , i, F, ):– S - conjunto finito de estados - alfabeto– i S - estado inicial– F S - conjunto de estados finais : S x S (função parcial) - conjunto de
transições
LFA 1999/2000 - 7Jorge Morais
![Page 8: I - Noções dum compilador](https://reader036.fdocumentos.com/reader036/viewer/2022082818/568134c6550346895d9bea1a/html5/thumbnails/8.jpg)
Representação gráfica
LFA 1999/2000 - 8Jorge Morais
![Page 9: I - Noções dum compilador](https://reader036.fdocumentos.com/reader036/viewer/2022082818/568134c6550346895d9bea1a/html5/thumbnails/9.jpg)
Tipos de autómatos
• Seja A=(S, , i, F, ) um autómato finito.• A diz-se autómato finito determinístico se, perante
um símbolo x de , puder transitar, no máximo, para um único estado, isto é:– ( (s, x, s’) (s, x, s’’) ) s’ = s’’
• Caso contrário, A diz-se não determinístico• A diz-se autómato finito se é possível transitar
de estado sem usar nenhum símbolo de , isto é: S x ({}) x S
LFA 1999/2000 - 9Jorge Morais
![Page 10: I - Noções dum compilador](https://reader036.fdocumentos.com/reader036/viewer/2022082818/568134c6550346895d9bea1a/html5/thumbnails/10.jpg)
Caminho e rótulo
• Seja A=(S, , i, F, ) um autómato finito.
• Um caminho não trivial é uma sequência (s0, a1, s1), (s1, a2, s2), ..., (sn-1, an, sn) onde (si-
1, ai, si)
• Um caminho trivial é uma tripla da forma (s, , s), com s S
• O rótulo do caminho é a1 a2 ... an
LFA 1999/2000 - 10Jorge Morais
![Page 11: I - Noções dum compilador](https://reader036.fdocumentos.com/reader036/viewer/2022082818/568134c6550346895d9bea1a/html5/thumbnails/11.jpg)
Linguagem reconhecida
• Seja A=(S, , i, F, ) um autómato finito.
• Um caminho diz-se bem sucedido se começa num estado inicial e termina num estado final
• Linguagem reconhecida por A:– L(A) = {u * : u é o rótulo de um caminho
bem sucedido em A}
LFA 1999/2000 - 11Jorge Morais
![Page 12: I - Noções dum compilador](https://reader036.fdocumentos.com/reader036/viewer/2022082818/568134c6550346895d9bea1a/html5/thumbnails/12.jpg)
Exemplo de autómato
• A=(S, , i, F, ) = {0, 1}• S = {i,f}• F={f} = {(i,0,i), (i,1,i), (i,0,f)}• Este autómato finito (não determinístico)
reconhece todas as sequências terminadas em 0 (números binários pares)
LFA 1999/2000 - 12Jorge Morais
![Page 13: I - Noções dum compilador](https://reader036.fdocumentos.com/reader036/viewer/2022082818/568134c6550346895d9bea1a/html5/thumbnails/13.jpg)
Exemplo de autómato (cont.)
• A=(S, , i, F, ) = {0, 1}• S = {i,f}• F={f} = {(i,0,f), (i,1,i), (f,0,f), (f,1,i)}• Este autómato finito também reconhece
todas as sequências terminadas em 0, mas é determinístico
LFA 1999/2000 - 13Jorge Morais
![Page 14: I - Noções dum compilador](https://reader036.fdocumentos.com/reader036/viewer/2022082818/568134c6550346895d9bea1a/html5/thumbnails/14.jpg)
Expressões regulares
• Uma expressão regular E representa um subconjunto de * que designamos por c(E)
• Sendo L * uma linguagem. As seguintes condições são equivalentes:– L é reconhecida por um autómato finito
– L é reconhecida por um autómato finito determinístico
– L é reconhecida por um autómato finito – L é reconhecida por uma expressão regular
LFA 1999/2000 - 14Jorge Morais
![Page 15: I - Noções dum compilador](https://reader036.fdocumentos.com/reader036/viewer/2022082818/568134c6550346895d9bea1a/html5/thumbnails/15.jpg)
Expressões regulares (cont.)
• Uma expressão regular tem uma das seguintes formas: c() = c() = {}– a c(a) = {a}– Sendo E1 e E2 expressões regulares:
• E1 + E2 c(E1 + E2) = c(E1) c(E2)• E1 E2 c(E1 E2) = c(E1) c(E2)• E1
* c(E1*) = {a1 a2 ... an : n 0, a1, a2, ..., an E1}
LFA 1999/2000 - 15Jorge Morais
![Page 16: I - Noções dum compilador](https://reader036.fdocumentos.com/reader036/viewer/2022082818/568134c6550346895d9bea1a/html5/thumbnails/16.jpg)
Exemplo de expressões regulares
• Considerando = {0, 1}
• (0 + 1)* 0 - sequências terminadas em 0
• 0* (100*)* (1 + ) - sequências em que não aparecem 1’s consecutivos
• (0 + 1)* 101 (0 + 1)* - sequência que contem o factor 101
• 10 (0 + 1)* - sequência com prefixo 10
LFA 1999/2000 - 16Jorge Morais