Есть следующие наработки.
1.Описание грамматики 1С (несколько устаревшее) в нотации Бэкуса-Науэра.
Примерно так (детали опущены):
if = 'if' | 'если'
then = 'then' | 'тогда'
else = 'else' | иначе
endif = 'endif' | 'конецесли'
<IfStmt> ::= if <Expr> then <Statements> <ElseStmtList> endIf
<ElseStmtList> ::= elsIf <Expr> then <Statements> <ElseStmtList> | else <Statements> |
2. Это описание грамматики компилируется программой gold parser www(dot)goldparser(dot)org, результат компиляции загружается в обработку. Эта обработка выполняет следующее:
2.1. Лексер разбивает входной поток на лексемы. То есть выражения Если Н > 0 Тогда Ф1(); Иначе Н = 0; Конецесли; прервратится в набор именованных токенов if = "Если", Exr = "Н > 0", then = "Тогда", expr = "Ф1()", "Иначе", "Н = 0", "Конецесли". Незначащие символы будут отброшены.
2.2. Парсер преобразует входной поток в дерево примерно такого вида
IfStmt
+-----if 'если'
+-----Expr 'Ф1()'
+-----<ElseStmtList>
| +-----else 'иначе'
| +-----Expr 'Н > 0'
+-----endif 'КонецЕсли"
Соответственно, надо "с нуля" дописать лишь один компонент: трансляцию дерева операторов в .DRT
Бегло глянул описание формата, на него ложится всё кроме асинхронности.
Простой пример асинхронной записи в 1С. По нажатию кнопки "сохранить что-то в файл" вызывается примерно такой код.
ДиалогФ = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
ДиалогФ.МножественныйВыбор = ложь;
ДиалогФ.ПолноеИмяФайла = Элемент.ИмяXMLФайла;
ДиалогФ.Заголовок = "Выберите файл XML для записи";
ДиалогФ.Фильтр = "XML файл (*.xml)|*.xml";
Оповещение = Новый ОписаниеОповещения("ФайлПриемникНачалоВыбораЗавершение", ЭтотОбъект, Новый Структура("ДиалогФ", ДиалогФ));
ДиалогФ.Показать(Оповещение);
По завершению диалога вызывается процедура ФайлПриемникНачалоВыбораЗавершение(...).
Фокус в том что я могу написать так
текОповещение = КакойТоОбщийМодуль.ПолучитьОповещениеПоРасширению(ДиалогФ.Фильтр);
ДиалогФ.Показать(Оповещение);
И в общем случае непонятно какой параллельный процесс запускается. Всё остальное не вызывает особых затруднений.
Стоимость проекта зависит от следующих факторов:
1. Уровнем детализации грамматики 1С
2. Управление выводом на схемы (разбиваем по листам, динамически управляем размером элементов итд).
3. Детализацией постановки ТЗ и разработкой тестов.
Минимальную стоимость в которую входит:
1. Анализируются только "виртуальные скобки": процедура/конецпроцедуры, функция/конецфункции, цикл/конеццикла, если/конецесли
2. Вывод "тупой": один модуль в один лист, параметры блоков задаются вручную.
3. ТЗ и тесты предоставляет Заказчик.
я бы оценил в 60 тысяч рублей и 3 недели работы (включая согласование ТЗ). Эта стоимость разработки для внутреннего употребления. Для тиражируемого решения стоимость будет выше.