private Node booleanRelation() {
		// sumExpr ((LE^ | LT^ | GE^ | GT^ | EQUAL^ | NOT_EQUAL^) sumExpr)?
		Node sumExpr = sumExpression();
		TokenType type = lookAhead(1);
		if (type == TokenType.LESS_EQUAL) {
			return new LessEqualOpNode(match(TokenType.LESS_EQUAL).getPosition(),
					sumExpr, sumExpression());
		} else if (type == TokenType.LESS_THEN) {
			return new LessThenOpNode(match(TokenType.LESS_THEN).getPosition(),
					sumExpr, sumExpression());
		} else if (type == TokenType.GREATER_EQUAL) {
			return new GreaterEqualOpNode(match(TokenType.GREATER_EQUAL).getPosition(),
					sumExpr, sumExpression());
		} else if (type == TokenType.GREATER_THEN) {
			return new GreaterThenOpNode(match(TokenType.GREATER_THEN).getPosition(),
					sumExpr, sumExpression());
		} else if (type == TokenType.EQUAL) {
			return new EqualsOpNode(match(TokenType.EQUAL).getPosition(),
					sumExpr, sumExpression());
		} else if (type == TokenType.NOT_EQUAL) {
			return new NotEqualsOpNode(match(TokenType.NOT_EQUAL).getPosition(),
					sumExpr, sumExpression());
		}
		return sumExpr;
	}