Para ver a segunda parte clique aqui
Expressões regulares – Toda Linguagem Regular pode ser descrita por uma expressão simples denominada Expressão Regular. Trata-se de um formalismo denotacional também considerado gerador, pois pode-se inferir como construir (“gerar”) as palavras de uma linguagem. É uma maneira de representar uma linguagem formada pela justaposição dos símbolos do alfabeto separados pelos símbolos de união ou concatenação.
Linguagem – Conjunto de palavras
L1 = {0,01,11} ou L2 = {111,000}
Operações
L1UL2 = {0,01,11,111,000}
L1L2 = {0111,0000,0011,…}
L1*={0000,010101,…)
Linguagens Regulares – São aquelas que podem ser representadas por expressão regular ou autômatos.
Exemplos:
- L=Cadeias que possuem apenas um 0 E={0,1}
- 1*01*
- L=Cadeias que possuem todas as strings binárias E={0,1}
- (0U1)*
- L=Cadeias que possuem todas as strings binárias exceto o vazio E={0,1}
- (oU1)+
- L=Cadeias que começam com aa e terminam com bb E={a,b}
- aa(aUb)*bb
- L=Cadeias que começam ou terminam com bb E={a,b}
- bb(aUb)*U(aUb)*bb
Por definição, uma linguagem é Regular se, e somente se, é possivel construir um Autômato Finito (Determinístico, Não-Determinístico ou com Movimentos Vazios), que reconheça a linguagem.
Transformação de Autômato/ER
- Incluir dois estados ( um inicial, que aponta para o inicial antigo por E(movimento vazio), e um estado final, todos os finais antigos do autômato deixam de ser finais e apontam por E para o novo).
- Avaliar dois a dois os estados na tentativa de eliminar um terceiro.
É a classificação de gramáticas formais descrita em 1959 pelo linguista Noam Chomsky. Esta classificação possui 4 níveis (Descritos na figura ao lado), sendo que os dois últimos níveis (os níveis 2 e 3) são amplamente utilizados na descrição de linguagem de programação e na implementação de interpretadores e compiladores. Mais especificamente, o nível 2 é utilizado em análise sintática (computação) e o nível 3 em análise léxica.
A classificação das gramáticas começa pelo tipo 0, com maior nível de liberdade em suas regras, e aumentam as restrições até o tipo 3. Cada nível é um super conjunto do próximo. Logo, uma gramática de tipo n é conseqüentemente uma linguagem de tipo n-1.
- Linguagem tipo 3: Regular
- Reconhecida por um autômato finito
- Representada por uma expressão regular
- Linguagem tipo 2: Livre de contexto
- Reconhecida por um autômato de pilha
- Linguagem tipo 1: sensível ao contexto
- Linguagem tipo 0: Irrestrita
- Máquina de Turing
Lema do Bombeamento
Diz que se pegarmos uma cadeia de tamanho maior do que a quantidade de estados do autômato, existe um pedaço dessa cadeia que pode ser bombeada (repetida em um looping) de forma que a cadeia gerada ainda pertence a linguagem.
Isso significa que existe um looping dentro do autômato. O lema do Bombeamento serve para provar que uma linguagem “NÃO” é regular. A demonstração de que uma linguagem é regular é feita através da criação de um autômato ou expressão regular.
Não é regular
-Afirme que é regular
-Escolha uma que você ache que não é regular
-Bombear
-Provar que não é regular.
O que foi descrito neste artigo é somente o começo dos estudos das linguagens formais. Foi dividido em 3 partes, é possível acessar a segunda parte clicando aqui, e a primeira parte clicando aqui. O artigo foi baseado no livro: Linguagens Formais e Autômatos, Série Livros Didáticos Segunda edição, de Paulo Fernando Blauth Menezes, com alguns pedaços de texto retirados da Wikipedia.
|
Expressões Regulares e suas respectivas linguagens |
|
|
Expressão Regular |
Linguagem Representada |
|
aa |
Somente a palavra aa |
|
ba* |
Todas as palavras que iniciam por b, seguido por zero ou mais a |
|
(a+b)* |
Todas as palavras sobre {a,b} |
|
(a+b)*aa(a+b)* |
Todas as palavras contendo aa como subpalavra |
|
a*ba*ba* |
Todas as palavras contend exatamente dois b |
|
(a+b)*(aa+bb) |
Todas as palavras que terminam com aa ou bb |
|
(a+E)(b+ba)* |
Todas as palavras que não possuem dois a consecutivos. |




é um conjunto finito não vazio de estados do autômato;
é um conjunto de símbolos, denominado alfabeto de entrada do autômato;
é a função de transição de estados do autômato e seu papel é o de indicar as transições possíveis em cada configuração do autômato. Esta função fornece para cada par “estado e símbolo de entrada” um novo estado para onde o autômato deverá mover-se.
é denominado estado inicial do autômato finito. É o estado para o qual o reconhecedor deve ser levado antes de iniciar suas atividades.
é um subconjunto do conjunto Q dos estados do autômato, e contém todos os estados de aceitação ou estados finais do autômato finito. Estes estados são aqueles em que o autômato deve terminar o reconhecimento das cadeias de entrada que pertencem à linguagem que o autômato define. Nenhuma outra cadeia deve ser capaz de levar o autômato a qualquer destes estados.
, o seu valor não deve ser um elemento de Q (como acontece com os autômatos determinísticos), mas um subconjunto de Q (incluindo o conjunto vazio). Ou seja, o processamento de
leva à um conjunto de estados em que a máquina pode legalmente se encontrar após estar em um estado q lendo um símbolo de entrada a.