Semplificazione CFG
In un CFG, può accadere che tutte le regole e simboli di produzione non siano necessari per la derivazione di stringhe. Inoltre, potrebbero esserci alcune produzioni nulle e produzioni unitarie. Viene chiamata l'eliminazione di queste produzioni e simbolisimplification of CFGs. La semplificazione comprende essenzialmente i seguenti passaggi:
- Riduzione di CFG
- Rimozione delle produzioni unitarie
- Rimozione di produzioni nulle
Riduzione di CFG
I CFG vengono ridotti in due fasi:
Phase 1 - Derivazione di una grammatica equivalente, G’, dal CFG, G, in modo tale che ogni variabile derivi una stringa terminale.
Derivation Procedure -
Passaggio 1: includi tutti i simboli, W1, che derivano un terminale e inizializzano i=1.
Passaggio 2: includi tutti i simboli, Wi+1, che derivano Wi.
Passaggio 3: incremento i e ripetere il passaggio 2, finché Wi+1 = Wi.
Passaggio 4: includere tutte le regole di produzione che hanno Wi dentro.
Phase 2 - Derivazione di una grammatica equivalente, G”, dal CFG, G’, in modo tale che ogni simbolo appaia in una forma sentenziale.
Derivation Procedure -
Passaggio 1: includere il simbolo di inizio in Y1 e inizializza i = 1.
Passaggio 2: includi tutti i simboli, Yi+1, che può essere derivato da Yi e includere tutte le regole di produzione che sono state applicate.
Passaggio 3: incremento i e ripetere il passaggio 2, finché Yi+1 = Yi.
Problema
Trova una grammatica ridotta equivalente alla grammatica G, con regole di produzione, P: S → AC | B, A → a, C → c | BC, E → aA | e
Soluzione
Phase 1 -
T = {a, c, e}
W 1 = {A, C, E} dalle regole A → a, C → ce E → aA
W 2 = {A, C, E} U {S} dalla regola S → AC
W 3 = {LA, DO, MI, S} U ∅
Poiché W 2 = W 3 , possiamo derivare G 'come -
G '= {{A, C, E, S}, {a, c, e}, P, {S}}
dove P: S → AC, A → a, C → c, E → aA | e
Phase 2 -
Y 1 = {S}
Y 2 = {S, A, C} dalla regola S → AC
Y 3 = {S, A, C, a, c} dalle regole A → a e C → c
Y 4 = {S, A, C, a, c}
Poiché Y 3 = Y 4 , possiamo derivare G "come -
G "= {{A, C, S}, {a, c}, P, {S}}
dove P: S → AC, A → a, C → c
Rimozione delle produzioni unitarie
Qualsiasi regola di produzione nella forma A → B dove viene chiamata A, B ∈ Non terminale unit production..
Procedura di rimozione -
Step 1 - Per rimuovere A → B, aggiungi produzione A → x alla regola grammaticale ogni volta B → xsi verifica nella grammatica. [x ∈ Terminal, x può essere Null]
Step 2 - Elimina A → B dalla grammatica.
Step 3 - Ripetere dal passaggio 1 fino a quando tutte le produzioni di unità vengono rimosse.
Problem
Rimuovere la produzione unitaria da quanto segue:
S → XY, X → a, Y → Z | b, Z → M, M → N, N → a
Solution -
Ci sono 3 produzioni unitarie nella grammatica:
Y → Z, Z → M e M → N
At first, we will remove M → N.
Come N → a, aggiungiamo M → a e M → N viene rimosso.
Il set di produzione diventa
S → XY, X → a, Y → Z | b, Z → M, M → a, N → a
Now we will remove Z → M.
Come M → a, aggiungiamo Z → a e Z → M viene rimosso.
Il set di produzione diventa
S → XY, X → a, Y → Z | b, Z → a, M → a, N → a
Now we will remove Y → Z.
Come Z → a, aggiungiamo Y → a e Y → Z viene rimosso.
Il set di produzione diventa
S → XY, X → a, Y → a | b, Z → a, M → a, N → a
Ora Z, M e N sono irraggiungibili, quindi possiamo rimuoverli.
Il CFG finale è privo di produzione unitaria -
S → XY, X → a, Y → a | b
Rimozione di produzioni nulle
In un CFG, un simbolo non terminale ‘A’ è una variabile nullable se c'è una produzione A → ε o c'è una derivazione che inizia da A e alla fine finisce con
ε: A → .......… → ε
Procedura di rimozione
Step 1 - Trova variabili non terminali nullable che derivano ε.
Step 2 - Per ogni produzione A → a, costruisci tutte le produzioni A → x dove x è ottenuto da ‘a’ rimuovendo uno o più non terminali dal passaggio 1.
Step 3 - Combina le produzioni originali con il risultato del passaggio 2 e rimuovi ε - productions.
Problem
Rimuovi la produzione nulla da quanto segue:
S → ASA | aB | b, A → B, B → b | ∈
Solution -
Sono presenti due variabili nullable: A e B
At first, we will remove B → ε.
Dopo aver rimosso B → ε, il set di produzione diventa -
S → ASA | aB | b | a, A ε B | b | & epsilon, B → b
Now we will remove A → ε.
Dopo aver rimosso A → ε, il set di produzione diventa -
S → ASA | aB | b | a | SA | AS | S, A → B | b, B → b
Questo è il set di produzione finale senza transizione nulla.