code: func NewBuilder(inputType InputType, minSuffixCount1, minSuffixCount2 int,
  	doShareSuffix, doShareNonSingletonNodes bool, shareMaxTailLength int,
  	outputs Outputs, doPackFST bool,
  	acceptableOverheadRatio float32, allowArrayArcs bool, bytesPageBits int) *Builder {
  
  	fst := newFST(inputType, outputs, doPackFST, acceptableOverheadRatio, allowArrayArcs, bytesPageBits)
  	f := make([]*UnCompiledNode, 10)
  	ans := &Builder{
  		minSuffixCount1:          minSuffixCount1,
  		minSuffixCount2:          minSuffixCount2,
  		doShareNonSingletonNodes: doShareNonSingletonNodes,
  		shareMaxTailLength:       shareMaxTailLength,
  		doPackFST:                doPackFST,
  		acceptableOverheadRatio:  acceptableOverheadRatio,
  		fst:       fst,
  		NO_OUTPUT: outputs.NoOutput(),
  		frontier:  f,
  		lastInput: util.NewIntsRefBuilder(),
  	}
  	if doShareSuffix {
  		ans.dedupHash = newNodeHash(fst, fst.bytes.reverseReaderAllowSingle(false))
  	}
  	for i, _ := range f {
  		f[i] = NewUnCompiledNode(ans, i)
  	}
  	return ans
  }
docs: /*
  Instantiates an FST/FSA builder with all the possible tuning and
  construction tweaks. Read parameter documentation carefully.
  
  ...
  */