Autore |
Discussione |
titty2008
Utente giovane
|
Inserito il - 09/10/2008 : 11:17:21
|
Ma per quanto riguarda il laboratorio, è necessario svolgere TUTTI gli esercizi proposti su grammar reader, automi a stati finiti e scanner, oppure è sufficiente svolgerne qualcuno?
|
|
titty2008
Utente giovane
|
Inserito il - 14/10/2008 : 12:21:53
|
allora? nessuno sa niente? |
|
|
SD83
Utente assiduo
Regione: Puglia
Prov.: Foggia
|
Inserito il - 14/10/2008 : 16:35:30
|
cerca di fare almeno più del 50% degli es del grammar reader.. automi e scanner sono facili.. |
|
|
titty2008
Utente giovane
|
Inserito il - 15/10/2008 : 10:02:59
|
gli automi li ho fatti, mi manca solo l'ultimo esercizio, quindi penso che possa andare bene... gli esercizi sullo scanner e su grammar reader mi stanno un pò bloccando... da un bel pò veramente... se qualcuno mi potesse dare una mano sarei molto contenta... grazie ciao ciao |
|
|
SD83
Utente assiduo
Regione: Puglia
Prov.: Foggia
|
Inserito il - 15/10/2008 : 10:22:08
|
sul grammar reader non ti intestardire tanto.. non c'è bisogno che tu faccia tutti i punti.. preoccupati piuttosto di sapere bene la teoria, perchè all'orale è quella che conta di più |
|
|
titty2008
Utente giovane
|
Inserito il - 15/10/2008 : 11:28:08
|
ma nel momento in cui io gli mando i programmi, lui può non accettarmi all'orale perchè i programmi che gli ho mandato non sono sufficienti? io purtroppo per deidcarmi al laboratorio, che è la parte da mandare prima a lui, ho trascurato da qualche settimana la parte teorica... cmq ti ringrazio... ciao |
|
|
Dr House
Utente medio
Città: Bari
|
Inserito il - 15/10/2008 : 11:50:57
|
il grammar reader non trascurare assolutamente la teoria! |
"La realtà è fatta di cose vere e cose supposte. Le cose vere le mettiamo da parte, ma le supposte dove le mettiamo?" |
|
|
titty2008
Utente giovane
|
Inserito il - 15/10/2008 : 12:06:21
|
che significa? |
|
|
Dr House
Utente medio
Città: Bari
|
Inserito il - 15/10/2008 : 17:21:33
|
Citazione: Messaggio inserito da titty2008
che significa?
che il grammar reader lo devi fare, se non tutto fai quello che riesci. La teoria non la devi trascurare assolutamente |
"La realtà è fatta di cose vere e cose supposte. Le cose vere le mettiamo da parte, ma le supposte dove le mettiamo?" |
|
|
SD83
Utente assiduo
Regione: Puglia
Prov.: Foggia
|
Inserito il - 15/10/2008 : 19:07:49
|
Citazione: Messaggio inserito da titty2008
ma nel momento in cui io gli mando i programmi, lui può non accettarmi all'orale perchè i programmi che gli ho mandato non sono sufficienti?
non preoccuparti.. certo ke se del grammar reader gli fai uno due punti allora certo ke nn ti accetta.. |
|
|
titty2008
Utente giovane
|
Inserito il - 16/10/2008 : 11:44:45
|
ok, grazie a tutti... sono sempre fregata, perchè il mio problema principale è il grammar reader...
|
|
|
Dr House
Utente medio
Città: Bari
|
Inserito il - 16/10/2008 : 18:00:14
|
Citazione: Messaggio inserito da titty2008
ok, grazie a tutti... sono sempre fregata, perchè il mio problema principale è il grammar reader...
pensa a quando arrivi a fare il lab di ASD! |
"La realtà è fatta di cose vere e cose supposte. Le cose vere le mettiamo da parte, ma le supposte dove le mettiamo?" |
|
|
SD83
Utente assiduo
Regione: Puglia
Prov.: Foggia
|
Inserito il - 16/10/2008 : 19:47:57
|
|
|
|
titty2008
Utente giovane
|
Inserito il - 17/10/2008 : 10:13:59
|
grazie per il conforto... molto molto gentili... |
|
|
titty2008
Utente giovane
|
Inserito il - 17/10/2008 : 10:17:41
|
nel programma del grammar reader, anche quello guida pubblicato dal professore, mi da tre errori: implicit declaratio of function 'int isupper(..)' implicit declaratio of function 'int islower(..)' e alla fine per quanto riguarda system ('pause') qualcuno saprebbe dirmi perchè?
|
|
|
SD83
Utente assiduo
Regione: Puglia
Prov.: Foggia
|
Inserito il - 17/10/2008 : 10:26:57
|
non si scrive system ('pause') ma system ("pause")
per le altre due è impossibile risponderti senza vedere il codice |
|
|
titty2008
Utente giovane
|
Inserito il - 17/10/2008 : 10:56:27
|
si scusa ho sbagliato io a scrivere qui... dato che mi da questi tre errori non posso verificare se gli esercizi che svolgo sono corretti! Ho fatto il primo esercizio, qualcuno mi saprebbe dire se è corretto o meno? grazie anticipatamente... La traccia è scritta nell'esercizio... /* GrammarReader v. 1.2.2 Corrado Mencar, Pasquale Lops */
#include <stdio.h>
#define MAX_WORD_LENGTH 100 #define MAX_PRODUCTIONS 100
// Definizione dei tipi ------------------------------------------------------*/
typedef char Symbol;
typedef struct { Symbol word [MAX_WORD_LENGTH]; unsigned length; } Word;
typedef struct { Word left; Word right; } Production;
typedef struct { Production productions[MAX_PRODUCTIONS]; unsigned numprod; } Grammar;
// Procedure di riconoscimento dei simboli -----------------------------------*/
int is_terminal(Symbol s) { return (islower(s)); //return (s >= 'a') && (s <= 'z'); }
int is_nonterminal(Symbol s) { return (isupper(s)); //return (s >= 'A') && (s <= 'Z'); }
int is_prodsym(Symbol s) { return (s == '>'); }
int is_prodsep(Symbol s) { return (s == '\n'); }
/* Lettura di simboli da file ------------------------------------------------*/
Symbol read_sym(FILE* file) { Symbol s; // fscanf(file,"%c",&s); //questo ciclo permette di saltare la lettura di spazi tra i simboli do s = getc(file); while (s==' '); return s; }
Production* add_new_production(Grammar *g) { Production* p; p = &(g->productions[g->numprod++]); p->left.length = 0; p->right.length = 0; return p; }
void add_symbol(Word *w, Symbol s) { w->word[w->length++] = s; }
// Procedura di acquisizione di una grammatica da un file --------------------*/ Grammar* load_grammar(FILE* file, Grammar* g) { enum States {START,LEFT,RIGHT,ERROR}; /* START = Scansione di una nuova produzione [F] LEFT = Scansione della parte sinistra RIGHT = Scansione della parte destra [F] ERROR = Errore di scansione */ enum States current_state = START; // Stato iniziale Symbol s; Production* p; g->numprod = 0; // Inizializza la grammatica while (current_state != ERROR && !feof(file)) { s = read_sym(file); if (feof(file)) break; switch(current_state) { case START: if (is_terminal(s) || is_nonterminal(s)) { current_state = LEFT; //p = &(g->productions[g->numprod++]); //p->left.length = 0; p = add_new_production(g); add_symbol(&p->left,s); //L'istruzione precedente corrisponde a p->left.word[p->left.length++] = s; } else if (is_prodsep(s)) { current_state = START; } else current_state = ERROR; break; case LEFT: if (is_terminal(s) || is_nonterminal(s)) { current_state = LEFT; add_symbol(&p->left,s); } else if (is_prodsym(s)) { current_state = RIGHT; } else current_state = ERROR; break; case RIGHT: if (is_terminal(s) || is_nonterminal(s)) { current_state = RIGHT; add_symbol(&p->right,s); } else if (is_prodsep(s)) { current_state = START; } else current_state = ERROR; break; } } if (current_state == START || current_state == RIGHT) return g; else return NULL;
}
// Procedure di stampa
void print_sym (Symbol s) { printf("%c ",s); }
void print_word (Word* w) { int i; for (i=0; i<w->length; i++) print_sym(w->word[i]); }
void print_production (Production* p) { print_word(&p->left); printf (" --> "); print_word(&p->right); }
void print_grammar(Grammar* g) { int i; if (g == NULL) printf ("Errore! Grammatica non valida! \n"); else { printf ("Numero di produzioni: %d\n", g->numprod); for (i=0; i<g->numprod; i++) { print_production(&g->productions[i]); printf ("\n"); } } }
/*Controllare che nella parte sinistra di ogni produzione esista almeno un simbolo nonterminale*/
int esercizio (Grammar* g) { int i; //indice delle produzioni int j; //indice per la scansione del corpo di una produzione Symbol h; //simbolo della testa della produzione
for (i=0; g->numprod; i++) { for (j=0; j < g->productions[i].left.length; j++) { h = g->productions[i].left.word[j]; if (is_nonterminal(h)) printf ("Produzione corretta!\n"); } return h; } }
// MAIN ------------------------------------------------------------------------
int main(int argc, char *argv[]) { char* filename = argv[1]; FILE* gram_file; Grammar grammar; // controlla se è stato inserito il nome del file if (filename == 0) { printf("nome file non specificato \n"); return -1; } // apertura del file contenente la grammatica gram_file = fopen(filename,"r"); if (gram_file == NULL) { printf("nome di file errato\n"); return -1; } print_grammar(load_grammar(gram_file,&grammar)); fclose(gram_file); system("PAUSE"); return 0; }
|
|
|
SD83
Utente assiduo
Regione: Puglia
Prov.: Foggia
|
Inserito il - 17/10/2008 : 11:21:50
|
a me compila.. |
|
|
titty2008
Utente giovane
|
Inserito il - 17/10/2008 : 11:26:02
|
ed è giusto l'esercizio? fa quello che chiede? per favore potresti farmi questa cortesia grandissima??? a me no, perchè da quegli errori che ho scritto sopra... non mi chiedere perchè? |
|
|
SD83
Utente assiduo
Regione: Puglia
Prov.: Foggia
|
Inserito il - 17/10/2008 : 11:35:47
|
comunque per quanto riguarda i primi due esercizi potresti semplificarti la vita in un altro modo.. nella funzione load grammar mentre scandisci la parte start/left di ogni produzione controlla con un if se il simbolo letto è nonterminale.. quando arrivi al simbolo di produzione > se non è stato letto nessun simbolo nonterminale current_state lo fai diventare error se il simbolo c'è passi a current_state right e azzeri il flag (altrimenti alla prossima produzione ti dice sempre che c'è il nonterminale).. per il secondo es. invece quello della S il principio è lo stesso, solo che qui controlli se la S c'è o meno alla fine del ciclo while cioè quando hai scandito tutte le prod. |
|
|
SD83
Utente assiduo
Regione: Puglia
Prov.: Foggia
|
Inserito il - 17/10/2008 : 11:39:55
|
allora.. errori di compilazione non ne da.. ma la funzione esercizio che hai fatto non funziona per un semplice motivo: la hai soltanto definita ma non la hai mai invocata.. |
|
|
Discussione |
|