public static IModelParser HierarchyParser(int level)
        {
            if (LevelDictionary.ContainsKey(level))
            {
                HierarchyParser hierarchyParser;
                if (!ParserDictionary.TryGetValue(level, out hierarchyParser))
                {
                    hierarchyParser = new HierarchyParser(
                        new LineParser(level),
                        new[]
                    {
                        PropertyParser.HierarchyParser(level + 1),
                        DataTypeParser.HierarchyParser(level + 1),
                        RedefinesParser.HierarchyParser(level + 1),
                        OccursParser.HierarchyParser(level + 1),
                        EnumValueParser.HierarchyParser(level + 1)
                    });

                    ParserDictionary.Add(level, hierarchyParser);
                }
                return(hierarchyParser);
            }

            return(new EmptyParser());
        }
 public LineParser(int level)
     : base("Redefines",
            Line.Multiple(
                Line.And(
                    Line.StartsWithMarker(Prefix.Marker(level)),
                    Line.Contains("REDEFINES")
                    ),
                Line.Optional(
                    Line.Repeat(Line.StartsWith(Prefix.Empty))
                    )
                ),
            Data.OnLine(0,
                        Data
                        .TruncateAtColumn(59)
                        .IgnoreBefore(Prefix.Marker(level)).ExcludeMarker()
                        .IgnoreAfter(".").ExcludeMarker()
                        .RemoveSpaces()
                        .Trim())
            .TruncateAt(59)
            .IgnoreAfter(".").ExcludeMarker()
            .RemoveSpaces()
            .Trim(),
            Comment
            .IgnoreBefore(59)
            .RemoveSpaces()
            .Trim(),
            new[]
 {
     OccursAndDataImpliedParser(),
     DataTypeParser.ImpliedParser(RedefinesModel.Factory),
     OccursParser.ImpliedParser(RedefinesModel.Factory),
 },
            RedefinesModel.Factory
            )
 {
 }