Programação  
 
Rede de conhecimento computador >> Programação >> Programação De Computador Idiomas >> Content
Quais são alguns exemplos de idiomas regulares e como eles definiram no contexto teoria formal da linguagem?
Ok, vamos explorar idiomas regulares com exemplos e suas definições na teoria formal da linguagem.

O que são idiomas regulares?

No domínio da teoria da linguagem formal, um idioma regular é um idioma (um conjunto de cordas sobre um determinado alfabeto) que pode ser descrito por:

* Expressões regulares: Um padrão que define um conjunto de cordas.
* Autômatos finitos determinísticos (DFA): Uma máquina que lê a entrada de um símbolo de cada vez e faz transições entre os estados com base na entrada. Ele aceita ou rejeita a entrada com base no estado final.
* Autômatos finitos não determinísticos (NFA): Semelhante ao DFAS, mas permita várias transições possíveis de um estado para um determinado símbolo de entrada (ou até mesmo transições sem ler nenhuma entrada).
* gramáticas regulares: Um tipo de gramática formal, onde as regras de produção têm um formulário específico.

Essas quatro representações são equivalentes. Se você pode definir um idioma com um deles, poderá defini -lo com todos eles. Este é um teorema fundamental na teoria formal da linguagem.

Exemplos de idiomas regulares

Aqui estão alguns exemplos, além de como eles podem ser definidos usando os métodos mencionados acima:

1. a linguagem de todas as cordas sobre {0, 1} que começam com um '1'.

* Expressão regular: `1 (0 | 1)*` (ou `1 [01]*`)
* `1` corresponde ao necessário '1' no início.
* `(0 | 1)` significa "0 ou 1".
* `*` significa "zero ou mais ocorrências do grupo anterior".
* dfa:

`` `
0 1
-> Q0 Q1 Q1 (Q0 é o estado de partida)
Q1 Q1 Q1 (Q1 é um estado de aceitação)
`` `
* `q0` é o estado inicial. Se a entrada começar com '1', ela transita para o estado aceitável `q1`. Se começar com `0`, ele se moverá para o estado não aceitável (morto).
* `q1` é o estado de aceitação. Quando atinge esse estado, ele permanece nele, aceitando qualquer entrada adicional.
* NFA: Um NFA pode ser construído da mesma forma, mas pode ter um caminho alternativo a partir do estado inicial.
* Gramática regular: (Linear direito)

`` `
S -> 1A
A -> 0A | 1a | ε
`` `

* `S` é o símbolo inicial.
* `A` gera qualquer combinação de 0s e 1s, incluindo a corda vazia (ε).

2. a linguagem de todas as cordas sobre {a, b} que contêm a substring "ABA".

* Expressão regular: `(a | b)*aba (a | b)*` (ou `[ab]*aba [ab]*`)
* `(a | b)*` corresponde a qualquer sequência de 'A e' B's (zero ou mais).
* `ABA` corresponde à substring necessária.
* dfa: Este DFA terá estados para acompanhar o progresso da correspondência "ABA":

`` `
a b
-> Q0 Q1 Q0
Q1 Q1 Q2
Q2 Q1 Q0
Q3 Q3 Q3 (Q3 é um estado de aceitação)
`` `

* `q0`:estado inicial. Representa que não vimos nenhuma parte de "Aba".
* `Q1`:representa que vimos" A ".
* `Q2`:representa que vimos" ab ".
* `q3`:representa que vimos" Aba "(aceitando o estado). Uma vez em `q3`, qualquer entrada adicional o mantém em` q3`.
* NFA: Um NFA pode ser mais simples de construir para esse idioma. Pode "adivinhar" quando a substring "ABA" pode começar.
* Gramática regular:

`` `
S -> AS | BS | aa
A -> bb
B -> AC
C -> AC | BC | ε
`` `

3. a linguagem de todas as cordas sobre {0, 1} com um número par de 0s.

* Expressão regular: `1*(01*01*)*`
* `1*`:zero ou mais
*`01*01*`:Isso significa que a string deve ter um número par de 0s, pois qualquer 0 deve ser seguido por `1*01*`, para que seja emparelhado.
* dfa:

`` `
0 1
-> Q0 Q1 Q0 (Q0 é o estado de partida e aceitação)
Q1 Q0 Q1 (Q1 é um estado não aceitável)
`` `

* `Q0`:Número de 0s (estado de início e aceitação).
* `Q1`:número ímpar de 0s.
* NFA: Um NFA pode ser construído, mas o DFA é frequentemente a representação mais direta.
* Gramática regular:

`` `
S -> 1S | 0a | ε
A -> 1A | 0s
`` `

4. o idioma que consiste apenas na string "hello".

* Expressão regular: `Olá`
* dfa:

`` `
olá
-> Q0 Q1 - - - - (Q0 é o estado inicial)
Q1 - Q2 - - - -
Q2 - - Q3 - - -
Q3 - - - Q4 -
Q4 - - - - Q5
Q5 - - - - - (Q5 é um estado de aceitação)
`` `
* Gramática regular:

`` `
S -> ha
A -> eb
B -> LC
C -> LD
D -> O.
`` `

Exemplos de idiomas que não são regulares

Esses idiomas * não podem * ser representados por expressões regulares, DFAs, NFAs ou gramáticas regulares. Eles exigem formalismos mais poderosos, como gramáticas sem contexto ou máquinas de Turing.

1. A linguagem das cordas com um número igual de 'A e' B's: {ε, ab, ba, aabb, abab, baba, bbaa, ...}
2. A linguagem dos palíndromos (strings que lêem os mesmos para frente e para trás):{ε, a, b, aa, bb, aba, bab, abba, ...}
3. a linguagem {a n B n | n> =0} :Strings com `n` 'A são seguidos por` n`' b's (por exemplo, ε, ab, aabb, aaabbb, ...). Este é um exemplo clássico frequentemente usado para demonstrar as limitações dos idiomas regulares.
4. a linguagem {a n b m c n | n, m> =0} :Strings com `n` A's, seguidos por` m` b's e `n` c's. Isso não é regular.

Por que esses idiomas não são regulares?

A principal limitação dos idiomas regulares é a incapacidade de "contar" ou "lembrar" uma quantidade arbitrária de informações. Um DFA, NFA ou expressão regular tem um número finito de estados ou símbolos. Para reconhecer idiomas como {a n B n }, você precisaria acompanhar o número de 'A que você viu para garantir que haja o mesmo número de' B. Um autômato finito não possui a capacidade de memória de fazer isso para arbitrariamente grande `n`. Essa intuição é formalizada pelo *Lema de bombeamento para idiomas regulares *, uma ferramenta poderosa para provar que um idioma não é *regular.

em resumo

Os idiomas regulares são uma classe fundamental de idiomas na teoria formal da linguagem. Eles são simples de definir e implementar, tornando -os úteis para muitas aplicações práticas (por exemplo, análise lexical em compiladores, correspondência de padrões nos editores de texto, roteamento de rede). No entanto, eles têm limitações e idiomas mais complexos exigem formalismos mais poderosos.

Anterior :

Próximo :
  Os artigos relacionados
·Como atualizar Gridview largura da coluna 
·Por que o PDA é melhor que o cfg para linguagens não …
·Como determinar se o VBA foi modificada 
·Vs JavaScript. Applets Java 
·Diferença entre pacotes e arquivos de cabeçalho 
·Apache Struts Tutorial 
·Como Sobrecarga de um ponteiro em C + + 
·Como calcular o interruptor Overhead 
·Como usar arquivos Gpx 
·Como fazer uma cadeia de caracteres Minúscula 
  Artigos em destaque
·Como Verificar o driver ODBC em VBA 
·O que é um RSE em LabVIEW 
·Como selecionar múltiplo em MySQL 
·Por que é Script Retardar Meu computador Down 
·Como calcular IRR no Lotus 123 
·Como usar Vb.Net em HTML dinâmico 
·Como construir Applets Java 
·Funções COBOL 
·Como Verificar Inteiros em JavaScript 
·Que codificação de caracteres é usada para represent…
Cop e direita © Rede de conhecimento computador https://ptcomputador.com Todos os Direitos Reservados