@Override
	public Token parse() {
		Token test = first.getNext();
		
		if (!test.isOperator(Operator.BRACKET_LEFT))
			throw new RuntimeException("Expected '(' after IF, found: " + test.toString());
		
		testExpression = new BooleanExpression(test.getNext(), scope);
		test = testExpression.parse();
		
		if (!test.isOperator(Operator.BRACKET_RIGHT))
			throw new RuntimeException("Expected ')' after IF condition, found: " + test.toString());
		
		test = test.getNext();
		if (!test.isNewline())
			throw new RuntimeException("Expected newline, found: " + test.toString());
		
		Keyword[] targets = {Keyword.ELSE,Keyword.END};
		trueCondition = new StatementGroup(test.getNext(), targets, scope);
		test = trueCondition.parse();
		
		if (Keyword.ELSE.equals(test.getKeyword())) {
			test = test.getNext();
			assert(test.isNewline());
			targets = new Keyword[1];
			targets[0] = Keyword.END;
			falseCondition = new StatementGroup(test.getNext(), targets, scope);
			test = falseCondition.parse();
		}
		
		if (!test.isKeyword(Keyword.END))
			throw new RuntimeException("Expected END keyword, found: " + test.toString());
		
		return test.getNext();
	}