https://github.com/Infactum/addin-template
https://github.com/lintest/AddinTemplate
https://github.com/1c-syntax/bsl-parser
java -jar antlr-4.9.12-complete.jar -Dlanguage=Cpp BSLLexer.g4
УстановитьВнешнююКомпоненту("ОбщийМакет.Parser"); // только для клиента
ПодключитьВнешнююКомпоненту("ОбщийМакет.Parser", "Parser");
Анализатор = Новый("AddIn.Parser.BSL");
Дерево = Новый ДеревоЗначений;
Дерево.Колонки.Добавить("Тип", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(50, ДопустимаяДлина.Переменная)));
Дерево.Колонки.Добавить("Текст", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная)));
ТипЧисло = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(32, 0, ДопустимыйЗнак.Неотрицательный));
Дерево.Колонки.Добавить("НомерСтроки", ТипЧисло);
Дерево.Колонки.Добавить("НомерСимвола", ТипЧисло);
КоличествоСинтаксическихОшибок = Анализатор.Выполнить(Текст);
Если КоличествоОшибок Тогда
ВызватьИсключение "ERROR_SYNTAX";
КонецЕсли;
СформироватьДерево(Анализатор, Дерево);
Процедура СформироватьДерево(Анализатор, Строка)
Строки = Строка.Строки;
Пока Анализатор.Следующий() Цикл
НоваяСтрока = Строки.Добавить();
НоваяСтрока.Тип = Анализатор.Тип;
НоваяСтрока.Текст = Анализатор.Текст;
НоваяСтрока.НомерСтроки = Анализатор.НомерСтроки;
НоваяСтрока.НомерСимвола = Анализатор.НомерСимвола;
Если Анализатор.ЭтоЛексема Тогда
Продолжить;
ИначеЕсли Анализатор.ПолучитьЭлементы() Тогда
СформироватьДерево(Анализатор, НоваяСтрока);
Иначе
ВызватьИсключение Неопределено;
КонецЕсли;
КонецЦикла;
КонецПроцедуры