// DFAtest.
// Just to test some simple stuff
//
import Expr;

public class DFAtest 
{
public static void main(String [] args)
	{	
	Alpha a = new Alpha(new Character('0'));
	Alpha b = new Alpha(new Character('0'));
	Empty n = new Empty();
	Epsilon e = new Epsilon();
	Star s = new Star(a);
	Star s1 = new Star(a);
	Star s2 = new Star(s1);
	Star s3 = new Star(s2);
	System.out.println(s3);
	System.out.println(s3.reduce());
	Concat c1 = new Concat(s1, s2); 
	System.out.println("c1: "+ c1);
	System.out.println("c1.reduce() " + c1.reduce());
	Expr c2 = new Concat(s1, s2); 
	System.out.println("c2: "+ c2);
	System.out.println("c2.reduce() " + c2.reduce());
	Expr x0 = new Concat(n, s);
	Expr x1 = new Union(n, s);
	Expr x2 = new Concat(e, s);
	Expr x3 = new Union(e, s);
	Expr x4 = new Concat(s, s);
	Expr x4a = new Concat(s, s1).reduce();
	Expr s1a = new Union(s, s1);
	x4a = x4a.reduce();
	Expr x5 = new Union(a, b);
	Expr x6 = x5.reduce();
	Expr x1a = x1.reduce();
	System.out.println(x1.reduce());
	Alpha i = new Alpha(new Character('1'));
	Expr x9 = new Concat(i, n);
	System.out.println("x9 : Concat(i,n)             : " + x9);
	Expr x9b = x9.reduce();
	Expr x9a = new Concat(i, x9b);
	System.out.println("x9a: Concat(i,x9)            : " + x9a);
	System.out.println("x9a: Concat(i,x9).reduce()   : " + x9a.reduce());
	System.out.println("a  : Alpha('0')              : " + a);
	System.out.println("s  : Star(a)                 : " + s);
	System.out.println("s1 : Star(a)                 : " + s1);
	System.out.println("n  : Empty()                 : " + n);
	System.out.println("x0 : Concat(n, s)            : " + x0);
	System.out.println("x0a: Concat(n, s).reduce()   : " + x0.reduce());
	System.out.println("x1 : Union(n, s)             : " + x1);
	System.out.println("x1a: Union(n, s).reduce()    : " + x1a);
	System.out.println("s1a: Union(s, s1).reduce()   : " + s1a.reduce());
	System.out.println("x2 : Concat(e, s)            : " + x2);
	System.out.println("x2a: Concat(e, s).reduce()   : " + x2.reduce());			
	System.out.println("x3 : Union(e, s)    	     : " + x3);
	System.out.println("x3a: Union(e, s).reduce()    : " + x3.reduce());
	System.out.println("x4 : Concat(s + s)           : " + x4);
	System.out.println("x4a: Concat(s + s1).reduce() : " + x4a);
	System.out.println("x5 : Union(0 + 0)            : " + x5);
	System.out.println("x5 : Union(0 + 0).reduce()   : " + x5.reduce());
	
	}

}
