Вы находитесь на странице: 1из 21

a*

Expresses Regulares (ER) AF e ER Equivalncias entre AFD, AFND, AF-, ER


1

Expresses Regulares (ER) Uma ER sobre um alfabeto definida como: a) uma ER e denota a linguagem vazia b) uma ER e denota a linguagem contendo a palavra vazia, ie {} c) Qualquer smbolo x uma ER e denota a linguagem {x} d) Se r e s so ER denotando as linguagens R e S ento:
(r+s) ou (r|s) ER e denota a linguagem R S (rs) ER e denota a linguagem RS = {w=uv | u R e v S} (r*) ER e denota a linguagem R*

Exemplos

00 uma ER denotando a linguagem {00}

(0+1)* denota a linguagem formada por todas as cadeias de 0s e 1s


(0+1)* 00 (0+1)* denota todas as cadeias de 0s e 1s com ao menos dois 0s consecutivos a+b*c denota um nico a ou zero ou mais vezes b seguido de c
3

(0+1)* 001 denota todas as cadeias de 0s e 1s terminadas em 001 0*1*2* denota qualquer nmero de 0s seguido por qualquer nmero de 1s seguido por qualquer nmero de 2s 01* + 10* denota a linguagem consistindo de todas as cadeias que so um nico 0 seguido por qualquer nmero de 1s OU um nico 1 seguido por qualquer nmero de 0s.
4

Omisso de parnteses
Para omitir parnteses devemos respeitar: O fecho (*) tem prioridade sobre a concatenao (rs), que tem prioridade sobre a unio. A concatenao e a unio so associadas da esquerda para a direita. Ex: 01* + 1 agrupado como (0(1*)) + 1 => L = {1, 0, 01, 011,...} Usamos parnteses quando queremos alterar a prioridade: (01)* + 1 => L = {1 U (01)n | n >= 0} = {1, , 01, 0101,...} 0(1* + 1) => L = {w {0,1}* | w comea com 0 seguido de 1n | n>=0} Lei distributiva esq = 01* + 01 = {0,01,011,0111,...}
5

Escreva a ER equivalente a:

O conjunto de cadeias sobre {0,1} que termine com trs 1s consecutivos. O conjunto de cadeias sobre {0,1} que tenha ao menos um 1. O conjunto de cadeias sobre {0,1} que tenha no mximo um 1.
6

Escreva a ER equivalente a:

O conjunto de cadeias sobre {0,1} que termine com trs 1s consecutivos. (0+1)*111 O conjunto de cadeias sobre {0,1} que tenha ao menos um 1. (0+1)*1(0+1)* O conjunto de cadeias sobre {0,1} que tenha no mximo um 1. 0*(1+)0*
7

AF e ER

AF e ER representam exatamente o mesmo conjunto de linguagens, as Linguagens Regulares. Para mostrar isso, deve-se mostrar que:
toda linguagem definida por um AFD ou AFND definida por uma ER. (por expresses dos caminhos ou por reduo de estados) toda linguagem definida por uma ER definida por um AFD ou AFND. (na verdade, mostra-se que existe um -AFND que aceita a mesma linguagem)
8

Equivalncias entre AFD, AFND, -AF, ER

ER
Teo 2.14 (Menezes 2002)
Teo 2.1 (H&U 79)

Teo 2.13 (Menezes 2002)

AFD

AFND
Teo 2.11 (Menezes 2002)

-AF

Teorema: Toda linguagem definida por uma ER tambm definida por um AF

Prova: Suponha que L=L(R) para uma ER R. Mostraremos que L=L(E) para algum AFND E com:
exatamente um estado de aceitao nenhum arco chega no estado inicial nenhum arco sai do estado de aceitao. A prova por induo estrutural sobre R, seguindo a definio de ER: BASE: AF para as partes a, b, c da definio de ER.
10

(a)
a

(b) (c)

INDUO: AF para a parte (d) da definio de ER. Se R e S so AF para as respectivas ER R e S, ento:


S
11

L(R) U L(S)

S L(R)L(S)

L(R*)

12

Exemplo
Seja a ER: (0+1)*1(0+1) cadeias sobre {0,1} cujo penltimo smbolo 1.

0+1


13

(0+1)*

1 (0+1)*1(0+1)

14

Propriedades algbricas das ER L + M = M + L (unio comutativa) (L + M) + N = L + (M + N) (unio associativa) (LM)N = L(MN) (concatenao associativa) A concatenao comutativa???

+ L = L + = L ( o elemento nulo para unio) L = L = L ( o elemento nulo para concatenao) L = L =


15

L(M + N) = LM + LN (lei distributiva esq) (M + N)L = ML + NL (lei distributiva dir)

L+L=L (L*)* = L* * = * = Algumas extenses de ER usadas em utilitrios do UNIX

L+ = LL* L? = (L + ) (usado no Lex para indicar opcional)


16

Exerccios

Escreva ERs para as linguagens dos: identificadores nmeros reais inteiros cadeias de caracteres e comentrios do Pascal.

17

Pascal, com L = {a..z,A..Z}; D = {0..9} ID: (L|_)(L|D|_)* Reais: (+|-|) (D+ . D+ (E (+|-|) D+ | ) | D+ (. D+ | ) E (+|-|) D+ ) Observem que acima exigimos que o real tenha uma parte com ponto fixo ou com ponto flutuante, mas a linguagem pode no exigir e o seu real mnimo seria um inteiro: [+|-] D+ [.D+] [E [+|-] D+] [x] = (x| ) Inteiros: (+|-|) D+ = [+|-] D+ Cadeias: C* onde C ASCII menos (com essa limitao no tratamos os acentos para no perder expressividade)
18

Comentrios em Pascal

{ C* } onde C ASCII menos }

19

Aplicaes: Analisadores Lxicos


Analisadores lxicos (AL) de compiladores. O AL a interface entre o programa fonte e o resto do compilador. Ele responsvel principalmente por: empacotar os caracteres do programa e lhes dar um rtulo que ser usado pelo analisador sinttico montar a rvore sinttica. Os rtulos so:
identificadores, os nomes dos smbolos simples (<, =, [, ), etc.), os nomes dos smbolos compostos (:= , <>, <=, .., etc.), constantes inteiras, constantes reais, constantes literais (cadeias e caracteres) constantes lgicas (true/false), 20 o nome das palavras-chaves.

AL so modelados por AF para depois serem programados em uma linguagem de programao. Outra opo utilizar um gerador de analisadores lxicos como o Lex, Flex. A entrada para esses geradores uma expresso regular e a sada um programa que gerencia uma enorme tabela de transio de estados.

21

Вам также может понравиться