private void parseClauseLine(Scanner _scanner) {
		
		Clause currentClause = new Clause();
		
		String expectedLiteralString = "";
		
		while (_scanner.hasNext()) {
			
			expectedLiteralString = _scanner.next();
			
			if (expectedLiteralString.equalsIgnoreCase("0")) {
				break; // reached EOL
			}
			
			Integer signedLiteral = null;
			
			// extract literal index
			try { 
				
				signedLiteral = Integer.parseInt(expectedLiteralString);
				
			} catch (NumberFormatException e) {
				
				mParserState = ParserState.ERROR;
				println("Error: cannot parse literal index: " + expectedLiteralString);

			}
			
			if (validLiteral(signedLiteral)) {
				
				Variable variable = mExpression.getVariableByIndex(Math.abs(signedLiteral));
				boolean isNegative = signedLiteral < 0;
				
				// literal ok, can add to clause
				currentClause.getLiterals().add(new Literal(variable, isNegative));
				
				if (Math.abs(signedLiteral) > mMaxParsedIndex) {
					mMaxParsedIndex = Math.abs(signedLiteral);
				}
				
			} else {
				
				mParserState = ParserState.ERROR;
				println("Error: illegal literal: " + signedLiteral);
				
			}
			
		}
		
		if (currentClause.getLiterals().size() < 1) {
			
			mParserState = ParserState.ERROR;
			println("Error: clause contains no literals");
			
		} else if(!expectedLiteralString.equalsIgnoreCase("0")) {
			
			mParserState = ParserState.ERROR;
			println("Error: malformed clause EOL: " + expectedLiteralString);
			
		} else {
			
			mExpression.getClauses().add(currentClause);
			
		}
		
	}