private static MixedDataRecord ParseMixedRecords(string[] tokens, int startIndex, int endIndex)
        {
            var record = new MixedDataRecord();

            for (var i = startIndex + 1; i < endIndex; i++)
            {
                int end;
                if (tokens[i] == "(")
                {
                    end = IndexHelper.GetEndIndex(tokens, i, BracketType.RoundBracket);
                    record.Records.Add(ParseMixedRecords(tokens, i, end));
                }
                else if (tokens[i] == "[")
                {
                    end = IndexHelper.GetEndIndex(tokens, i, BracketType.SquareBracket);
                    record.Records.Add(ParseMultipleRecords(tokens, i, end));
                }
                else
                {
                    record.Records.Add(ParseSingleDataRecord(tokens, i));
                    end = i;
                }
                i = end;
            }
            return(record);
        }
        private static MultipleRecords ParseMultipleRecords(string[] tokens, int startIndex, int endIndex)
        {
            var record = new MultipleRecords();

            for (var i = startIndex + 1; i < endIndex; i++)
            {
                var indexes = IndexHelper.GetIndexes(tokens, i);
                var result  = ParseTokens(tokens, i);
                record.Records.Add(result.Name, result);
                i = indexes.endIndex;
            }
            return(record);
        }
        internal static Record ParseTokens(string[] tokens, int startIndex)
        {
            var indexes = IndexHelper.GetIndexes(tokens, startIndex);
            var record  = new Record();

            record.Name = tokens[indexes.nameIndex];
            if (indexes.recordDataType == RecordDataType.SingleDataRecord)
            {
                record.Data = ParseSingleDataRecord(tokens, indexes.startIndex);
            }
            else if (indexes.recordDataType == RecordDataType.MultipleRecords)
            {
                record.Data = ParseMultipleRecords(tokens, indexes.startIndex, indexes.endIndex);
            }
            else if (indexes.recordDataType == RecordDataType.MixedDataRecord)
            {
                record.Data = ParseMixedRecords(tokens, indexes.startIndex, indexes.endIndex);
            }
            return(record);
        }