private JobNode parseJobNode() {
		// Handle (...)
		if (tokens.maybeEat(TokenKind.OPEN_PAREN)) {
			JobNode jn = parseJobNode();
			tokens.eat(TokenKind.CLOSE_PAREN);
			return jn;
		}
		// Handle a split < ... >
		if (tokens.peek(TokenKind.SPLIT_OPEN)) {
			JobNode jn = parseSplit();
			// is the split part of a flow? "<..> || b"
			return maybeParseFlow(jn);
		}
		JobDescriptor jd = parseJobDescriptor();
		// Handle a potential flow "a || b"
		return maybeParseFlow(jd);
	}
Parse a job flow definition into an abstract syntax tree (AST).

@param jobSpecification the textual job specification
@return the AST for the parsed job
@throws JobSpecificationException if any problems occur during parsing
spring-xd-dirt/src/main/java/org/springframework/xd/dirt/job/dsl/JobParser.java