import java.util.*;

class Main {  
  public static void main(String[] args) {
    Espressione A = new Atomo("A");
    Espressione B = new Atomo("B");
    Espressione and1 = new And(A,B);
    Espressione D = new Atomo("D");
    Espressione E = new Atomo("E");
    Espressione and2 = new And(D,E);
    Espressione not2 = new Not(and2);
    Espressione or1 = new Or(and1,not2);
    System.out.print("\nStampa espressione: ");
    String s = EspressioneUtil.espressione2string(or1);
    System.out.println(s);
    Espressione e1 = EspressioneUtil.string2espressione(
      "(!(A&!B)|(E|D))&A"
      );
    String ss = EspressioneUtil.espressione2string(e1);
    System.out.println(ss);

    Set vars = EspressioneUtil.variabili(e1);
    Iterator it = vars.iterator();
    while(it.hasNext()) 
      System.out.print(it.next() + " ");
    System.out.println();

    Assegnazione a = new Assegnazione();
    a.assegna("A",true);
    a.assegna("B",false);
    a.assegna("D",true);
    a.assegna("E",false);
    System.out.println(s + " = " + Valutazione.valuta(or1,a));
    System.out.println(ss + " = " + Valutazione.valuta(e1,a));
  }
}

