Qualcuno di voi ha provato a fare il Parser richiesto al punto 1 dell'appello di POC?
Io ho provato con StringTokenizer, con scarso successo, cercando in giro si trovano un sacco di parser complessi, qualche cosina di teoria che non ho la minima voglia di leggere.
A quanto ho capito bisogna leggere un carattere alla volta, come si fa in Java? Credo bisogna usare i flussi, ma sto andando un po' nel pallone...
- Arbal
- Ingegneria Informatica - Triennale
- Lunedì, 23 Febbraio 2004
- Subscribe via email
Comment
There are no comments made yet.
Accepted Answer
Pending Moderation
Curiosità idiota: i numeri sono tutti a una cifra?
Sì, ovvio.
Inutile complicarsi la vita quando il programma lo guarda per 10 secondi...
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 1
Accepted Answer
Pending Moderation
Come l'avete implementato voi?
Intendo: con numeri a una cifra o a due e più?
(non volevo l'implementazione
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 2
Accepted Answer
Pending Moderation
Curiosità idiota: i numeri sono tutti a una cifra?
Come l'avete implementato voi?
Come l'avete implementato voi?
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 3
Accepted Answer
Pending Moderation
scusate l'ignoranza ma come fate e gestire il - ? sto diventando abbastanza scemo... :P
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 4
Accepted Answer
Pending Moderation
Grazie mille sei stato gentilissimo
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 5
Accepted Answer
Pending Moderation
Prima di tutto
[code type="markup"]import java.io.*;
import roma.*;
import treeparser.*;[/code]
Crea una nuova classe, ricopia per intero il metodo
[code type="markup"]public static Node parseTree(StringReader string)[/code] dalla classe DepthFirstVisit. Devi lavorare esclusivamente su quello per effettuare il parsing.
[code type="markup"]char c = (char) string.read();[/code]
legge un carattere alla volta, ricordando la sua posizione all'interno della stringa anche a chiamate successive (o ricorsive). In altre parole, se la stringa è "ciao", c alla prima esecuzione sarà "c", alla seconda "i" e così via.
Quindi, se alla prima lettura c è un numero, allora hai finito (l'input è del tipo ae ::= n ). Se invece c è una parentesi, allora chiama ricorsivamente parseTree(StringReader) fino a raggiungere il caso base (ae ::= n).
Ti conviene, per comodita, dare per assunto che tra espressioni del tipo ae ::= (a+b) non ci siano spazi tra operandi e operatore.
Non posso dirti precisamente l'algoritmo che ho implementato (meglio non scherzare con Pettorossi), però tieni presente che se in input immetti (5+3), devi creare un albero in questo modo:
[code type="markup"]
8
/ \
5 3[/code]
Se invece scrivi ((3+2)-1) allora l'albero sarà
[code type="markup"]
4
/ \
5 1
/ \
3 2[/code]
A me ha messo 8 punti su 12 ...probabilmente ci sarà una soluzione migliore, ma questa qui è semplice e soddisfa i requisiti che ha dato (ricorsione e riuso del software).
Ciao.
[code type="markup"]import java.io.*;
import roma.*;
import treeparser.*;[/code]
Crea una nuova classe, ricopia per intero il metodo
[code type="markup"]public static Node parseTree(StringReader string)[/code] dalla classe DepthFirstVisit. Devi lavorare esclusivamente su quello per effettuare il parsing.
[code type="markup"]char c = (char) string.read();[/code]
legge un carattere alla volta, ricordando la sua posizione all'interno della stringa anche a chiamate successive (o ricorsive). In altre parole, se la stringa è "ciao", c alla prima esecuzione sarà "c", alla seconda "i" e così via.
Quindi, se alla prima lettura c è un numero, allora hai finito (l'input è del tipo ae ::= n ). Se invece c è una parentesi, allora chiama ricorsivamente parseTree(StringReader) fino a raggiungere il caso base (ae ::= n).
Ti conviene, per comodita, dare per assunto che tra espressioni del tipo ae ::= (a+b) non ci siano spazi tra operandi e operatore.
Non posso dirti precisamente l'algoritmo che ho implementato (meglio non scherzare con Pettorossi), però tieni presente che se in input immetti (5+3), devi creare un albero in questo modo:
[code type="markup"]
8
/ \
5 3[/code]
Se invece scrivi ((3+2)-1) allora l'albero sarà
[code type="markup"]
4
/ \
5 1
/ \
3 2[/code]
A me ha messo 8 punti su 12 ...probabilmente ci sarà una soluzione migliore, ma questa qui è semplice e soddisfa i requisiti che ha dato (ricorsione e riuso del software).
Ciao.
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 6
Accepted Answer
Pending Moderation
Potresti spiegarti un po' meglio?
Grazie mille
Grazie mille
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 7
Accepted Answer
Pending Moderation
Ma qualcuno l'ha fatto il parser usando le classi che dice lui?
Io alla lezione fatidica non c'ero, però non si capisce proprio come fare...manco la grammatica so riuscito a decifrare.
Io l'ho fatto e, pensandoci bene, è veramente semplice se usi le classi che ha già dato.
Importa i vari package, riscrivi il metodo
[code type="markup"]public static Node parseTree(StringReader string)[/code]
della classe DepthFirstVisit modificandolo dove occorre. In particolare dovresti lavorare all'interno dell'if (c == '(').
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 8
Accepted Answer
Pending Moderation
No comment.
Prima di questa uscita potevo pure condividere con un po' di sforzo il modo in cui ha tenuto il corso...ma ora mi riesce difficile.
Due mesi buttati...
Ma qualcuno l'ha fatto il parser usando le classi che dice lui?
Io alla lezione fatidica non c'ero, però non si capisce proprio come fare...manco la grammatica so riuscito a decifrare. Poteva almeno commentarlo meglio il codice.
Prima di questa uscita potevo pure condividere con un po' di sforzo il modo in cui ha tenuto il corso...ma ora mi riesce difficile.
Due mesi buttati...
Ma qualcuno l'ha fatto il parser usando le classi che dice lui?
Io alla lezione fatidica non c'ero, però non si capisce proprio come fare...manco la grammatica so riuscito a decifrare. Poteva almeno commentarlo meglio il codice.
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 9
Accepted Answer
Pending Moderation
Inoltre il primo eserercizio doveva essere fatto in maniera obbligatoria, altrimenti non correggeva neanche il resto. So di molte persone che sono amdate all'esame preparate, ma hanno dovuto ritirarsi perchè non erano in grado di fare il parsing e secondo me questo non è giusto, perchè era un argomento spiegato durante l'ultima lezione
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 10
Accepted Answer
Pending Moderation
Si tratta di usare le classi nello zip "DepthFirstVisitofTree" nella homepage del corso.
Il problema è...come?!
Siete riusciti a impostare una soluzione?
Io cmq non leggo la parola parsing nè nel programma del corso, nè nelle domande d'esame che ha dato. E in ogni caso ha fatto pesare come metà esame un argomento trattato in una sola lezione (l'ultima) del corso, e che cmq non mi pare sia argomento da trattare in una lezione sola.
Ma tanto non possiamo fare altro che avvelenarci, quindi tornando a noi: come avete impostato il programma?
Ciao.[/i]
Il problema è...come?!
Siete riusciti a impostare una soluzione?
Io cmq non leggo la parola parsing nè nel programma del corso, nè nelle domande d'esame che ha dato. E in ogni caso ha fatto pesare come metà esame un argomento trattato in una sola lezione (l'ultima) del corso, e che cmq non mi pare sia argomento da trattare in una lezione sola.
Ma tanto non possiamo fare altro che avvelenarci, quindi tornando a noi: come avete impostato il programma?
Ciao.[/i]
Comment
There are no comments made yet.
- more than a month ago
- Ingegneria Informatica - Triennale
- # 11
- Page :
- 1
There are no replies made for this post yet.
Be one of the first to reply to this post!
Be one of the first to reply to this post!
Please login to post a reply
You will need to be logged in to be able to post a reply. Login using the form on the right or register an account if you are new here. Register Here »