Forum by laureateci.it
[ Home | REGOLE FORUM | Tutti i blog | Profilo | Registrati | CHAT | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download Informatica | Download ICD | Download TPS | Download Magistrale | Download Specialistica | Giochi | Cerca nel web | cerca | faq | RSS ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 INFORMATICA - Primo Anno
 Linguaggi di programmazione
 laboratorio
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Pagina Precedente | Pagina Successiva
Autore Discussione Precedente Discussione Discussione Successiva
Pagina: di 5

SD83
Utente assiduo


Regione: Puglia
Prov.: Foggia


Inserito il - 17/10/2008 : 11:46:24  Mostra Profilo  Visita l'Homepage di SD83 Invia a SD83 un Messaggio Privato  Rispondi Quotando
allora ho provato pure ad invocare la tua funzione nel main


print_grammar(load_grammar(gram_file,&grammar));
esercizio(&grammar); // ho aggiunto questa riga

fclose(gram_file);


system("PAUSE");
return 0;
}

l'effetto non è quello desiderato
la funzione tua stampa produzione corretta se trova almeno una corretta
per esempio
S>a
a>b
C>dd

ha come output la stampa di produzione corretta perchè quando legge la prima S>a che è corretta stampa già il messaggio senza preoccuparsi delle produzioni che vengono dopo..

Torna all'inizio della Pagina

titty2008
Utente giovane

0129_da_pebbles



Inserito il - 17/10/2008 : 12:19:07  Mostra Profilo  Visita l'Homepage di titty2008 Invia a titty2008 un Messaggio Privato  Rispondi Quotando
ok ti ringrazio...
sei veramente molto gentile...
Torna all'inizio della Pagina

SD83
Utente assiduo


Regione: Puglia
Prov.: Foggia


Inserito il - 17/10/2008 : 12:23:49  Mostra Profilo  Visita l'Homepage di SD83 Invia a SD83 un Messaggio Privato  Rispondi Quotando
comunque ho corretto la tua funzione..

void esercizio (Grammar* g)
{
int i; //indice delle produzioni
int j; //indice per la scansione del corpo di una produzione
int flag; //se è 0 non ci sono simboli nt se è 1 c'è almeno un simbolo nt

for (i=0; i<g->numprod; i++)
{
flag = 0; // prima di scandire la nuova produzione impostiamo il valore a NT non presenti
for (j=0; j < g->productions[i].left.length; j++)
{
if (is_nonterminal(g->productions[i].left.word[j]))
flag = 1;
}
if (flag==1)
printf ("Nella Produzione %d c'e' almeno un simbolo nonterminale!\n", i+1);
else
printf ("Nella Produzione %d non ci sono simboli nonterminali!\n", i+1);
}

}


non hai bisogno di restituire un valore.. basta che ad ogni produzione stampi un messaggio..

comunque fai come ti ho detto prima, fai tutto nel load grammar
Torna all'inizio della Pagina

titty2008
Utente giovane

0129_da_pebbles



Inserito il - 17/10/2008 : 12:56:27  Mostra Profilo  Visita l'Homepage di titty2008 Invia a titty2008 un Messaggio Privato  Rispondi Quotando
ok... grazie veramente tanto...
Torna all'inizio della Pagina

SD83
Utente assiduo


Regione: Puglia
Prov.: Foggia


Inserito il - 17/10/2008 : 13:02:14  Mostra Profilo  Visita l'Homepage di SD83 Invia a SD83 un Messaggio Privato  Rispondi Quotando
Torna all'inizio della Pagina

titty2008
Utente giovane

0129_da_pebbles



Inserito il - 20/10/2008 : 10:32:14  Mostra Profilo  Visita l'Homepage di titty2008 Invia a titty2008 un Messaggio Privato  Rispondi Quotando
per quanto riguarda il controllo dell'esistenza della S ho fatto come mi hai detto tu, ma evidentemente ho sbagliato, perchè mi da diversi errori...
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 (is_nonterminal(s) = 'S')
printf ('La produzione è corretta\n');

if (current_state == START || current_state == RIGHT)
return g;
else
return NULL;

}
cosa ho sbagliato?
Torna all'inizio della Pagina

titty2008
Utente giovane

0129_da_pebbles



Inserito il - 20/10/2008 : 10:56:23  Mostra Profilo  Visita l'Homepage di titty2008 Invia a titty2008 un Messaggio Privato  Rispondi Quotando
ehi ma per quanto riguarda gli esercizi sull'analizzatore lessicale, bisogna scaricarsi il pascal?
Torna all'inizio della Pagina

SD83
Utente assiduo


Regione: Puglia
Prov.: Foggia


Inserito il - 20/10/2008 : 11:37:24  Mostra Profilo  Visita l'Homepage di SD83 Invia a SD83 un Messaggio Privato  Rispondi Quotando
no
Torna all'inizio della Pagina

titty2008
Utente giovane

0129_da_pebbles



Inserito il - 20/10/2008 : 12:00:54  Mostra Profilo  Visita l'Homepage di titty2008 Invia a titty2008 un Messaggio Privato  Rispondi Quotando
Il primo esercizio che riguarda l'analizzatore lessicale dice:
Analizzare e discutere lo schema di riconoscimento delle varie classi di token del linguaggio di riferimento (fare riferimento al codice sorgente).
Io non ho capito cosa bisogna fare...
Torna all'inizio della Pagina

SD83
Utente assiduo


Regione: Puglia
Prov.: Foggia


Inserito il - 20/10/2008 : 12:21:32  Mostra Profilo  Visita l'Homepage di SD83 Invia a SD83 un Messaggio Privato  Rispondi Quotando
niente.. capire come funziona..
Torna all'inizio della Pagina

titty2008
Utente giovane

0129_da_pebbles



Inserito il - 20/10/2008 : 13:50:12  Mostra Profilo  Visita l'Homepage di titty2008 Invia a titty2008 un Messaggio Privato  Rispondi Quotando
ah, quindi non è che devo scrivere qualcosa...
Torna all'inizio della Pagina

Stewie83
Utente medio

stewie83

Prov.: Brindisi
Città: Brindisi


Inserito il - 20/10/2008 : 15:05:20  Mostra Profilo  Visita l'Homepage di Stewie83 Invia a Stewie83 un Messaggio Privato  Rispondi Quotando
non devi far niente?
il parser C-like!!!!!!!!!! quello spiegato a lezione è un Pascal-like e tu devi implementare quello per il C

********a volte è meglio stare in silenzio e passare per deficienti che parlare e dare conferma************************************************
Torna all'inizio della Pagina

SD83
Utente assiduo


Regione: Puglia
Prov.: Foggia


Inserito il - 20/10/2008 : 21:03:46  Mostra Profilo  Visita l'Homepage di SD83 Invia a SD83 un Messaggio Privato  Rispondi Quotando
non devi far niente è rivolto a:
"Analizzare e discutere lo schema di riconoscimento delle varie classi di token del linguaggio di riferimento (fare riferimento al codice sorgente)."

gli altri punti sono un altro fatto..
Torna all'inizio della Pagina

SD83
Utente assiduo


Regione: Puglia
Prov.: Foggia


Inserito il - 20/10/2008 : 21:06:18  Mostra Profilo  Visita l'Homepage di SD83 Invia a SD83 un Messaggio Privato  Rispondi Quotando
Citazione:
Messaggio inserito da titty2008

per quanto riguarda il controllo dell'esistenza della S ho fatto come mi hai detto tu, ma evidentemente ho sbagliato, perchè mi da diversi errori...
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 (is_nonterminal(s) = 'S')
printf ('La produzione è corretta\n');

if (current_state == START || current_state == RIGHT)
return g;
else
return NULL;

}
cosa ho sbagliato?



if (is_nonterminal(s) = 'S')
printf ('La produzione è corretta\n');

fammi capire.. tu hai solo aggiunto sta riga per il controllo della S?
Torna all'inizio della Pagina

titty2008
Utente giovane

0129_da_pebbles



Inserito il - 21/10/2008 : 10:15:11  Mostra Profilo  Visita l'Homepage di titty2008 Invia a titty2008 un Messaggio Privato  Rispondi Quotando
si, però non me lo dire così... lo so che è sbagliato...
perchè ho pravato a fare il controllo nella funzione load grammar, dove mi hai detto tu...
se tu non mi avessi detto niente avrei fatto tipo l'esercizio 1 che ho fatto io...
ma mi hai dato il consiglio che così era meglio...
ti stai accorgendo anche tu che sono un caso perso?
Torna all'inizio della Pagina

titty2008
Utente giovane

0129_da_pebbles



Inserito il - 21/10/2008 : 10:19:54  Mostra Profilo  Visita l'Homepage di titty2008 Invia a titty2008 un Messaggio Privato  Rispondi Quotando
Citazione:
Messaggio inserito da SD83

non devi far niente è rivolto a:
"Analizzare e discutere lo schema di riconoscimento delle varie classi di token del linguaggio di riferimento (fare riferimento al codice sorgente)."

gli altri punti sono un altro fatto..



lo so che gli altri punti sono un'altra cosa e sono da svolgere...
ho già provato a fare l'es 2.a. Non so se è giusto...
case GRAFFA:
if (c == '}')
{
current_state = S;
}
break;
l'ho appena fatto, ci devo ragionare ancora un pò...
cmq ti ringrazio per tutto l'aiuto che mi stai dando...
Torna all'inizio della Pagina

titty2008
Utente giovane

0129_da_pebbles



Inserito il - 21/10/2008 : 11:14:39  Mostra Profilo  Visita l'Homepage di titty2008 Invia a titty2008 un Messaggio Privato  Rispondi Quotando
allora, quello delle parentesi graffe come commento l'ho modificato in questo modo:
all'inizio nei tipi di token ho aggiunto GRAFFA_AP e GRAFFA_CH.
nella successiva enumerazione ho aggiunto COMMENTO.
dopo
case S:
...
...
case '{':
current_state = COMMENTO;
tkn->value[i++] = c;
break;
case '}':
tkn->type = GRAFFA_CH;
tkn->value[i++] = c;
eot = !0;
break;
....
....
....
case COMMENTO:
if (c == '}')
{
current_state = S;
}
else
{
lookahead = !0;
eot = !0;
tkn->type = GRAFFA_CH;
}
E' giusto?
spero proprio di si...
Torna all'inizio della Pagina

SD83
Utente assiduo


Regione: Puglia
Prov.: Foggia


Inserito il - 21/10/2008 : 16:55:47  Mostra Profilo  Visita l'Homepage di SD83 Invia a SD83 un Messaggio Privato  Rispondi Quotando
Citazione:
Messaggio inserito da titty2008

si, però non me lo dire così... lo so che è sbagliato...
perchè ho pravato a fare il controllo nella funzione load grammar, dove mi hai detto tu...
se tu non mi avessi detto niente avrei fatto tipo l'esercizio 1 che ho fatto io...
ma mi hai dato il consiglio che così era meglio...
ti stai accorgendo anche tu che sono un caso perso?




non preoccuparti..
ti avevo detto di farlo nella load grammar.. ma non così..
il controllo della S devi farlo per ogni nuova produzione che carica la load grammar (stato start e stato left) se la S viene trovata setti un flag (ad es. lo chiami S_trovata) a 1
poi alla fine del ciclo dove tu hai aggiunto erroneamente
if (is_nonterminal(s) = 'S')
devi mettere invece
if (S_trovata==1)
printf("Nella Grammatica c'è almeno una S a sinistra");
Torna all'inizio della Pagina

titty2008
Utente giovane

0129_da_pebbles



Inserito il - 22/10/2008 : 10:19:26  Mostra Profilo  Visita l'Homepage di titty2008 Invia a titty2008 un Messaggio Privato  Rispondi Quotando
Ah ecco, giusto... grazie!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Torna all'inizio della Pagina

titty2008
Utente giovane

0129_da_pebbles



Inserito il - 22/10/2008 : 10:45:25  Mostra Profilo  Visita l'Homepage di titty2008 Invia a titty2008 un Messaggio Privato  Rispondi Quotando
case START:
if (is_terminal(s) || is_nonterminal(s))
{
S_trovata = 0;
if (is_nonterminal(s) == 'S')
S_trovata = 1;
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;
S_trovata = 0;
break;
Spero che questa volta sia giusto... anche solo per non fare un abrutta figura...
il problema è che io non posso compilare i programmi sul grammar reader perchè mi da quei problemi... che palle...
Torna all'inizio della Pagina
Pagina: di 5 Discussione Precedente Discussione Discussione Successiva  
Pagina Precedente | Pagina Successiva
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,32 secondi.

TargatoNA.it | SuperDeejay.Net | Antidoto.org | Brutto.it | Equiweb.it | Snitz Forum 2000