Home Hardware Networking Programmazione Software Domanda Sistemi
Conoscenza del computer >> Programmazione >> Computer Programming Languages >> .

Quali sono alcuni esempi di lingue regolari e come hanno definito nella teoria del linguaggio formale del contesto?

Ok, esploriamo le lingue regolari con esempi e le loro definizioni nella teoria del linguaggio formale.

Quali sono le lingue regolari?

Nel regno della teoria del linguaggio formale, una lingua regolare è una lingua (una serie di stringhe su un determinato alfabeto) che può essere descritta da:

* Espressioni regolari: Un modello che definisce una serie di stringhe.

* Automata finita deterministica (DFA): Una macchina che legge l'input un simbolo alla volta e transizioni tra gli stati in base all'ingresso. Accetta o rifiuta l'input in base allo stato finale.

* Automata finita non deterministica (NFA): Simile ai DFA, ma consentono più transizioni possibili da uno stato per un determinato simbolo di input (o addirittura transizioni senza leggere alcun input).

* Grammatici regolari: Un tipo di grammatica formale in cui le regole di produzione hanno una forma specifica.

Queste quattro rappresentazioni sono equivalenti. Se riesci a definire una lingua con uno di questi, puoi definirlo con tutti loro. Questo è un teorema fondamentale nella teoria del linguaggio formale.

Esempi di lingue regolari

Ecco alcuni esempi, insieme a come possono essere definiti usando i metodi sopra menzionati:

1. Il linguaggio di tutte le stringhe su {0, 1} che iniziano con un '1'.

* Espressione regolare: `1 (0 | 1)*` (o `1 [01]*`)

* `1` corrisponde al richiesto '1' all'inizio.

* `(0 | 1)` significa "0 o 1".

* `*` significa "zero o più occorrenze del gruppo precedente."

* DFA:

`` `

0 1

-> Q0 Q1 Q1 (Q0 è lo stato iniziale)

Q1 Q1 Q1 (Q1 è uno stato accettante)

`` `

* `Q0` è lo stato iniziale. Se l'input inizia con '1', passa allo stato accettante `Q1`. Se inizia con `0`, si sposta nello stato non accettante (morto).

* `Q1` è lo stato accettante. Una volta raggiunto questo stato, rimane in esso, accettando ulteriori input.

* NFA: Un NFA può essere costruito in modo simile, ma potrebbe avere un percorso alternativo dallo stato di partenza.

* Grammatica normale: (Lineare destro)

`` `

S -> 1a

A -> 0a | 1a | ε

`` `

* `S` è il simbolo di inizio.

* `A` genera qualsiasi combinazione di 0s e 1s, inclusa la stringa vuota (ε).

2. Il linguaggio di tutte le stringhe su {a, b} che contengono la sottostringa "ABA".

* Espressione regolare: `(A | B)*ABA (A | B)*` (o `[AB]*ABA [AB]*`)

* `(A | B)*` corrisponde a qualsiasi sequenza di 'A e' B (zero o più).

* `Aba` corrisponde alla sottostringa richiesta.

* DFA: Questo DFA avrà Stati per monitorare l'avanzamento della corrispondenza "ABA":

`` `

a b

-> Q0 Q1 Q0

Q1 Q1 Q2

Q2 Q1 Q0

Q3 Q3 Q3 (Q3 è uno stato accettante)

`` `

* `Q0`:stato iniziale. Rappresenta che non abbiamo visto alcuna parte di "ABA".

* `Q1`:rappresenta che abbiamo visto" A ".

* `Q2`:rappresenta che abbiamo visto" AB ".

* `Q3`:rappresenta che abbiamo visto" ABA "(Accettazione dello stato). Una volta in `Q3`, ogni ulteriore input lo mantiene in` Q3`.

* NFA: Un NFA può essere più semplice da costruire per questo linguaggio. Può "indovinare" quando potrebbe iniziare la sottostringa "ABA".

* Grammatica normale:

`` `

S -> come | BS | aa

A -> bb

B -> ac

C -> AC | BC | ε

`` `

3. La lingua di tutte le stringhe su {0, 1} con un numero pari di 0s.

* Espressione regolare: `1*(01*01*)*`

* `1*`:zero o più quelli

*`01*01*`:Ciò significa che la stringa dovrebbe avere un numero pari di 0, poiché qualsiasi 0 deve essere seguito da `1*01*`, quindi è accoppiata.

* DFA:

`` `

0 1

-> Q0 Q1 Q0 (Q0 è lo stato iniziale e accettante)

Q1 Q0 Q1 (Q1 è uno stato non accettante)

`` `

* `Q0`:numero pari di 0s (statale di avvio e accettazione).

* `Q1`:numero dispari di 0s.

* NFA: Un NFA può essere costruito, ma il DFA è spesso la rappresentazione più semplice.

* Grammatica normale:

`` `

S -> 1s | 0a | ε

A -> 1a | 0s

`` `

4. La lingua composta solo dalla stringa "ciao".

* Espressione regolare: `ciao`

* DFA:

`` `

Ciao

-> Q0 Q1 - - - - (Q0 è lo stato iniziale)

Q1 - Q2 - - -

Q2 - - Q3 - -

Q3 - - - Q4 -

Q4 - - - - Q5

Q5 - - - - - (Q5 è uno stato accettante)

`` `

* Grammatica normale:

`` `

S -> ha

A -> eb

B -> lc

C -> ld

D -> o

`` `

Esempi di lingue che non sono regolari

Queste lingue * non possono * essere rappresentate da espressioni regolari, DFA, NFA o grammatiche regolari. Richiedono formalismi più potenti come grammatiche senza contesto o macchine Turing.

1. Il linguaggio delle stringhe con un numero uguale di 'A e' B: {ε, AB, BA, AABB, ABAB, BABA, BBAA, ...}

2. Il linguaggio dei palindromi (stringhe che leggono gli stessi avanti e indietro): {ε, A, B, AA, BB, Aba, Bab, Abba, ...}

3. The Language {a n B n | n> =0} :Stringhe con `n` 'a seguite da` n`' b's (ad esempio, ε, ab, aabb, aaabbb, ...). Questo è un esempio classico spesso usato per dimostrare i limiti delle lingue regolari.

4. The Language {a n B m C n | n, m> =0} :Stringhe con `n` a's, seguite da` m` b's e `n` c's. Questo non è regolare.

Perché queste lingue non sono regolari?

La limitazione chiave delle lingue regolari è la loro incapacità di "contare" o "ricordare" una quantità arbitraria di informazioni. Un DFA, NFA o espressione regolare ha un numero finito di stati o simboli. Riconoscere lingue come {a n B n }, dovresti tenere traccia del numero di "A che hai visto per assicurarti che ci sia lo stesso numero di" B ". Un automatico automobilistico non ha la capacità di memoria per farlo per `n 'arbitrariamente grande. Questa intuizione è formalizzata dal *lemma di pompaggio per le lingue regolari *, un potente strumento per dimostrare che una lingua non è *normale.

in riassunto

Le lingue regolari sono una classe fondamentale di lingue nella teoria della lingua formale. Sono semplici da definire e implementare, rendendoli utili per molte applicazioni pratiche (ad es. Analisi lessicale nei compilatori, corrispondenza dei pattern negli editori di testo, routing di rete). Tuttavia, hanno limiti e lingue più complesse richiedono formalismi più potenti.

 

Programmazione © www.354353.com