Domande sul Modulo 3 (analizzatore sintattico)

In questa pagina potete porre domande sul Modulo 3 del progetto 2006/2007.

Vi prego di inserire un titolo che chiarisca che tipo di domanda state ponendo. Potete rispondere alle domande anche tra di voi.



Benvenuti

Questo è il primo messaggio sulla pagina delle domande riguardanti il modulo 3 del progetto. Per favore, leggete bene le specifiche e le domande degli altri prima di fare domande ovvie.

-- RobertoNavigli - 17 Mag 2007

token last_token(void)

vorrei avere qualche chiarimento circa la funzione last_token(). come può restituire il token che ha generato l'errore se non ha argomenti? temo ci sia qualcosa che mi sfugge.


-- GabrieleTarantino - 16 May 2007

(senza titolo)

Il prof. Guerrini ha detto che avremmo avuto ha disposizione una versione del modulo 1 funzionante per fare il modulo 3. Volevo sapere se e quando verrà messa on-line.

-- GiovanniAppugliese - 17 May 2007

main

avremo a disposizione come al solito anche un main?

-- JacopoSciarra - 17 May 2007

Token Last_Token(void) domanda n°2

La last_token deve solo "STAMPARE A VIDEO" la posizione dell'errore, il tipo di errore, e la eventuale stringa che l'ha causata (perchè in caso di unexected_eof la stringa è vuota), oppure deve immagazzinare questi dati DA QUALCHE PARTE e restituirli al main? Nel caso la risposta esatta sia la 2° mi associo al mio collega, è void, e non capisco il perchè dobbiamo salvare questi dati se si possono benissimo stampare a video. Attendo notizie, grazie mille.

-- DanieleR - 17 May 2007

Chiarimento next_attr

Salve professore. Non mi è chiara l'implementazione della funzione riportata qui sotto: devo restituire il nome del prossimo attributo della lista..o il suo valore?Il problema è che nei moduli precedenti non c'erano funzioni che estraevano l'attributo dalla lista ma solo il valore; inoltre, come chiarito nelle specifiche, era arbitraria la scelta di come memorizzare la coppia attributo-valore; quindi ognuno avrà la sua implementazione a seconda di come ha memorizzato questa coppia, non avendo cosi un'implementazione della funzione che vada sempre bene per tutti come invece il professore a lezione ha specificato..Forse non ho capito l'utilizzo della funzione..attendo istruzioni smile Ciao a tutti!
/*
 * restituisce il puntatore al successivo attributo nella lista scandita dall'iteratore
 * ricevuto in ingresso, se ci sono ancora attributi da visitare, o NULL se la lista rimasta
 * da visitare e' vuota
 */
char *next_attr(attr_it);
-- ElenaAgostini - 17 May 2007

esempi

Sarebbe possibile avere a disposizione dei file di esempio di input con i relativi output attesi, come nel modulo1? Renderebbero certamente le idee più chiare a tutti...

Luca


-- LucaLollobrigida - 17 May 2007

Albero generato..

Forse ho fatto un po' di confusione io.. ma nelle specifiche mi sembra di aver letto più volte che il modulo 1 generasse un albero quando credo stampasse solo a video i token... è il modulo 3 che deve generare l'albero? dobbiamo usare i vecchi moduli per aiutarci nell'implementazione delle funzioni oppure dobbiamo ridefinire tutto?

-- LucaGiardina - 17 May 2007

Re: Token Last_Token(void)

quindi mi sorge una domanda ma per caso dobbiamo usare un puntatore globale???

-- AlessandroMastropietro - 17 May 2007

Chiarimenti

Dalle specifiche leggo che il contenuto di un tag ha sempre almeno un testo che può alternarsi ad altri tag e testo. Ma se si hanno due TAG consecutivi (senza \n quindi), il secondo figlio del primo ovviamente, è una situazione di errore e quindi il documento non è "ben formattato"? Inizialmente ci si deve aspettare un TAG o può esserci prima un testo (per esempio spazi o caratteri non stampabili) ?!?!?!?

-- GiuseppeLaTorre - 17 May 2007

attr_it e node_it

non capisco se abbiamo creato attr_it e node_it perchè ci aiutino ad implementare l'albero o per utilizzarli in seguito, nel 4 modulo? mi sembra che per costruire l'albero non servano a niente. Lo stesso vale per get_attribute. è normale che non mi sia servita?

-- GabrieleTarantino - 17 May 2007

analizzatore lessicale e ricorsione

devo praticamente ancora cominciare a fare il modulo 3 ma mi sorge una domanda. per prelevare i token devo aprire un analizzatore lessicale (con la new_an...) ma visto che il prog è ricorsivo, ogni volta che la funzione richiama se stessa, deve aprire nuovamente un analizzatore lessicale (lasciando quello precedente aperto)?

-- JacopoSciarra - 18 May 2007

Re: analizzatore lessicale e ricorsione

jacopo, c'ho pensato anch'io e sembra che non è questa la strada giusta, visto che non puoi aprire più di un certo numero di file contemporaneamente...

-- VladLupascu - 18 May 2007

Re: Re: analizzatore lessicale e ricorsione
non credo bisogna richiamare ricorsivamente la funzione principale...ma creare piu funzioni che si richiamano ricorsivamente all'interno della funzione principale che alla fine ritorna l'albero finito...credo.. ^^''

-- ElenaAgostini - 18 May 2007

Re: Re: Re: analizzatore lessicale e ricorsione
gia quindi nella funzione principale get_xsml_doc:

1- si apre l'analiz.lessicale 2- si usano le funzioni ricorsive 3- si chiude l'analiz. lessicale

e dal main si chiama la funzione get_xsml_doc giusto?


-- JacopoSciarra - 18 May 2007

nessuna risposta ...

Gabriele e Daniele hanno fatto le loro domande sulla funzione token last_token (void) e nessuno ha risposto.Suppongo che non sono gli unici due a non sapere come va implementata la sudetta funzione. Anche io stavo pensando che se il prof ci dice che il prototipo va lasciato così, Daniele forse potrebbe avvicinarsi alla soluzione da adottare, anche se non è la cosa più pulita da fare, visto che quello che deve fare questa funzione non è altro che restituire l'iltimo token che viene fuori dalla chiamata a get_next_token. Ciao prof, aspettiamo tutti una risposta... Saluti a tutti quelli che stanno lavorando al 3° modulo. Vlad.

-- VladLupascu - 18 May 2007

funzioni ausiliarie

Salve, si possono usare funzioni ausiliarie implementate da noi nei nostri codici precedenti?? Ad esempio in xsml_list.c??

-- MarcoMarinangeli - 18 May 2007

next_attr e next_node

2 conferme riguardo queste 2 funzioni: 1. restituiscono NULL sia se la lista è vuota che se è stata scorsa tutta dall'iteratore, giusto?? 2. naturalmente queste 2 funzioni aggiornano anche l'iteratore di una posizione in avanti, dico bene?

-- MarcoMarinangeli - 18 May 2007

Re: next_attr e next_node

naturalmente... big grin


-- VladLupascu - 18 May 2007

Re: Chiarimento next_attr

Elena, ho avuto il tuo stesso dubbio, ma poi mi sono accorta che nel pdf delle specifiche c'è scritto quello che segue. Quindi bisogna restituire solo il nome, se non ho capito male. Ciao.
char *next_attr(attr_it);
che restituisce la stringa del nome del successivo attributo nella lista scandita dall’iteratore
ricevuto in ingresso, se ci sono ancora attributi da visitare, o NULL se la lista rimasta da visitare è
vuota.

-- DeliaPassalacqua - 18 May 2007

Re: Re: Chiarimento next_attr
Mhmh si ma per nome intendi il nome dell'attributo? se si lo prelevi dalla tua personale struttura dati in cui l'hai memorizzato..e questo fa in modo che l'implementazione del modulo non vada bene per tutti, ma solo per la tua impostazione. mhmh ci sara qualcosa che mi sfugge in tutto cio? :P ti ringrazio cmq per la risposta! ^^

-- ElenaAgostini - 18 May 2007

Primo e secondo modulo

Vorrei sapere quando sarà possibile vedere le implementazioni dei primi due moduli necessari per implementare il terzo grazie

-- MarcoCianfriglia - 19 May 2007

Risultati moduli precedenti?

Salve, aspettando la risposta del prof mi è venuta in mente la seguente domanda...xchè i risultati (almeno del primo modulo) non siano ancora usciti??? ora x quello che so la correzione è automatica ma dai tempi che il prof sta impiegando a rilasciare i risultati sembra che li sta corregendo tutti a mano.

-- VladLupascu - 21 May 2007

Re: token last_token(void)

Il prototipo della funzione è corretto così com'è. Quindi è chiaro che dovrete trovare un modo per restituire l'ultimo token dell'ultimo run.

-- RobertoNavigli - 21 May 2007

Re: char *next_attr(attr_it);

Questa funzione, come scritto nelle specifiche, deve restituire il nome del prossimo attributo. Potete usare l'implementazione dell'attributo che avete scelto nel modulo 2. Potete pensare questa funzione e quella relativa allo scorrimento dei nodi come una aggiunta logica al modulo 2.

-- RobertoNavigli - 21 May 2007

Re: Primo e secondo modulo

Presto, ma il mio consiglio è: usate anche la vostra implementazione dei primi due moduli (a meno che non abbiate saltato un modulo).

-- RobertoNavigli - 21 May 2007

COME SI METTONO GLI #INCLUDE ??

nei files da consegnare (xsml_iter.c, xsml_syn.c) ho incluso gli header del 1° e 2° e 3° modulo. Non sarebbe stato più corretto includere node.h e lex.h dentro l'header del mod 3(syn.h) ? così da includere solo syn.h nei files da consegnare? lo chiedo perchè per quanto riguarda node.h ho fatto così. i .h uno dentro l'altro e solo l'ultimo header nel .c

-- GabrieleTarantino - 21 May 2007

Re: COME SI METTONO GLI #INCLUDE ??

Dipende da chi usa quali funzioni. Io tenderei a mettere tutti gli include nei file .c (e, dove servono, nei vari .h - per utilizzare le strutture dati definite in altri file .h). Ripetere non fa male (se uso le direttive del preprocessore che abbiamo visto a lezione).

-- RobertoNavigli - 21 May 2007

Sintassi

Salve professore avrei due domande:

1)tra due OPEN_START_TAG ci possono essere solo newline e tab giusto ? non ci puo essere qualsiasi testo

2)quotando le specifiche >se n=0 il blocco si riduce solo a un testo< nel caso il mio analizzatore lessicale non ritorna stringa vuota ma due OPEN_START_TAG, quindi la lista dei figli e vuota. E un problema ? non credo

Grazie


-- AlbertoRivelli - 22 May 2007

(senza titolo)

il caso e il seguente
<root><node>
-- AlbertoRivelli - 22 May 2007

Re: Sintassi

intendevo questo caso scusate
<node></node>
-- AlbertoRivelli - 22 May 2007

ultimo open_end_tag

salve professore, avrei una domanda da farle. la funzione get_xsml_doc deve, partendo dal primo open_start_tag, creare la struttura legando le varie liste.Mi chiedevo però dove mettere l'ultimo open_end_tag, ovvero quello che chiude il primo tag aperto.non devo impostarlo come children di quest'ultimo vero?

-- GiuseppeCoppola - 22 May 2007

Re: ultimo open_end_tag

Quelli servono a controllare che la struttura sia correttamente annidata. Es. è corretto:

<tag>
<testo> </testo>
</tag>

ma non:

<pippo>
</topolino>

-- RobertoNavigli - 22 May 2007

Re: Sintassi

1) questa è una domanda "da modulo 1": tra due tag può esserci qualsiasi testo 2) direi di sì

-- RobertoNavigli - 22 May 2007

grammatica TAG

Salve, nelle specifiche è indicato come tag un frammento di documento composto da: START_TAG BLOCCO END_TAG. Volevo sapere se i casi seguenti devono quindi essere considerati errore sintattico...ovvero, dopo uno START_TAG devo comunque aspettarmi una STRING (che può anche essere un semplice new line) oppure posso avere subito un END_TAG o magari un altro START_TAG (nel caso di TAG annidati per esempio)?
1) <xsML></xsML>
2) <xsML><documento>TESTO</documento></xsML>
-- LauraMinicucci - 22 May 2007

LAST TOKEN

Prof nelle specifiche non c'è scritto a CHI devo restituire il token: cioè se la last_token viene kiamata dalla get_xsml_doc in poi va bene, perchè ho sempre i parametri da mandarle; ma se viene chiamata da main le cose si complicano! Quindi viene kiamata da main o da get_xsml_doc (e superiori)?

-- DanieleR - 23 May 2007

ricorsione

1) io non capisco bene una cosa.. la funzione che deve essere richiamata ricorsivamente è la get_xsml_doc o una (o piu) funzioni al suo interno? 2) come facciamo con l'analizzatore lessicale? se chiamiamo ricorsivamente la get_xsml_doc ogni volta che viene chiamata apre un nuovo analizzatore lessicale?

-- JacopoSciarra - 23 May 2007

Re: Re: ultimo open_end_tag
forse non mi sono espresso bene. nell'esempio i nodi e appartengono alla lista children di ma creando alla fine il nodo di questo verrebbe esterno al resto della struttura per come l'ho inteso io


-- GiuseppeCoppola - 23 May 2007

Re: Re: Re: ultimo open_end_tag
forse non mi sono espresso bene. nell'esempio i nodi TESTO e /TESTO appartengono alla lista children d iTAG ma creando alla fine il nodo di /TAG questo verrebbe esterno al resto della struttura per come l'ho inteso io
<tag>
<testo> </testo>
</tag>
-- GiuseppeCoppola - 23 May 2007

Re: ricorsione

1)ALL' INTERNO DI get_xsml_doc TI CHIAMI UNA O PIù FUNZIONI RICORSIVE DIPENDE DA COME PROGETTI IL PROGRAMMA (con + funzioni è molto + semplice).

2)FAI COSI IN get_xsml_doc TI CREI L'ANALIZZATORE LESSICALE CON new_lexical_analyzer e poi ti chiami una funzione ricorsiva che ti controllo il documento passandogli i parametri appropiati

cmq prof per chi ha finito come fà a testare il programma senza avere un email??


-- AlessandroMastropietro - 23 May 2007

Re: Re: ricorsione
non email ma main scusate!!!:-)

-- AlessandroMastropietro - 23 May 2007

xsml_syn.h

professore nel xsml_syn.h ho dovuto aggiungere le #include dei file .h dei precedenti moduli altrimenti avevo errori in compilazione, bisogna fare così o devo adeguarmi al vostro xsml_syn.h?

-- MicheleMartinelli - 23 May 2007

Radice

una domanda sulle specifiche: >oltre a verificare la correttezza del documento ricevuto in ingresso, >che essendo un albero sarà formato da un unico tag

la radice e' il documento ? quindi posso avere situazioni del genere scritto sotto oppure la radice e' il primo tag quindi la situazione sotto descritta non e' valida ? Grazie

<child1>
</child1>
<child2>
</child2>
-- AlbertoRivelli - 23 May 2007

Re: grammatica TAG

Quei due casi sono perfettamente leciti...

-- RobertoNavigli - 23 May 2007

Re: xsml_syn.h

Va bene, effettivamente includeremo anche noi gli altri file .h

-- RobertoNavigli - 23 May 2007

Re: LAST TOKEN

La last token può essere chiamata da chiunque. Raramente si suppone che le funzioni siano chiamate solo da altre funzioni. Devono essere pensate in modo generale.

-- RobertoNavigli - 23 May 2007

Re: Re: Re: Re: ultimo open_end_tag

no, non sono i token a diventare nodi! Si rilegga le specifiche del modulo 1, dove viene chiaramente mostrato l'albero associato a un file x(s)ml.

-- RobertoNavigli - 23 May 2007

Re: Radice

Esatto. Un documento con più di una radice non è un albero (è in realtà una "foresta" di alberi), quindi non è sintatticamente ben formato. I documenti xsML devono avere una struttura ad albero. Di conseguenza devono avere una sola radice.

-- RobertoNavigli - 23 May 2007

Controllo su node *

Ma nei controlli che facciamo all'inizio della funzione get_xsml_doc, il puntatore a puntatore alla struttura node, puo risultare NULL o in quel caso ritorniamo errore?

-- LucaDiFilippo - 24 May 2007

Re: Re: grammatica TAG

Non capisco perchè il codice che riporto in allegato è lecito quando dalle specifiche si legge chiaramente che "Un blocco è formato da una sequenza di n tag preceduti e seguiti da un testo. In particolare, si osservi che un blocco comincia e termina sempre con un testo e che se n=0 il blocco si riduce solo a un testo". In questi due casi non c'è testo tra i tag xsML e /xsML e tra xsML e documento e /documento e /xsML. Secono le specifiche si tratta di errori sintattici.

LA PREGO DI RISPONDERMI GRAZIE!


-- GiuseppeLaTorre - 24 May 2007

Re: Re: grammatica TAG

Scusate ho dimenticato il codice....
1) <xsML></xsML>
2) <xsML><documento>TESTO</documento></xsML>

-- GiuseppeLaTorre - 24 May 2007

MODULO 1

il mio modulo1 non compila. Ho controllato, il problema è una lettera maiuscola che su windows non dava problemi ho scritto: node * t = (node *)malloc(sizeof(node)); invece di: Node * t = (Node *)malloc(sizeof(Node));

volevo sapere come fare a consegnare le correzioni. le mando via mail o apre una nuova pagina di consegna apposita ?

un dettaglio: in realtà -wall restituisce anche un warning dovuto al fatto che una funzione che dovrebbe tornare int in realtà ritorna void, ma la cosa non causa malfunzionamenti. ho letto che bisogna mandare confrontadiff. e volevo capire se serve solo per controllare se il file è stato riscritto da capo o considererà anche il numero di correzioni effettuate? perchè nel caso chiaramente mi tengo il mio bel warning!


-- GabrieleTarantino - 24 May 2007

MODULO 1 (ancora)

ancora una cosa importante: ho creato una funzione di appoggio ltoa che prende una lista, e la mette in un vettore. il problema è che in stdlib è già definita una funzione con questo nome. non riesco proprio a capire perchè ma il programma NON genera errore in compilazione, funziona perfettamente!

Tentando di compilare (per sbaglio)il solo file xsml_lex.c (senza il .h e il main)

conflicting type for ltoa previous declaration of ltoa in stdlib.h

non ci ho capito molto, ma sarei più tranquillo cambiando nome alla funzione. pertanto ribadisco la domanda: conterà il numero di correzioni che sono state necessarie? e poi: come mai il programma compilava comunque?


-- GabrieleTarantino - 24 May 2007

"Foresta di alberi"...

Se il x(s)ml è un boschetto, come deve reagire il modulo? Dare errore, costruire sull'argomento radice passato alla get_xsml_doc() l'albero relativo al primo tag a "livello 0" e tralasciare il resto o che altro?

Grazie


-- OliverTran - 25 May 2007

Re: MODULO 1

Se le correzioni sono marginali è meglio, ma correzioni di quel genere sono assolutamente ammissibili.

-- RobertoNavigli - 25 May 2007

Re: Re: Re: "Foresta di alberi"...
Bisogna emettere errore se abbiamo una foresta, invece che un solo albero. Cito dalle specifiche:

Questa struttura ricorsiva corrisponde a
quella di un albero (già descritto in dettaglio nelle specifiche dei precedenti moduli). L&#8217;analizzatore
sintattico, oltre a verificare la correttezza del documento ricevuto in ingresso, che essendo un albero sarà
formato da un unico tag (detto appunto il tag radice), dovrà costruire il corrispondente albero.

-- RobertoNavigli - 25 May 2007

Re: Re: Re: grammatica TAG
Verificherò con il prof. Guerrini. Comunque una stringa può essere vuota (""), quindi il problema non si dovrebbe porre.

-- RobertoNavigli - 25 May 2007

dubbio sui nodi di tipo testo

so che può sembrare una domanda stupida, però vorrei sapere se un nodo di tipo testo può avere dei figli... e se è così sarebbe possibile un esempio?

grazie mille


-- AntonioPetrella - 26 May 2007

Testo prima o dopo il tag

Salve professore. Mi è sorto un dubbio: devo produrre errore per entrambe i documenti xsml riportati sotto in quanto ho del testo prima o dopo la radice?Se si, mettere uno spazio o un newline prima o dopo la radice porterebbe ad errore di token inaspettato; volevo chiederle conferma..la ringrazio
1) testo <radice> testo2 </radice>
2) <radice> testo </radice> testo2
-- ElenaAgostini - 26 May 2007

Considerazioen sul Modulo2 fornito dal Prof.

Buongiorno, ho provato il modulo2 fornito dai professori e mi va in segmentation fault. Premetto che non li ho toccati, e li ho compilati sotto KNOPPIX live cd. Volvo chiedere colpa del mio compilatore o errore del Programma...?

Allego codice di Output

knoppix@2[xsml2]$ gcc xsml_list.c main2a.c -o List.out
knoppix@2[xsml2]$ ./List.out
La lista e' piena (ok)
Segmentation fault

-- SimoneStraccia - 26 May 2007

Re: Considerazioen sul Modulo2 fornito dal Prof.

no tranqui, da anke a me t1 ok, t4 ok e poi segmentation. E' un errore di implementazione dei child(add first e last) da parte del prof. speriamo corregga

-- DanieleR - 26 May 2007

Re: Considerazione sul Modulo2 fornito dal Prof.

Ragazzi, scusate: mancava un

return i;

in fondo alla funzione get_iterator! Ho aggiornato il tar.gz.


-- RobertoNavigli - 26 May 2007

Re: Re: Re: Re: grammatica TAG

Utilizzando il modulo1 implementato dal prof, l'input 1) fornito in allegato produce solo un token di tipo TESTO ("PROVA"), e non produce assolutamente altri due token "" (stringa vuota) tra a e b e tra /b e /a. Quindi, se il modulo3 deve usare il modulo1 per estrarre i token, un blocco formato solo da un TESTO "" (stringa vuota) non potrà mai verificarsi!!!!!! Quindi o la regola relativa al blocco nelle specifiche è sbagliata oppure le specifiche sono corrette ma l'esempio dato in input contiene errori sintattici proprio perchè un blocco deve contenere almeno un token di tipo testo che, per il modulo1, non può essere una stringa vuota. Prego cortesemente di rispondermi, grazie.

1) ERRATO:    <a><b>PROVA</b></a>
2) CORRETTO:  <a> <b>PROVA</b> </a>
3) CORRETTO:  <a> <b>PROVA</b> </a>

-- GiuseppeLaTorre - 27 May 2007

Main di prova

Buonasera, quando sarà possibile avere un main per testare le nostre funzioni? Grazie

-- GloriaRomualdi - 27 May 2007

Errore in caso di foresta di alberi

Che errore deve riportare la get_xsml_doc() nel caso si abbia una foresta di alberi?

Di primo impatto direi SAERR_UNEXPECTED_TOKEN o SAERR_GENERIC ma quale è richiesto?

Grazie


-- OliverTran - 28 May 2007

token last_token(void)

Ho dei problemi con l'implementazione di questa funzione. Il valore da ritornare è infatti un token, e non un puntatore a token. Mi succede quindi che se provo a chiamare la suddetta funzione (da un qualunque main) e assengnare il risultato ad un token mi da errore di segmentation fault. Come si può risolvere?
token ultimo=last_token();

segmentation fault
-- FedericoScacco - 28 May 2007

Testi sugli Alberi Ennari

scusate qualcuno potrebbe consigliarmi delle dispense online o anche un libro di testo (visto che deitel non ne parla) dove vengono spiegati, magari anche con esempi, gli alberi ennari?? grazie

-- MarcoMarinangeli - 28 May 2007

Patch

Salve prof Ma è vero che si possono inviare delle pathc del secondo modulo Grazie

-- AlessandroMastropietro - 28 May 2007

Errori Strani

Ci sono alcune funzioni che mi danno SIGABRT come la free() o la malloc anche se fino a qualche ciclo prima, o nei moduli precedenti testate e ritestate facevano il loro quallido quanto utile lavoro. Come mai questi scioperi senza preavviso? anche dopo aver funzionato per 3 - 4 volte poi adios...possibile?? in output la console mi spara una serie di mappe di memoria e mi dice "memory corruption" ...

grazie

es.
int add_last(list* l, void *el){
vagonePtr vptr;
switch(){
            case TRUE:
         /*questa malloc funziona 9 volte poi alla decima abortisce!*/
         vptr=(vagonePtr)malloc(sizeof(struct vagone));
         etc etc
}
-- AlainBindele - 28 May 2007

Re: main di prova

mi associo.. sarebbe possibile avere un main di prova? grazie

-- JacopoSciarra - 29 May 2007

free

Salve prof!!! Nel caso di errore i nodi vanno liberati, mediante una free()? Grazie

-- GabrieleIoannucci - 29 May 2007

Attributi negli end tag??

Salve professore, è sintatticamente corretta la presenza di attributi e relativi valori negli END TAG??

-- AntonioMiranda - 29 May 2007

Re: token last_token(void)

ciao Federico....basta che nel tuo main ti dichiari un puntatore a token (es. token* ultimo; ), allochi la memoria con la malloc e poi richiami la funzione come riportato di seguito....vedrai che funziona...
*ultimo= last_token();
-- LauraMinicucci - 29 May 2007

ADT pila

vorrei sapere se è possibile implementare un ADT di tipo pila, in xsml_syn.c, che verrebbè quindi manipolato con push, pop etc etc...oppure dobbiamo per forza utilizzare solo le liste di xsml_list??

-- GianlucaSquarcia - 29 May 2007

Re: adt pila

io avrei fatto uan prova con una pila.. credo sia legale.. il prof disse a lezione che si puo usre quello che si vuole..

-- JacopoSciarra - 29 May 2007

Re: main di prova

Mi associo anch'io alla richiesta..

-- SimonaSforza - 29 May 2007

Re: Errore in caso di foresta di alberi

SAERR_UNEXPECTED_TOKEN va bene.

-- RobertoNavigli - 30 May 2007

Re: Testi sugli Alberi Ennari

Non è un granché, però "C didattica e programmazione" (Kelley & Pohl) ne parla. Se non erro anche "Strutture dati in C" (Horowitz & Sahni)

-- RobertoNavigli - 30 May 2007

Re: Patch

Sì, si potranno inviare le patch per i vari moduli. Oggi metto online il form per sottomettere le patch per il modulo 1.

-- RobertoNavigli - 30 May 2007

Re: free

Potete tralasciare il discorso di deallocazione della memoria, poiché potrebbe richiedere una conoscenza a priori dei diversi moduli da implementare.

-- RobertoNavigli - 30 May 2007

Re: Attributi negli end tag??

No, non si possono avere attributi negli end tag.

-- RobertoNavigli - 30 May 2007

Re: ADT pila

Sì, potete usarla, anche se in effetti con la ricorsione dovrebbe essere tutto più semplice.

-- RobertoNavigli - 30 May 2007

Riguardo al main

Ragazzi, è inutile che io vi fornisca un main: è talmente semplice che non ha molto senso. Quello che vi consiglio di fare, piuttosto, è di controllare voi che gli alberi generati corrispondano effettivamente alla struttura del documento xsML.

Vi ricordo che come abbiamo detto questo lunedì a lezione non è necessario inserire figli di testo con testo vuoto, ad esempio: <tag1><tag2></tag2></tag1> viene rappresentato con due nodi: tag2 figlio di tag1.


-- RobertoNavigli - 30 May 2007

tag annidati con lo stesso nome....

vorrei sapere se con il seguente file bisogna restituire errore...

<xsml attributo="valore">
    <interno attributo="valore">
        <xsml>
        </xsml>
    </interno>
</xsml>
-- GianlucaSquarcia - 30 May 2007

secondo modulo

salve professore, rivedendo il secondo modulo, mi sono accorto di essermi dimenticato una cosa e quindi rinominare la struttura degli attributi di node.h. vorrei sapere se questa mia modifica possa compromettere la valutazione del modulo 3.grazie

-- AlessandroMastropietro - 31 May 2007

scorrimento stack.....

per scorrere uno stack in questo caso non posso utilizzare gli iteratori creati nel secondo modulo in quanto quelli sono stati fatti per un altro tipo di struttura(struct list_node)....vorrei sapere se è un errore oppure no...questa sono le strutture ke uso per lo stack...

struct elemento{
       token tok;
       struct elemento *next;
       };
       typedef struct elemento data;
       
struct stack{
       data *top;
       int cnt;
       };
       typedef struct stack STACK;
-- GianlucaSquarcia - 31 May 2007

Tag con testo vuoto

Questo lunedì non ho potuto seguire la lezione di laboratorio e volevo sapere se per "tag con testo vuoto" risulta inutile inserire nell'albero valgono anche tag con solo tabulazioni e/o newline e/o solo spazi, tipo i tag generati da:
<tag1>
<tag2>
[tabulazione]<tag3>
                <tag4>
                </tag4>
[tabulazione]</tag3>
</tag2>
</tag1>
-- OliverTran - 31 May 2007

dopo il tag radice...

salve professore, avrei una domanda....dobbiamo emettere errore anche nel caso seguente? perchè il prof guerrini a lezione disse che era concesso implementare la funzione sia emettendo un errore sintattico sia, una volta incontrato il CLOSE_TAG che chiude la radice del documento, tralasciare tutto il resto senza emettere errore...
<xsML>
</xsML>
ho una stringa fuori dal documento.....
-- LauraMinicucci - 01 Jun 2007

String vuota prima del tag radice

Salve professore, magari è già stato detto a lezione,ma purtroppo io non posso seguire. Prima del tag radice è possibile avere una string che sia magari vuota?Cioè è sintatticamente concesso che il documento inizi da una posizione diversa da 0,0?

-- AntonioMiranda - 01 Jun 2007

problema con la ricorsione

la mia get_xsml_doc usa una funzione d'appoggio che si auto-richiama ricorsivamente per costruire l'albero.. il problema è che andando verso il basso, funziona, cioe nelle chiamata a scendere verso le foglie. Però quando arriva a una foglia, non riesce a risalire, mi va in segmentation default. Mi chiedo, quando si arriva a una foglia, cosa bisogna far restituire alla funzione?? Nella funzione (quella sull'espressione) fatta da prof in aula, quando incontra una foglia, riempe i campi di quella struttura, poi ignora tutta la parte dell' if (tk.type == open).. e arriva a unpunto dove libera la memoria del nodo e ritorna NULL. Ho provato ancheio a fare cosi, ma mi va in segmentation default.. cosa bisogna tornare secondo voi??

-- JacopoSciarra - 01 Jun 2007

Errore dovuto alla close_lexycal_analyzer

Salve, ho completato il modulo 3 e funziona,tranne che per un dettaglio:il file xsml_syn.c,prima me lo fa compilare,ottenendo il file oggetto xsml_syn.o,poi quando vado a lanciare il comando con i vari file oggetto,mi viene restituito un errore dovuto alla chiamata alla close_lexycal_analyzer contenuta in get_xsml_doc.Premetto che uso i moduli messi in linea dal professore,ed gli include sono tutti a posto,altrimenti non funzionerebbe neanche la new_lexycal_analyzer,e comunque mi darebbe errore in fase di compilazione.A cosa può essere dovuto?l'errore è il seguente
xsml_syn.o:xsml_syn.c:(.text+0x53e):undefined reference to '_close_lexycal_analyzer'
collect2:ld returned 1 exit status
-- AntonioMiranda - 01 Jun 2007

Re: Errore dovuto alla close_lexycal_analyzer

da errore perkè si scrive close_lexical_analyzer.... senza la y in lexical....

-- GianlucaSquarcia - 01 Jun 2007

Re: Re: Errore dovuto alla close_lexycal_analyzer
Che stupido,hai ragione...mi sa che devo fare una pausa...grazie

-- AntonioMiranda - 01 Jun 2007

Errore in caso di nome file non valido

Nel caso in cui il nome del file da analizzare non è valido, l'analizzatore lessicale restituisce ERR_FILE. Quale codice di errore deve restituire la get_xsml_doc se si verifica questo tipo di errore (visto che non vi è un corrispondente tipo "SAERR_FILE")? SAERR_BAD_ARG potrebbe andar bene? Grazie.

-- GloriaRomualdi - 01 Jun 2007

dubbio generale

Io questa volta ho un problema di fondo sull'implementazione del modulo3: nel modulo 2 abbiamo definito delle strutture di liste e nodi che consentono di descrivere un albero, ma a me sembra che non siano sufficienti a rappresentare un albero xsml... i nodi possono essere solo tag node e text node, ma come differenzio i tag di apertura da quelli di chiusura? informazione a mio avviso indispesanbile per capire la correttezza del documento. Devo farmi una nuova struttura? Ma allora a che serviva la struct node? solo per il modulo 2? Ho apura che mi stia sfuggendo qualcosa... Mi dispiace se sono cose già dette a lezione, ma io non posso seguire

Altra breve domanda: i tag di apertura e chiusura corrispondenti devono essere uguali anche come maiuscole/minuscole?

grazie

Daniele.


-- DanieleCesaroni - 01 Jun 2007

funzioni in xsml_iter.c

Salve, siccome le funzioni per la scansione di attributi e nodi sono da intendere come parte "aggiuntiva" alle funzioni del secondo modulo, per curiosita', nella correzione verranno in qualche modo incluse nei nostri file consegnati per il modulo precedente?

-- CleoniceMansillo - 01 Jun 2007

Patch per la correzione

Salve,per "inviare la patch di correzione" si intende reinviare il file xsml_lex.c con le dovute correzioni?

-- AntonioMiranda - 02 Jun 2007

Re: Errore in caso di nome file non valido

io ho utilizzato SAERR_BAD_ARG nel controllare che nameFile = NULL, poi se new_lex_an ritorna errore ERR_FILE xsml_doc ritorna SAERR_INPUT.


-- GabrieleTarantino - 02 Jun 2007

Re: tag annidati con lo stesso nome....

Non c'e' nessun vincolo di questo tipo. I tag possono assumere qualsiasi nome in qualsiasi punto.

-- RobertoNavigli - 02 Jun 2007

Re: secondo modulo

In generale non troppo, però si potrà sottomettere una patch per il modulo 2

-- RobertoNavigli - 02 Jun 2007

Re: scorrimento stack....

Lo stack non si scorre! Le operazioni di base di uno stack sono pop e push...

-- RobertoNavigli - 02 Jun 2007

PROBLEMA 'GRAVE' CON LA INDEF

salve,

ho comesso uno "stupido" errore ma comunque compromettente: nel file xsml_list.h del secondo modulo già consegnato la # ifndef l'ho chiamata LEX_H in questo modo:

#ifndef LEX_H

proprio come nel file header del primo modulo xsml_lex.h quello fornito da voi(tale e quale!!!)

questo comporta che nel terzo modulo includendo xsml_lex.h e xsml_list.h insieme, non mi aggiunge durante la compilazione del file xsml_syn.c la parte d'instestazione scritta in xsml_list.h proprio perchè la # ifndef LEX_H è già stata definita dal primo modulo.....

cosa faccio??

mi scrivo a mano il codice d'intestazione sopra al file xsml_syn.c senza includere niente... oppure presumo che tutto sia corretto e aspetto di inviare la patch per il secondo modulo?????(in questo modo però finchè non potrò inviare la patch il terzo modulo non compilerà usando gli header file già consegnati)

in fin dei conti basterebbe cambiare il nome della ifndef nel file xsml_list.h consegnato

grazie CONFIDO IN UNA RISPOSTA


-- VincenzoNovino - 02 Jun 2007

Re: Tag con testo vuoto

Per tag con testo vuoto si intende esclusivamente il caso in cui non ci sia neanche un carattere, ovvero la stringa vuota "". Ad esempio: . In questo caso potete non inserire un figlio, tanto più che l'analizzatore lessicale non emette un token di tipo STRING se non c'è almeno un carattere.


-- RobertoNavigli - 02 Jun 2007

Re: dopo il tag radice...

Meglio emettere un errore. Ma potete anche tralasciare.

-- RobertoNavigli - 02 Jun 2007

Re: String vuota prima del tag radice

Come dicevo sopra, potete emettere errore o potete tralasciarla.

-- RobertoNavigli - 02 Jun 2007

Re: Errore in caso di nome file non valido

Decidete voi la mappatura tra gli errori del modulo 1 e quelli restituiti dal modulo 3.

-- RobertoNavigli - 02 Jun 2007

Re: dubbio generale

I nomi di tag aperti e chiusi devono corrispondere esattamente (case sensitive).

Per quanto riguarda il dubbio: dovrebbe rileggere più attentamente le specifiche del modulo 1, dove viene presentato un esempio di come un file xsML (XML in realtà) viene rappresentato mediante un albero: un nodo non rappresenta un tag aperto o un tag chiuso, ma la coppia di tag aperto-chiuso, con i suoi attributi (specificati nel tag aperto) e i suoi figli annidati al suo interno.


-- RobertoNavigli - 02 Jun 2007

Re: Patch per la correzione

Sì, inviate di nuovo il file xsml_lex.c

-- RobertoNavigli - 02 Jun 2007

Re: PROBLEMA 'GRAVE' CON LA INDEF

Vorrà dire che invierà una piccola patch per il modulo 2... segnali il problema se non ne terremo conto durante la valutazione.

-- RobertoNavigli - 02 Jun 2007

Re: Re: PROBLEMA 'GRAVE' CON LA INDEF
devo aspettare dunque la correzione del modulo 2 per inviare la patch???

esso ,singolarmente, dovrebbe compilare lo stesso con i main di prova.... il problema nasce solo nel terzo modulo quando vado ad includere gli headear files del primo e del secondo modulo che hanno lo ifndef con lo stesso nome.. (che stupido errore che ho fatto!!!)

dunque aspetto che escano i risultati del secondo modulo per inviare la realtiva patch??? e un'altra cosa in caso sia solo quello il problema dovrò inviare solo il file xsml_list.h con la ifndef corretta oppure rimandare in blocco tutto il file zip realativo al secondo modulo??


-- VincenzoNovino - 02 Jun 2007

creazione albero in caso di errore

Nel caso in cui si verifichi qualche errore è importante costruire un albero parziale? Io in molti casi riporto NULL nella struct node** di get_xsml_doc. Va bene?

-- DanieleCesaroni - 03 Jun 2007

Re: creazione albero in caso di errore

Emettendo un errore, non imposterei nemmeno NULL nella struct node **. Comunque va bene anche così.

-- RobertoNavigli - 04 Jun 2007

dopo ultimo OPEN_END_TAG....

se dopo l'ultimo open_end_tag c'e una stringa bisogna emettere errore?

-- GianlucaSquarcia - 04 Jun 2007

Re: dopo ultimo OPEN_END_TAG

ciao...il prof ha detto che sarebbe meglio emettere un errore ma si può anche tralasciare

-- LauraMinicucci - 04 Jun 2007

Per chi ha saltato un modulo

Come verranno testati i moduli successivi? Utilizzando moduli funzionanti immagino...? Non sarebbe possibile fornirli già da ora per consentire di fare un minimo di testing? (semmai fornirne solo il file oggetto)

Ringrazio anticipatamente,


-- LucaLollobrigida - 04 Jun 2007

Re: Per chi ha saltato un modulo

Chiedo venia, non avevo visto che erano già stati pubblicati ;p Luca

-- LucaLollobrigida - 04 Jun 2007

DUBBIO MODULO 2 PROF

nella funzione set_attributo, in questa riga di codice: a->name = attribute_name viene copiato il nome dell'attributo in a->name, ma si possono copiare 2 stringhe in questo modo? infatti a me da segmentation fault. e' un errore del codice?o sbaglio io a passare la stringa alla funzione?

-- LucaDiFilippo - 05 Jun 2007

Chiusura an. lessicale in caso di errore

In caso di errore dobbiamo chiudere l'analizzatore lessicale oppure possiamo uscire direttamente dalla get_xsml_doc con il codice di errore senza chiuderlo? Grazie.

-- GloriaRomualdi - 05 Jun 2007

Prototipi funzioni ausiliarie

professore visto che nel modulo 3 non dobbiamo consegnare "xsml_syn.h", i prototipi delle funzioni ausiliarie utilizzate li mettiamo all'inizio di "xsml_syn.c"? grazie

-- MarcoMarinangeli - 05 Jun 2007

Consegno la Patch?? (caso strano)

prof. ho un problema: nella valutazione del primo modulo mi date 100 ma in realtà il test 11 ha un carattere differente. Forse non avete considerato errore il fatto che il mio prog. quando ,in una stringa, incontra inaspettatamente l'EOF lo scrive nella stringa del token come ultimo carattere (che concettualmente non è sbagliato essendo EOF il char che provoca l'errore)?? Oppure vi è sfuggito e consegno la patch? p.s. scusi se scrivo qui ma non so dove fare domande sulle patch

-- MarcoMarinangeli - 05 Jun 2007

Re: DUBBIO MODULO 2 PROF

Dipende. Nella mia implementazione, suppongo che chi chiami la funzione allochi già la memoria per quella stringa. Se non voglio presupporre questo, devo allocare con malloc. La scelta dipende da come implemento gli altri moduli...

-- RobertoNavigli - 06 Jun 2007

Re: Chiusura an. lessicale in caso di errore

Va bene, non costa nulla farlo...

-- RobertoNavigli - 06 Jun 2007

Re: Prototipi funzioni ausiliarie

Uso le direttive #include.

-- RobertoNavigli - 06 Jun 2007

Re: Consegno la Patch?? (caso strano)

Non mi sembra una cosa così rilevante. Si tenga il suo 100...

-- RobertoNavigli - 06 Jun 2007

Re: Re: Prototipi funzioni ausiliarie
Quindi possiamo consegnare un header file con i prototipi delle funzioni ausiliarie? Chiedo conferma perché ho sempre letto di consegnare solo i due file xsml_syn.c e xsml_iter.c . Grazie.

-- GloriaRomualdi - 06 Jun 2007

Re: Re: Prototipi funzioni ausiliarie
eh infatti.. forse non mi sono spiegato bene.. intendevo le funzioni che usiamo per scansire il documento, quelle chiamate ricorsivamente. Mettiamo i prototipi all'inizio di xsml_syn.c ??

-- MarcoMarinangeli - 06 Jun 2007

Primo e secondo modulo

Per implementare il terzo modulo possiamo utilizzare i moduli del prof anche se il nostro è risultato corretto oppure quelli forniti dal professore bisogna utilizzarli solo nel caso in cui il nostro fosse errato?

-- ValerioSecondini - 07 Jun 2007

Re: (senza titolo)

il terzo modulo verrà corretto con i nostri moduli gia consegnati oppure con i moduli forniti dal professore?

-- ValerioSecondini - 07 Jun 2007

Re: Re: Re: Prototipi funzioni ausiliarie

Ho capito: sì, metteteli nel file .c.

-- RobertoNavigli - 08 Jun 2007

Re: Primo e secondo modulo

Di norma dovreste usare i vostri. Poi se i vostri sono un disastro o non li avete consegnati, usate quelli che vi abbiamo fornito noi...

-- RobertoNavigli - 08 Jun 2007
No such template def TMPL:DEF{PROMPT:thread}
  • Se usate dei titoli comprensibili ci capiamo tutti un po' meglio
  • Ricordatevi di chiudere i tag che inserite nei post.
  • Non partite con i flame, c'è una pagina apposta per gli OffTopic.

-- RobertoNavigli - 17 Mag 2007

Edit | Attach | Watch | Print version | History: r103 < r102 < r101 < r100 < r99 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r103 - 2007-06-08 - RobertoNavigli






 
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback