The two interfaces TreeNormalizer and NodeNormalizer can be implemented to introduce custom normalization steps. CompoundNormalizer and NormalizerPass use to composite pattern to assemble normalization steps freely. All other classes are concrete normalization steps.