Differenza tra espressione regolare e grammatica negli automi


12

Sono nuovo agli automi e mi è stata data una breve introduzione alle espressioni regolari solo ieri. Ho letto le varie regole che definiscono un'espressione regolare. Ma non sono in grado di distinguere tra espressioni regolari e grammatica di una lingua (non mi è stata insegnata la grammatica per le espressioni regolari).

Capisco che la grammatica ci aiuta a generare le stringhe valide in una lingua, ma questo è ciò che affermano le regole per la definizione di espressioni regolari. Allora, dove sta la differenza? Ho chiesto al mio professore e ha detto che regex sono le stringhe più elementari in una lingua e la grammatica è l'insieme di regole per qualsiasi lingua, che sono di ordine superiore rispetto a regex. Qualcuno può fornire alcune informazioni più approfondite?

Risposte:


22

Espressioni regolari, grammatiche regolari e automi finiti sono semplicemente tre diversi formalismi per la stessa cosa. Esistono algoritmi per convertire da uno qualsiasi di essi.

Il motivo fondamentale per cui abbiamo tutti e tre è che sono stati creati in modo indipendente, con la prima serie di equivalenze (ci sono anche molti altri formalismi) dimostrata da Kleene (questo risultato, o parte di esso è chiamato Teorema di Kleene).

Quindi, in quel contesto, a seconda del modo in cui vuoi eseguire i modelli, tutti riconoscono o generano stringhe di un linguaggio normale e matematicamente, in questo senso, non c'è differenza.

Ovviamente a volte un modello è più facile da usare di un altro per un compito particolare, a causa dei dettagli del formalismo. Inoltre il modo in cui lavorano nella testa di un essere umano è spesso un po 'diverso, gli automi finiti "sentono" come i computer, le espressioni regolari "sentono" come se stessi costruendo una stringa da sottostringhe più piccole e le grammatiche regolari "sentono" come una grammatica più tradizionale derivazione o classificazione di una frase in una lingua (non sorprende se si guarda alla storia).

Quindi, per confrontare i due, definiamoli:

Espressioni regolari

Quindi le espressioni regolari sono definite in modo ricorsivo come segue:

  1. è un'espressione regolare
  2. ε è un'espressione regolare
  3. a Σa è un'espressione regolare per ogniaΣ
  4. se e sono espressioni regolari allora BAB
    • AB è un'espressione regolare (concatentazione)
    • AB è un'espressione regolare (alternanza)
    • A è un'espressione regolare (stella di Kleene)

Insieme ad alcune semantiche (ovvero il modo in cui interpretiamo gli operatori per ottenere una stringa), otteniamo un modo per generare stringhe da un linguaggio normale.

Grammatiche regolari

Le grammatiche regolari sono costituite da quattro tuple cui è l'insieme di non terminali, è l'insieme di terminali, è l'inizio non terminale e è l'insieme di produzioni che ci dicono come cambiare il simbolo iniziale, passo dopo passo, in una stringa in . può avere le sue produzioni tratte da uno di due tipi (non entrambi però):N Σ S P Σ P(N,Σ,P,SN)NΣSPΣP

Grammatiche lineari di destra

Per non-terminali , , terminale e la stringa vuota , tutte le regole sono della forma:C a εBCaε

  1. Ba
  2. BaC
  3. Bε

Grammatiche lineari sinistre

Sinistra lineare grammatiche sono gli stessi, ma la regola 2 # è .BCa

Cose su cui riflettere

Quindi, guardando queste definizioni e giocando con esse, possiamo vedere che le espressioni regolari sembrano regole di corrispondenza o modi di gestire le stringhe un po 'alla volta.

Le grammatiche sembrano "etichettare" le sezioni della stringa e raggruppare le etichette sotto nuove etichette per convalidare la stringa (ovvero se possiamo ottenere da alla stringa o viceversa, siamo felici).S

Tuttavia, questi stanno davvero facendo la stessa cosa fondamentale, e il modo in cui vedi la metafora della loro funzione dipende davvero da te.


Metterei maggiormente l'accento sul fatto che le grammatiche generano stringhe nella lingua, mentre le espressioni regolari (come hai detto tu) sono più un modello di corrispondenza che corrisponde (o "prova") ogni stringa nella lingua.
Ran G.

@RanG., Questo è davvero il solito modo di pensarci, ma puoi capovolgerli entrambi; l'analisi dal basso verifica una stringa rispetto a una grammatica e puoi usare un'espressione regolare come una descrizione compatta di una lingua (sebbene ciò sia probabilmente meno comune).
Luke Mathieson,

NSR

NRRP

@simpleBob, Ah sì, è sicuramente un errore di battitura. Grazie!
Luke Mathieson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.