В 1С есть стандартный сериализатор, который преобразует любой объект в поток символов след. формата:
Весь поток - это список элементов через запятую в фигурных скобках.
например:
{1, 2.2, "Один"}
Элементы могут быть трех типов:
1. Число - как первые два элемента в примере
2. Строка - в кавычках как третий элемент в примере (строка может содержать апострофы и удвоенные кавычки "")
3. UID (например 51e7a0d2-530b-11d4-b98a-008048da3034)
Списки могут быть вложенными.
Например:
{1, 2, {1, 2}, "ООО ""Восход"""}
Примеры сериализации:
Массив = Новый Массив;
Массив.Добавить(1);
Массив.Добавить(2);
Массив.Добавить(3);
Массив.Добавить(4);
сериализуется в:
{"#",51e7a0d2-530b-11d4-b98a-008048da3034,
{4,
{"N",1},
{"N",2},
{"N",3},
{"N",4}
}
}
Структура = Новый Структура("Один, Два, Три, Четыре", 1, 2, 3, 4)
сериализуется в:
{"#",4238019d-7e49-4fc9-91db-b6b951d5cf8e,
{4,
{
{"S","Один"},
{"N",1}
},
{
{"S","Два"},
{"N",2}
},
{
{"S","Три"},
{"N",3}
},
{
{"S","Четыре"},
{"N",4}
}
}
}
Байткод из компилированной обработки с предыдущими примерами:
{1,
{"Cmd",40,0,
{1,1},
{2,0},
{18,0},
{51,0},
{16,0},
{1,3},
{2,0},
{4,2},
{18,1},
{20,1},
{1,3},
{1,4},
{2,0},
{4,3},
{18,1},
{20,1},
{1,4},
{1,5},
{2,0},
{4,4},
{18,1},
{20,1},
{1,5},
{1,6},
{2,0},
{4,5},
{18,1},
{20,1},
{1,6},
{1,8},
{2,1},
{4,6},
{4,2},
{4,3},
{4,4},
{4,5},
{18,5},
{51,7},
{16,0},
{22,0}
},
{"Const",8,
{"S","Массив"},
{"S","Добавить"},
{"N",1},
{"N",2},
{"N",3},
{"N",4},
{"S","Один, Два, Три, Четыре"},
{"S","Структура"}
},
{"Var",2,
{"Массив",0,-1},
{"Структура",0,-1}
}
}
Нужно написать парсер, который поднимет это в дерево. Каждый узел дерева должен знать своего родителя и список детей.
Ради эффективности желательно делать без рекурсии (так интереснее

Хотелось бы дейкстру тут увидеть
