code: func (p *parser) parseBlock() *ast.BlockStatement {
  	// openBlock
  	result, blockParams := p.parseOpenBlock()
  
  	// program
  	program := p.parseProgram()
  	program.BlockParams = blockParams
  	result.Program = program
  
  	// inverseChain?
  	if p.isInverseChain() {
  		result.Inverse = p.parseInverseChain()
  	}
  
  	// closeBlock
  	p.parseCloseBlock(result)
  
  	setBlockInverseStrip(result)
  
  	return result
  }
docs: // block : openBlock program inverseChain? closeBlock