private JobNode maybeParseFlow(JobNode firstJobNodeInFlow) {
		if (tokens.peek(TokenKind.DOUBLE_PIPE)) {
			List<JobNode> jobNodes = new ArrayList<>();
			jobNodes.add(firstJobNodeInFlow);
			while (tokens.maybeEat(TokenKind.DOUBLE_PIPE)) {
				JobNode nextNode = parseJobNode();
				// If nextNode is a Flow node, merge it with this one
				if (nextNode instanceof Flow) {
					jobNodes.addAll(nextNode.getSeries());
				}
				else {
					jobNodes.add(nextNode);
				}
			}
			return new Flow(jobNodes);
		}
		else {
			return firstJobNodeInFlow;
		}
	}
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