| V I S U A L I Z Z A D I S C U S S I O N E |
| silent |
Inserito il - 07/07/2006 : 19:13:49
Allegato: Gram.rar 2,41 KB
questo è quello che ho fatto io da una produzione BC>CB arriva produrre 4 produzioni: BC>CB(non sono riuscito a eliminarla, se qualcuno mi dice come si fa gliene sarei grato) BC>XC XC>XB XB>CB.
Purtroppo riesce a fare solo produzioni del tipo BC>CB (e non altre del tipo AB>CDEF).
io c'ho provato e questo è il mio lavoro non è granchè ma almeno abbiamo un punto d'inizio |
| 3 U L T I M E R I S P O S T E (in alto le più recenti) |
| ekkekkazz |
Inserito il - 07/07/2006 : 21:49:45 Citazione: Messaggio inserito da silent
si ma la grammatica di tipo 1 non ingloba anche grammatiche di tipo 2 e 3 ?? quindi un linguaggio di tipo 2 può essere generato da una grammatica di tipo 1 (con l'esclusione di una prod. del tipo A>lambda)
però resta il fatto che non ha senso convertire una produzione libera, lineare o gia contestuale...
Citazione: Messaggio inserito da silent potreati darmi una dimostrazione tramite un pezzo di codice
int is_MonGrammar (Grammar* g) { int i; for (i=0; i < g->numprod; i++) if (is_MonProduction(&g->productions[i])) { converti(&g->productions[i])); rimuovi(g,i); // che rimuove la produzione di indice i dalla grammatica g } return 1; }
così non solo converte veramente tutte le produzioni monotone presenti nella grammatica, ma hai anche la possibilità di passare alla funzione rimuovi() l'indice... rimuovi la devi implementare... (io la funzione converti l'ho fatta con una Production come parametro, cioè la produzione monotona, mentre non so come si può fare se passi tutta la grammatica)
|
| silent |
Inserito il - 07/07/2006 : 20:41:11 si ma la grammatica di tipo 1 non ingloba anche grammatiche di tipo 2 e 3 ?? quindi un linguaggio di tipo 2 può essere generato da una grammatica di tipo 1 (con l'esclusione di una prod. del tipo A>lambda)
Citazione:
non appena incontri una produzione monotona, nella int is_MonGrammar (Grammar* g)), potresti lanciare la funzione di conversione, e subito dopo rimuovi la produzione in base ad i. Mi sembra il modo più semplice, anche perchè se devi convertire una grammatica monotona, dovresti convertire tutte le produzioni di quel tipo.
potreati darmi una dimostrazione tramite un pezzo di codice
|
| ekkekkazz |
Inserito il - 07/07/2006 : 19:56:43 Citazione: Messaggio inserito da silent
BC>CB(non sono riuscito a eliminarla, se qualcuno mi dice come si fa gliene sarei grato)
potresti fare così... non appena incontri una produzione monotona, nella int is_MonGrammar (Grammar* g)), potresti lanciare la funzione di conversione, e subito dopo rimuovi la produzione in base ad i. Mi sembra il modo più semplice, anche perchè se devi convertire una grammatica monotona, dovresti convertire tutte le produzioni di quel tipo. (voglio dire un'altra cosa: che succede se diamo in pasto al programma una grammatica CF che ha le parti sinistre minori di quelle destre? ecco perchè come dicevo nell'altro topic, non basta controllare che sia <= ).
|
|
|