Premetto che in ingresso della mia readSE ho questo oggetto LispTokenizer che mi fa il parsing della stringa e mi restituisce elemento per elemento un intero che identifica appunto l'elemento corrente. Datela per buona perchè la classe LispTokenizer mi è stata fornita, è verificata e funziona perfettamente quindi il problema sta nel mio codice.
Altra premessa, la mia struttura Tree è così fatta:
codice:
private String inf;
private Tree sx;
private Tree dx;
private boolean punto = false;
private boolean closed= false;
Il codice è il seguente:
codice:
protected static Tree readSE(LispTokenizer lt) {
Tree letto = null;
int select=lt.next();
if(select!=LispTokenizer.EOF){
switch(select){
case LispTokenizer.OPEN:{
Tree sx=readSE(lt);
letto=new Tree(sx,readSE(lt));
if(letto.dx!=null)letto.punto=letto.dx.punto;
return letto;
}
case LispTokenizer.CLOSED:{ ????
letto= new Tree(null);
letto.closed=true;
return letto;
}
case LispTokenizer.ATOM:{
return new Tree(lt.getAtom());
}
case LispTokenizer.BLANK:{
return new Tree(readSE(lt),readSE(lt));
}
case LispTokenizer.DOT:{
int elem =lt.next();
if(elem == LispTokenizer.OPEN){
letto = new Tree(readSE(lt),readSE(lt));
}
else if(elem==LispTokenizer.ATOM)
letto=new Tree(new Tree(lt.getAtom()),readSE(lt));
if(letto.dx!=null)
letto.punto=letto.sx.punto=letto.dx.punto=true;
else
letto.punto=letto.sx.punto=true;
return letto;
}
default:{return readSE(lt);}
}}
return null;
}
dove
EOF, indica che la stringa è terminata;
OPEN, parentesi aperta
CLOSE, parentesi chiusa
BLANK, spazio
DOT, pallino/punto di concatenazione
ATOM, carattere o sottostringa da scrivere nella generica foglia.
con particolare attenzione nel caso del closed dato che sicuramente lì ci andrà qualcos'altro.