public void closure(Production p){
		
		System.out.println("------------------------- Closure " + p.toString()+ " ------------------------------");
		State s = new State();
		List<Production> prList = new ArrayList<>();
		prList.add(p);
		
		
		for(int i = 0; i < prList.size(); i++){
			Production prod = prList.get(i);
			
			
			
			
			String elem="";
			if( !prod.is_dot_last()){
				 elem = prList.get(i).getElementAfterDot();
			}
			if( !prod.is_dot_last() && !isTerminal(elem)){
				if( p.left.equals("ASS") && p.dot == 2 && i == 2){
					String bla;
					bla = "das";
				}
				List<Production> l = getProductionsByLeft(prod.getElementAfterDot());
				for ( Production p1: l){
					if( !prList.contains(p1)){
						prList.add(p1);
					}
				}
			}
		}
		
		// prList is expanded list
		
		s.productions.addAll(prList);
		
		
		states.add(s);
		
	}