Possono esserci "stati morti" in una grammatica senza contesto?


18

Può una grammatica senza contesto includere "stati morti" da un automa, come

G=({a,b,c},{A,B,C},{AaB,Bb,BC,CcC},A)?

Le regole di produzione da e C c C verranno ripetute per sempre e non genereranno mai una parola. È consentito o DEVE terminare le regole di produzione con un terminale ad un certo punto?BCCcC

Risposte:


24

Le grammatiche senza contesto possono contenere regole improduttive . Questo è accettato, perché ogni CFG genera la stessa lingua di un CFG corretto che non contiene regole improduttive, nessuna produzione di stringhe vuote e nessun ciclo; quindi è lecito ritenere che un CFG sia corretto senza perdita di generalità.


Non proprio: i CFG adeguati devono soddisfare altri due requisiti. Quindi riformulerei questo.
reinierpost,

@reinierpost: Immagino che tu intenda che esistono classi di CFG che proibiscono regole improduttive, ma includono ancora CFG non corretti? Immagino che la riformulazione potrebbe essere semplice come: "a meno che, per esempio, non lo siano"
mhelvens,

Intendo che non tutti i CFG senza regole improduttive sono appropriati, il che contraddice la tua affermazione; ma la definizione di CFG adeguati, escludendo esplicitamente le regole improduttive, chiarisce che questi sono possibili in CFG arbitrari, quindi è quello che scrivo.
reinierpost,

Grazie per i tuoi miglioramenti. Intendevo dire che ci sono sottoclassi di CFG che non sono autorizzate a contenere tali regole.
ilke444,

Esiste un CFG adeguato che non contiene regole improduttive, nessuna produzione di stringhe vuote e nessun ciclo che genera la stessa lingua di ({a}, {A}, {A-> epsilon}, A)? Mi piace la prima frase. Forse la seconda frase dovrebbe essere "Questo perché la definizione di CFG consente qualsiasi stringa finita di terminali e non terminali come il lato sinistro di una produzione".
Theodore Norvell il

3

Sì, naturalmente. Ogni NFA può essere scritto come un CFG. E costruire un DFA con uno "stato morto" (il termine che mi è stato insegnato è "affondare") è banale.

sol=({un'},{UN},{UNUN},UN)
{un'}

ε

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.