protected Handle makeBlock(BlockStartState start, BlockAST blkAST, List<Handle> alts) {
		BlockEndState end = newState(BlockEndState.class, blkAST);
		start.endState = end;
		for (Handle alt : alts) {
			// hook alts up to decision block
			epsilon(start, alt.left);
			epsilon(alt.right, end);
			// no back link in ATN so must walk entire alt to see if we can
			// strip out the epsilon to 'end' state
			TailEpsilonRemover opt = new TailEpsilonRemover(atn);
			opt.visit(alt.left);
		}
		Handle h = new Handle(start, end);
//		FASerializer ser = new FASerializer(g, h.left);
//		System.out.println(blkAST.toStringTree()+":\n"+ser);
		blkAST.atnState = start;

		return h;
	}
From {@code A|B|..|Z} alternative block build

<pre>
 o-&gt;o-A-&gt;o-&gt;o (last ATNState is BlockEndState pointed to by all alts)
 |          ^
 |-&gt;o-B-&gt;o--|
 |          |
 ...        |
 |          |
 |-&gt;o-Z-&gt;o--|
</pre>

So start node points at every alternative with epsilon transition and
every alt right side points at a block end ATNState.
<p>
Special case: only one alternative: don't make a block with alt
begin/end.
<p>
Special case: if just a list of tokens/chars/sets, then collapse to a
single edged o-set-&gt;o graph.
<p>
TODO: Set alt number (1..n) in the states?
tool/src/org/antlr/v4/automata/ParserATNFactory.java