private void parsePreferencesLine(Scanner _scanner) {
		
		// preferences contain of 3 tokens
		String form = null;
		String numberOfVariablesString = null;
		String numberOfClausesString = null;
		
		// read form
		if(_scanner.hasNext()) {
			
			form = _scanner.next();
			
		} else {
			
			mParserState = ParserState.ERROR;
			println("Error: missing form info in preference line");
			return;
			
		}
		
		// read number of variables
		if (_scanner.hasNext()) {

			numberOfVariablesString = _scanner.next();

		} else {
			
			mParserState = ParserState.ERROR;
			println("Error: missing number of variables info in preferences line");
			return;
			
		}
		
		// read number of clauses
		if (_scanner.hasNext()) {

			numberOfClausesString = _scanner.next();

		} else {
			
			mParserState = ParserState.ERROR;
			println("Error: missing number of clauses info in preferences line");
			return;
			
		}
		
		// extract the numbers of strings
		try { 
			
			mNumberOfVariables = Integer.parseInt(numberOfVariablesString);
			
			mNumberOfClauses = Integer.parseInt(numberOfClausesString);
			
		} catch (NumberFormatException e) {
			
			mParserState = ParserState.ERROR;
			
		}
		
		// verify parsed preferences 
		if (parsedValidPreferencesLine(form)) {
			
			// preferences are ok, can create new expression
			createExpressionWithVariables();
			
			// from now on parser expects clauses
			mParserState = ParserState.READ_CLAUSE;
			
		} else {
			
			mParserState = ParserState.ERROR;
			
		}
		
	}