A block diagram consists of blocks and arrows. Blocks can contain other blocks - these has to be specified immediately after the containing blocks enclosed in braces. Blocks that contain other blocks are called container blocks or containers. Putting one block into another has two consequences. First, the container is resized to be able to cover all its content. If you want to place a block outside or overlapping with the contour of a container, add it outside. Second, the name of the container will become the name prefix of all its content blocks, see Block Name Resolution. The most common block is a rectangle (or box for short), but other shapes can be used (and defined), as well.
Arrows can be specified anywhere in the chart and their location has
significance only in when they are drawn (in Z order) or if they contain
coordinates referring to their parent. In the latter case the identity of
the parent matters. Note also that blocks not defined at the time of defining
an arrow may get auto-created if pedantic=no;
chart option is
specified (the default). So defining an arrow before or after the blocks it
uses is different.