03b · Expressões Regulares

Resumo em 30 segundos

Uma expressão regular (ER) descreve uma linguagem regular de forma compacta usando só três operações: união (), concatenação () e repetição / fecho de Kleene (). Precedência: antes de concatenação, concatenação antes de . ER, gramática regular e autômato finito descrevem a mesma classe de linguagens.

Anterior: 03 - Gramáticas Regulares · Voltar ao mapa · Próxima: 04 - Autômatos Finitos Determinísticos


Slide 3: conceito

  • Esquema “informal” e sucinto para representar linguagens regulares.
  • Formalismo denotacional (a ER representa a linguagem) e gerador (dá para produzir as sentenças a partir dela). Ver os três tipos de formalismo em aula 01.
  • C/C++, Java, Perl, Python e outras suportam ERs nativamente ou por biblioteca.

Slide 4: definição

Base:

  1. , e cada símbolo são ERs.

Indução: se e são ERs, então também são ERs:

  • (união)
  • (concatenação)
  • (repetição, zero ou mais vezes)

Detalhe no slide 4

O slide escreve ” e são ERs, então…”. O correto é “se e são ERs” (quaisquer ERs, não apenas símbolos do alfabeto). Senão não daria para montar , por exemplo, já que não é um símbolo de .

Precedência: repetição > concatenação > união.

ERLida comoLinguagem
a, ab, abb, …
, ab, abab, …
a, bc
ac, bc

Slide 5: extensões e notação alternativa

ExtensãoDefiniçãoLeitura
uma ou mais vezes
opcional
( vezes)exatamente

Notação alternativa (o professor avisa que não usa no curso): , e .

Cuidado ao ler outros materiais

Muitos livros escrevem união como , então lá significa aqui, e não “um ou mais”. E a notação para ER é diferente de , que é um conjunto com uma palavra. O balão do slide 5 chama a atenção exatamente para isso.

Slide 6: que linguagem uma ER representa

  • , para
  • (concatenação de linguagens: toda palavra de uma seguida de toda palavra da outra)
  • (o slide escreve com , mas a operação entre conjuntos é a união )

Falta no slide, mas faz parte da definição: .

Slide 7: exemplo resolvido

Linguagem de :

Ou seja, todas as palavras sobre que começam com .

Slide 8: representações que valem decorar

ERLinguagemConferido
palavras com exatamente dois
palavras com número ímpar de 1sim, até tamanho 10
slide diz: palavras sem 00não confere, ver abaixo

A última linha do slide 8 não confere

Testei por programa todas as palavras até tamanho 10. A ER realmente não gera nenhuma palavra com 00, mas também deixa de fora muitas palavras sem 00: 0, 01, 10, 010, 011, 110…

Uma ER que gera exatamente as palavras sem 00:

Intuição: todo 0 precisa ser seguido de 1 (bloco 01), exceto possivelmente um 0 no final. Conferida por programa até tamanho 10.

Pode ser que os expoentes do slide estejam em posições que a exportação do PDF deslocou. Vale confirmar com o professor.

Leitura de : o trecho garante um 1; cada repetição de acrescenta dois. Então o total é sempre ímpar, e os permitem zeros em qualquer lugar.

Slides 9 e 10: ER e elementos léxicos

É aqui que a teoria encontra o compilador. O analisador léxico reconhece:

ElementoDescriçãoER
Letra
Dígito
Identificadorletra seguida de zero ou mais letras ou dígitos
Número inteiro0 sozinho, ou um dígito de 1 a 9, opcionalmente com - antes, seguido de dígitos

Repare que não aceita -0 nem 007. Os elementos léxicos formam uma linguagem dentro da linguagem de programação.

Complemento: as mesmas ERs em JavaScript/TypeScript

const identificador = /^[A-Za-z][A-Za-z0-9]*$/;
const inteiro       = /^(0|-?[1-9][0-9]*)$/;
identificador.test("x1");   // true
inteiro.test("-0");         // false

Diferenças da notação da aula: [1-9] é a união ; ? é o opcional; ^ e $ exigem casar a palavra inteira. As regex de programação têm recursos extras (retrovisores como \1, lookahead) que ultrapassam as linguagens regulares da teoria.

Slide 11: equivalência entre ERs

se, e somente se, .

IdentidadePor quê
concatenar com “nenhuma palavra” não produz palavra
é neutro da concatenação
zero repetições dá sempre
repetir o vazio continua vazio
união é comutativa
é neutro da união
união é idempotente
repetir repetição não acrescenta nada
distributiva à esquerda
distributiva à direita
”deslizamento”: abab...a = a + baba...
todas geram “qualquer palavra sobre ”

Armadilha clássica

. Exemplo: abab está em mas não em ; aab está em mas não em .

Slide 12: ERs do mundo real

ObjetoER do slideExemplo que casa
Números com sinal-42
Endereço de internetwww.exemplo.com.br
IPv4192.168.0.1
Valor monetárioR$ seguido de R$1500,00

Como ler o octeto do IPv4, com , , :

  • cobre 0 a 199 (um dígito; dois dígitos; ou 1 + dois dígitos).
  • cobre 200 a 249.
  • cobre 250 a 255.

Conferi por programa: aceita 192.168.0.1 e 255.255.255.255, rejeita 256.1.1.1 e 300.1.1.1. Aceita também formas com zero à esquerda como 01, o que alguns validadores rejeitariam.

Limitação do exemplo de endereço

A ER de endereço exige exatamente www, um nome, 3 letras e 2 letras. Ela casa www.exemplo.com.br, mas não exemplo.com nem www.exemplo.org. É um exemplo didático, não um validador completo.

Slides 13 e 14: exercícios


Aprofundamento com os livros

Páginas das edições da sua pasta: Menezes 3ª edição (2000) e Ramos, José Neto e Vega (Bookman).

A notação dos livros usa + para união

Os dois livros escrevem a união como (o Ramos aceita também ). É a “notação alternativa” que o slide 5 avisa que o curso não usa. Na hora de ler:

SlidesMenezes (Def. 2.12, p. 50)Ramos (p. 147 e 148)
ou
(ele não define para ER)

A precedência é a mesma nos três: repetição, depois concatenação, depois união.

O Ramos conta que a notação de expressões regulares foi criada por Kleene na década de 1950 como forma mais compacta de escrever conjuntos regulares (p. 147). Um conjunto regular é definido quase igual: , e são regulares, e união, concatenação e fecho de regulares são regulares (p. 145 e 146).

Tabela de ERs do Menezes (Exemplo 12, p. 51)

Com a notação do curso (conferi cada linha por programa, até tamanho 12):

ERLinguagem
só a palavra aa
começa com b, seguido de zero ou mais a
todas as palavras sobre
contém aa
exatamente dois b (igual ao slide 8)
termina com aa ou bb
não tem dois a seguidos

A última é a “irmã” da correção que eu fiz para o slide 8: trocando e , é a mesma ideia de .

Exemplos práticos do Ramos (Exemplos 3.4 e 3.6, p. 146 a 148)

Com :

ObjetoERDetalhe
Naturaisaceita zeros à esquerda
Reais sem sinalaceita .315 e 47., mas não aceita . sozinho
Ponto flutuanteexemplo: -211.56E+3

O truque dos reais é bom de lembrar: a união de “dígitos antes do ponto obrigatórios” com “dígitos depois do ponto obrigatórios” garante que pelo menos um lado tem dígito. Conferi que não aceita ..

Linguagens sobre do Exemplo 3.6 do Ramos, reescritas na notação do curso:

  • pelo menos um a:
  • exatamente dois a:
  • número par de a: (cada volta do fecho consome dois a; o final cobre o resto, inclusive palavras sem nenhum a)
  • começa com a e termina com b ou c:

Duas ERs diferentes, mesma linguagem

O Ramos mostra (Exemplo 3.8, p. 148) que ERs com cara muito diferente podem ser equivalentes. Conferi por programa: e geram exatamente as cadeias de a com comprimento diferente de 0 e de 2. Para provar equivalência sem programa, compare os comprimentos: cobre 1, 3, 4, 5, 6, … e nunca 0 ou 2.

Leis algébricas (Ramos, p. 148 e 149)

O Ramos organiza as identidades do slide 11 por propriedade, o que ajuda a lembrar:

PropriedadeUniãoConcatenação
Associativa
Comutativanão vale
Elemento neutro
Distributiva e

E “anula” a concatenação: . O Menezes pede para provar várias dessas propriedades no exercício 2.13 (p. 81 e 82).

ER vira autômato e autômato vira ER

Os dois livros provam que ER e autômato finito descrevem a mesma classe de linguagens:

  • ER para autômato (Menezes Teorema 2.13, p. 51 a 54; Ramos Algoritmo 3.16, p. 207 a 210): por indução no número de operadores. Monta-se um autômato pequeno para , e cada símbolo, e depois “encaixa” os pedaços com transições vazias () para união, concatenação e fecho. O Menezes alerta (p. 53 e 54) que pular os estados novos de início e fim, “unificando” estados, pode gerar autômatos que aceitam palavras a mais.
  • Autômato para ER (Menezes Teorema 2.14, p. 55, enunciado sem prova; Ramos Algoritmo 3.17, p. 211 a 216): elimina-se um estado de cada vez, trocando os rótulos das setas por ERs.

Os detalhes e um exemplo estão em 08 - Tópicos Complementares dos Livros.

Exercícios extras do Menezes (seção 2.10, p. 80 e 81)

Para aprofundar nos livros

Onde ler (páginas das edições da sua pasta)

  • Menezes (3ª ed.): 2.5 Expressão Regular, p. 50 a 55; exercícios 2.4, 2.6 a 2.8 e 2.13, p. 80 a 82.
  • Ramos, José Neto e Vega: 3.2 Conjuntos e Expressões Regulares, p. 145 a 150; 3.6 Conjuntos Regulares e Autômatos Finitos, p. 206 a 216.

Relacionadas: 04 - Autômatos Finitos Determinísticos · Glossário · Flashcards