@ Gishu
На самом деле, как только я учел экранированные символы, мое регулярное выражение работало немного медленнее, чем мой рекурсивный синтаксический анализатор, написанный сверху вниз, и это без вложенности (связывающей подэлементы с их родителями) и сообщений об ошибках, которые имел рукописный синтаксический анализатор.
Регулярное выражение было немного быстрее для написания (хотя у меня есть некоторый опыт работы с парсерами), но это без хорошего сообщения об ошибках. Как только вы добавите, это становится немного сложнее и дольше.
Я также считаю, что рукописный синтаксический анализатор легче понять намерения. Например, вот фрагмент кода:
private static Node ParseNode(TextReader reader)
{
Node node = new Node();
int indentation = ParseWhitespace(reader);
Expect(reader, '[');
node.Key = ParseTerminatedString(reader, ':');
node.Value = ParseTerminatedString(reader, ']');
}