code: func (p *parser) parseInverseChain() *ast.Program {
  	if p.isInverse() {
  		// inverseAndProgram
  		return p.parseInverseAndProgram()
  	}
  
  	result := ast.NewProgram(p.next().Pos, p.next().Line)
  
  	// openInverseChain
  	block, blockParams := p.parseOpenBlock()
  
  	// program
  	program := p.parseProgram()
  
  	program.BlockParams = blockParams
  	block.Program = program
  
  	// inverseChain?
  	if p.isInverseChain() {
  		block.Inverse = p.parseInverseChain()
  	}
  
  	setBlockInverseStrip(block)
  
  	result.Chained = true
  	result.AddStatement(block)
  
  	return result
  }
docs: // inverseChain : openInverseChain program inverseChain?
  //              | inverseAndProgram