import tokeniterator.*;
import java.util.*;

public class UtilitaAlberi {
  
  public static String alberoToString(Albero a) {
    String res = "(" + a.radice();
    
    Albero p = a.primo();
    if (p != null) {
      alberoToString(p);
      List resto = a.resto();
      Iterator it = resto.iterator();
      while (it.hasNext()) {
        Albero f = (Albero)it.next();
        alberoToString(f);  
      }
    }
    return res + ")";
  }


  public static Albero stringToAlbero(String s) {
    //A -> ( B
    //B -> i C
    //C -> ) | ( B C
    TokenIterator ti = new TokenIterator(s,"()"," ");
    return A(ti);
  }
  
  private static Albero A(TokenIterator ti) {
    ti.next(); // leggi "("
    return B(ti);
  }

  private static Albero B(TokenIterator ti) {
    String info = ti.next();
    List figli =  C(ti);
    return new Albero(info,figli);
  }

  private static List C(TokenIterator ti) {
    String tk = ti.next();
    if (tk.equals(")")) 
      return new LinkedList();
    else {
      Albero a = B(ti);
      List l = C(ti);
      l.add(0,a);
      return l;
    }
  }

}
    
    
