Статический анализатор кода для встроенного языка 1С

07.09.16

Разработка - Инструментарий разработчика

Инструмент статического анализа модулей встроенного языка 1С

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
bslsa.zip
.zip 6,14Mb
34
34
5 SM
Скачать Купить за 3 050 руб.

Назначение инструмента

Программа предназначена для статического анализа модулей встроенного языка 1С (файлов *.bsl).  

Зачем это нужно? Применение статического анализа при разработке позволяет сократить количество ошибок, выявляемых на этапе работы и сократить время, затрачиваемое на отладку за счёт выявления этих ошибок на этапе разработки.

В ходе работы проверяется в первую очередь корректность программы на встроенном языке (несколько строже, чем сам 1С), а так же ищутся ошибки в конструкциях программы, которые являются синтаксически правильными, но при этом содержат смысловые ошибки (см. список проверяемых ошибок ниже).

Возможности

Позволяет выполнить проверку файлов на наличие ошибок в интерактивном или пакетном режиме работы.

В интерактивном режиме предоставляется возможности:

  • загрузки и проверки файла на наличие ошибок с учётом задаваемых констант компиляции
  • отображения списка ошибок и переход из него к месту ошибки в редактируемом файле
  • загрузки файла для редактирования
  • сохранения файла
  • при запуске программы открывается последний редактируемый файл

В пакетном режиме предоставляется возможность проверки одного или нескольких файлов с учётом определённых констант препроцессора и вывод сообщений об ошибках в файл протокола

Запуск в пакетном режиме

bslsa.exe pathToLogFile [ --define=DEFINE [...]] pathToFileToCheck1 [... pathToFileToCheckN]

где:

    pathToLogFile - путь к файлу протокола

    --define=DEFINE - определение требуемого символа препроцессора, например Клиент или Сервер

   pathToFileToCheck1 - путь к файлу или файлам, которые требуется проверить

Пример строки запуска в пакетном режиме

bslsa.exe c:\check.log  --define=Клиент --define=Сервер d:\cfgunload\*.bsl

Планы по развитию

В перспективе планируется:

  • реализовать возможность проверять файлы не как отдельные единицы, но как часть конфигурации
  • реализовать выбор набора правил для анализа
  • расширить набор правил анализа
  • улучшить работу с протоколом ошибок (сортировка, отбор и т.д.)
  • улучшить редактор (раскраска текста и поиск по файлу)

Ошибки и предложения

https://trello.com/b/mwACzUl2/estatico-analisis

Распознаваемые ошибки

  • Две последовательные переменные присваиваются через одно и то же выражение, что может являться логической ошибкой или неоптимизированным кодом.
  • Не все ветви выполнения в функции %1 возвращают какое-либо значение, что похоже на ошибку.
  • В функции ИМЯ отсутствует завершающий оператор ВОЗВРАТ (или ВЫЗВАТЬИСКЛЮЧЕНИЕ) что похоже на ошибку.
  • Результат вызова функции '%1' не используется, что может являться ошибкой.
  • Функция ИМЯ возвращает одно и тоже значение ЗНАЧЕНИЕ во всех точках возврата, что похоже на ошибку.
  • Операторы функции ИМЯ1 полностью совпадают с операторами функции ИМЯ2.
  • Возможно конструкция A[B ОПЕРАТОР C] ошибочна и нужна была A[B] ОПЕРАТОР C.
  • Функция СтрДлина вызывается в цикле для константного выражения, что может сказываться на производительности.
  • В выражении используется неинициализированная локальная переменная %1, что похоже на ошибку.
  • Создаваемая переменная ИМЯ имеет тоже имя что и процедура, что может привести к ошибкам.
  • Переменная ИМЯ присваивается дважды подряд без её использования между присваиваниями, что похоже на ошибку.
  • Переменной ИМЯ присвоено значение, но оно нигде не используется, что похоже на ошибку.
  • Переменная ИМЯ имеет имя одинаковое с глобальной переменной, что может привести к ошибкам.
  • Переменная %1 переопределяет одноимённый параметр.
  • Инструкция ПРОДОЛЖИТЬ является последней в цикле. Она либо является лишней, либо это похоже на ошибку кодирования.
  • Отсутствуют какие-либо операторы внутри блока (ЦИКЛ|ЕСЛИ). Возможно это ошибка кодирования.
  • Переменная ИМЯ используется для счётчика цикла и в этом и внешнем цикле, что похоже на ошибку кодирования.
  • Этот и внешний циклы ДЛЯ КАЖДОГО реализуют обход по одной и той же коллекции %1, что может быть ошибкой.
  • Начальное и конечное значение цикла совпадают, что похоже на ошибку кодирования.
  • Безусловная операция ВОЗВРАТ внутри цикла. Это может указывать на логическую ошибку.
  • Недостижимый код.
  • Оператор ? вне зависимости от условия возвращает одинаковые значения.
  • Присвоение переменной ИМЯ самой себе похоже на ошибку кодирования.
  • Рекурсивная проверка ЕСЛИ (%1) ТОГДА ЕСЛИ (%1) ... похожа на ошибку кодирования, так как условие уже проверено выше.
  • Обнаружены два взаимоисключающих условия (%1) и (%2). Второе условие всегда будет ложным.
  • Последний оператор ВОЗВРАТ в ветке ТОГДА|ИНАЧЕТОГДА|ИНАЧЕ идентичен оператору ВОЗВРАТ следующему после оператора ЕСЛИ. Похоже, что он не нужен или присутствует ошибка.
  • В первом из двух последовательных операторов ЕСЛИ с одинаковыми условиями содержится безусловный оператор ВОЗВРАТ. Второй оператор ЕСЛИ либо не нужен, либо его условие записано с ошибкой.
  • Конструкция ЕСЛИ (%1) ТОГДА ... ИНАЧЕ ЕСЛИ (%1) ... похожа на ошибку кодирования, так как оно никогда не будет выполнено.
  • Операторы в блоке ТОГДА полностью эквивалентны операторам в блоке ИНАЧЕ.
  • Выражение (%1) окружено бесполезными скобками. Может быть они не нужны или присутствует ошибка
  • Одинаковые выражения '%2' слева и справа от оператора '%1'. Возможно это ошибка кодирования.

Встоенный язык статический анализ отлов ошибок разработка

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    139677    767    391    

800

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    11394    30    6    

60

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 руб.

10.11.2023    7163    26    4    

50

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

5400 руб.

17.05.2024    13203    29    27    

73

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 руб.

14.01.2013    181664    1103    0    

876

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 руб.

07.10.2021    15947    3    12    

38

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    101065    242    97    

302

Инструментарий разработчика Перенос данных 1C Программист Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы. Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение для 1С, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    24456    17    15    

34
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ardn 632 30.05.16 16:00 Сейчас в теме
Возможна ли пакетная работа?
8. honomer 56 31.05.16 08:02 Сейчас в теме
(1) ardn, Возможна. Посмотрить окно "О программе", там написано, как это сделать.
2. Evil Beaver 8170 30.05.16 20:06 Сейчас в теме
А без окошка, в командной строке работает?
CodeNull; reotem; nixel; artbear; lustin; +5 Ответить
9. honomer 56 31.05.16 08:27 Сейчас в теме
(2) Evil Beaver, Работает. Можно увидеть синтаксис командной строки вызвав программу с параметром /?
Alien_job; +1 Ответить
3. artbear 1558 30.05.16 20:10 Сейчас в теме
Правильно я понимаю, что пока исследуется только независимый/отдельный модуль, без связей с соседними модулями, например, общие модули ?
4. Evil Beaver 8170 30.05.16 20:23 Сейчас в теме
(3) artbear, судя по диагностике "переменная дублирует глобальную переменную" - нет. Или под глобальной имеется в виду переменная уровня модуля?
10. honomer 56 31.05.16 08:29 Сейчас в теме
(3) artbear, Да, правильно. Пока только один модуль без связи с соседними. И это существенно сказывается на выводе типов.
5. nixel 1421 30.05.16 20:58 Сейчас в теме
Некорректно обрабатывает комментарии внутри многострочной строки вида:

"Многострочная
|строка
// коммент +
|с добавленным текстом, окруженным тегами
// коммент -
|завершение строки";

Ну и конечно же интересует запуск из командной строки. Плюс интересно взглянуть на исходники (желательно открытые) :)

Спасибо за инструмент!
11. honomer 56 31.05.16 08:31 Сейчас в теме
(5) nixel, разбор многострочной строки на выходных попробую исправить.
6. so-quest 140 30.05.16 23:22 Сейчас в теме
winxp - не запустилось.


С чем связан выбор qt?
12. honomer 56 31.05.16 08:33 Сейчас в теме
(6) so-quest, на QT потому, что не охота было сильно заморачиваться с интерфейсом. А что пишет в WinXP - ошибка какая-то есть или совсем не запускается?
7. so-quest 140 30.05.16 23:27 Сейчас в теме
разбор по грамматике или руками? Поддержка препроцессора есть или планируется? Разделение по областям видимости - если сделана - то как? Обработка правил - как реализована (кодом или есть язык преобразований)? Сырцы - принципиально не открываешь или можно ожидать?
13. honomer 56 31.05.16 08:39 Сейчас в теме
(7) so-quest, Препроцессор поддерживается. Про области видимости - не понял о чём речь.
Разбор пока руками, может когда ANTLR v4 поддержит С++ перейдём на него.
Исходники вам в данный момент зачем?
14. Evil Beaver 8170 31.05.16 14:38 Сейчас в теме
(13) нам в данный момент они (исходники) не зачем, но в перспективе мы хотим использовать открытый инструмент (если он будет открытым). Религия у нас такая тут... ))

Кроме того, в открытый инструмент мы запросто сможем вложиться кодом, делая мир лучше.
JohnyDeath; ret-Phoenix; +2 Ответить
15. honomer 56 31.05.16 16:34 Сейчас в теме
(14) Evil Beaver, простите, я религии стараюсь обходить стороной. Пока открывать не готов, потом - подумаем.
16. Evil Beaver 8170 31.05.16 16:38 Сейчас в теме
(15) думайте, конечно. Просто когда надоест пилить в одиночку, вспомните мои слова )))
17. honomer 56 31.05.16 16:42 Сейчас в теме
(16) Evil Beaver, под oneScript eго проще заново написать, чем этот переделывать.
18. so-quest 140 31.05.16 16:57 Сейчас в теме
Да не в коде дело, а в правилах и модели на которой эти правила будете анализировать.
(17) как совет - пока не поздно - уходи с С++ на языки с более простым циклом разработки
21. honomer 56 31.05.16 17:03 Сейчас в теме
(18) so-quest, более простой цикл разработки - это какой-же? :) Шарп, ява? Фреймворки у них мощные, а цикл разработки такой же - кодишь, дебажишь, тестишь.
22. so-quest 140 31.05.16 17:23 Сейчас в теме
(21) лисп/кложура/схема : тест -> репл -> код и функции не будут такие большие
24. lustin 31.05.16 21:18 Сейчас в теме
25. Evil Beaver 8170 31.05.16 21:24 Сейчас в теме
(24) lustin, кстати, да. Golang разработан, как конкурент C/C++, в нем авторы серьезно подумали над устранением атавизмов C++ и заявляют практически о будущем мировом господстве.
23. artbear 1558 31.05.16 18:14 Сейчас в теме
(21)
цикл разработки такой же - кодишь, дебажишь, тестишь.

ОФФ/2 А если юзать ТДД, то скорость будет выше :)
19. Evil Beaver 8170 31.05.16 16:57 Сейчас в теме
(17) я вовсе не в привязке к oscript спрашиваю)))
20. honomer 56 31.05.16 16:59 Сейчас в теме
(19) Evil Beaver, да я, если честно, ни в чём плохом вас и не подозревал. Извините, действительно со стороны некрасиво получилось.
26. premierex 204 01.06.16 10:02 Сейчас в теме
На Инфостарте уже был опубликован проект тестирования конфигураций. Реализован на wsh скриптах (vbs, js). Исходные коды открыты. Тесты легко подключаются буквально на лету, каждый тест снабжен документацией, в проекте принимало участие несколько разработчиков. Кому интересно, можно посмотреть по ссылке.
h00k; artbear; +2 Ответить
27. honomer 56 01.06.16 11:04 Сейчас в теме
(26) premier,
Больше инструментов, хороших и разных.
Сайт программы недоступен.
34. premierex 204 01.06.16 20:13 Сейчас в теме
(27) Сайт программы действительно недоступен, т.к. автор этот проект забросил, но я принимал активное участие в этом проекте (писал часть движка и некоторые тесты) и, думаю, смог бы убедить автора проекта "подарить" его сообществу. К тому же большинство исходных кодов сохранились, их можно на этом сайте скачать или у меня попросить (не уверен, правда, что самой последней версии) .
(28) Уважаемый, Вы ошибаетесь. Эти проекты из одной и той же области - а именно: тестирование кода модулей на соответствие некоторым стандартам (кто уж какой придумает). Отличие от предлагаемого ПО в данной публикации (+ кстати забыл поставить, исправлюсь) - это открытость кодов и масштабируемость, т.е. возможность написать тест под какие-то свои стандарты оформления кода. Ну и возможность работы над проектом в команде.
28. brr 184 01.06.16 11:07 Сейчас в теме
(26) premier, это разные вещи
Evil Beaver; +1 Ответить
29. pro1c@inbox.ru 187 01.06.16 13:06 Сейчас в теме
Без раскраски кода не годится!
Для такого инструмента, как статический анализатор кода, она обязательна должна быть!
30. so-quest 140 01.06.16 13:14 Сейчас в теме
(29) - а подробнее? чем эта раскраска поможет?
32. pro1c@inbox.ru 187 01.06.16 13:26 Сейчас в теме
(30) so-quest,

Если я делаю, статический анализ кода, мне мало сообщений о потенциальных или существующих ошибках, а хотелось бы без труда охватить взглядом код!
Ведь где то я могу согласится с анализатором, а где то нет, раскраска просто помогает мне визуально пробегать по коду взглядом, без лишнего труда выделять ключевые слова и т.д.
Плюс, я могу просто начать писать какую-нибудь процедуру для своих тестов на анализ сразу в окне, хотелось бы иметь удобный редактор!
33. so-quest 140 01.06.16 13:35 Сейчас в теме
(32) Подобные инструменты просто делают вывод (файл или консоль) а уж раскраской занимаются совсем другие программы. Основная задача анализатора - сообщить о проблеме (сообщение может быть и ложным, но если анализатор его нашел, значит текст попадает под правило анализа) Что делать с этой информаций дальше - анализатору пофиг. ведь вывод прогаммы можно и в dev/null отправить
31. honomer 56 01.06.16 13:22 Сейчас в теме
(29) pro1c@inbox.ru, вот тоже хотелось бы узнать - чем поможет раскраска, если основной режим работы для не встроенного в Конфигуратор инструмента, вообще говоря, из командной строки.
35. premierex 204 01.06.16 20:20 Сейчас в теме
Вот архив, который у меня сохранился, посмотрите, протестируйте...
Прикрепленные файлы:
TestIB8x.rar
vursan; cleaner_it; +2 Ответить
36. so-quest 140 02.06.16 11:08 Сейчас в теме
Как минимум неплохо бы документацию.
Как максимум - подробную документацию.

37. honomer 56 02.06.16 12:04 Сейчас в теме
(36) so-quest, как-то пока руки не дошли
38. premierex 204 03.06.16 09:09 Сейчас в теме
(0) Автор, утверждение Конструкция ЕСЛИ (%1) ТОГДА ... ИНАЧЕ ЕСЛИ (%1) ... похожа на ошибку кодирования, так как оно никогда не будет выполнено. не совсем верно, так как ЕСЛИ (%1) = Истина то код, следующий за оператором ТОГДА будет выполняться всегда, а вот код, следующий за конструкцией ИНАЧЕ ЕСЛИ (%1) ТОГДА действительно никогда выполняться не будет.
39. honomer 56 03.06.16 19:47 Сейчас в теме
(38) premier, спасибо. Переформулирую в следующей версии
40. honomer 56 05.06.16 12:34 Сейчас в теме
Коллеги, вопрос: кроме понятного желания "больше правил" и хотелки "подкрашивающий редактор" есть ещё какие-то пожелания по функционалу, которые вы считаете важными, но они отсутствуют? Настройка списка правил для проверки и т.д.?
41. so-quest 140 05.06.16 13:47 Сейчас в теме
1. Отдельно правила для лексера, парсера, преобразователя.
2. Свое описание правил и соответственно интерпретатор этих правил.
3. Возможность выключать проверку правила в коде
4. Связь метаданных и кода
5. Расчет метрик для кода
42. so-quest 140 05.06.16 13:51 Сейчас в теме
6. Вывод лексем и ast в отдельный файл (даст возможность самому писать правила)
43. so-quest 140 05.06.16 13:51 Сейчас в теме
7. Документировать все это
44. so-quest 140 05.06.16 13:54 Сейчас в теме
8. Уйти от ручного разбора на генератор парсеров
47. honomer 56 06.06.16 14:29 Сейчас в теме
(44) so-quest, про разбор я уже писал - antlr4 пока не поддерживает С++
Писать самостоятельно пользовательские правила и их интерпретацию - я пока не вижу перспективы и ресурсов для этого, что самое главное. так же как и вывод дерева в файл, Это-то вообще зачем? Чтобы использовать в сторонних инструментах? И в каком формате?
Пока хочется документировать нормально, сделать настройку списка проверяемых правил, исправить ошибки, внести новые :) правила.
Можно и расчет метрик кода.

Остальное, как мне кажется, сейчас не так важно.
48. so-quest 140 06.06.16 15:25 Сейчас в теме
(47) Я бы тебе рекомендовал определиться - ты будешь за деньги это продавать или бесплатно раздавать. Если за деньги - тогда твои аргументы понятны и смысла что либо дальше говорить - мало. Если же оплата не планируется - тогда я не понимаю в чем проблема вывести дерево в файл (формат - любой какой нравится - от xml до чистого текста, главное его хоть как-то описать)
Про генератор - кроме антлр есть море генераторов. Выгода от них - в более быстрой разработке - не надо думать про состояния и переходы. За тебя все сделают. Да и когда захочешь с С++ уйти - не придется много переписывать.
Про правила - ты уверен что будешь успевать реагировать на все просьбы - добавь то или это? проще дать язык описания правил и на нем уже пусть пишут все что хотят. Внутри все равно примитивная перезапись термов и паттернматчинг .
49. honomer 56 06.06.16 17:16 Сейчас в теме
(48) so-quest, Сделать вывод дерева - проблем нет. Как я уже выше спросил - какой в этом смысл? Кому это нужно и для чего? От этого зависит что и как выводить.
Нужно ли, в конце концов, вообще тратить на это время?
Про генераторы я в курсе. Flex, bison, flex++, bison++, spirit... и иже с ними. А так же про проблемы левой рекурсии и адские сообщения компилятора у некоторых.

Что же про разработку основанную на правилах - считаю, что это ни разу не тривиальная задача по масштабам сравнивая и даже наверное больше с самим анализатором. Время затраченное на её разработку можно потратить довольно много и без особого успеха. Ведь это по сути - интерпретатор ещё одного языка, который будет описывать эти правила.

Можете привести пример хотя бы одного анализатора, который использует такой подход? Я поглядел в википедии, но что-то ничего там такого не нашёл, хотя, нужно признаться, искал тоже не очень сильно.
45. Zlohobbit 261 06.06.16 11:34 Сейчас в теме
Отличная доработка! Если возможно добавьте в следующих версиях поиск по анализируемому тексту! Нужно для анализа таких ошибок например как:"..похожа на ошибку кодирования, так как условие уже проверено выше.". И конечно же мечта это анализ cf -ников или для начала *.epf и *.erf))).
А так суперская Приблуда! Спасибо!
46. honomer 56 06.06.16 14:24 Сейчас в теме
(45) Zlohobbit, я подумывал сделать сортировку списка ошибок и его фильтрацию по типам и процедурам. Поиск, по-моему, тут не очень пригодится.
Для анализа cf, epf, erf - их нужно распаковывать, а это уже другой компот: уже существуют такие инструменты, зачем писать ещё один.
54. honomer 56 08.06.16 15:29 Сейчас в теме
(45) Zlohobbit, при клике на сообщении курсор переходит на строку, где диагностировали ошибку. Этого не достаточно?
50. so-quest 140 07.06.16 09:59 Сейчас в теме
> Сделать вывод дерева - проблем нет. Как я уже выше спросил - какой в этом смысл? Кому это нужно и для чего?

Сделай. Мне нужен этот вывод. Для собственных правил. Это же очевидно.

> А так же про проблемы левой рекурсии ...

Ты грамматику С/С++ разбираешь? Это примитивный 1С. Тупо бейсик, без всяких извращений. Тебе грамматика наоборот поможет и спасет от проблем связанных с неоднозначностью разбора выражений


> Что же про разработку основанную на правилах - считаю, что это ни разу не тривиальная задача

Кто сказал что будет просто? Хотя там сложного ничего и нет . Вот пример простого правила для подобной твоей системы-
(defrule :where 'lexer
  :name 'check-id-length
  :token ':identifier
  :description "Длинна переменной меньше 2 символов"
  :check #'(lambda (text type start end file index data)
         (> 2 (length text ))))

Где сложность в реализации? Аналогично и для обхода AST строиться набор правил.

Про построение статанализаторов кода - https://lvee.org/en/reports/LVEE_2012_01 и дальше по ссылкам.

И просьба - сделай что бы под WinXP работала твоя разработка.
52. honomer 56 08.06.16 14:18 Сейчас в теме
(50) so-quest,
про вывод дерева понял. запишу себе в план.

про то, где сложность реализации. Вот есть правило:
(defrule :where 'lexer
:name 'check-id-length
:token ':identifier
:description "Длинна переменной меньше 2 символов"
:check #'(lambda (text type start end file index data)
(> 2 (length text ))))

сложность хотя бы в том, что в С++ нет возможности взять лямбду в виде куска кода из файлы и выполнить. Т.е. Нужно будет написать ещё один интерпретатор. или встроить какой-то, типа lua.

про построение анализаторов - интересно, но примеров анализатора, основанного на правилах (о чём я собственно и задавал вопрос), которые мог бы задавать непосредственно пользователь я там что-то не обнаружил. Плохо искал?
51. eugeniezheludkov 45 08.06.16 03:56 Сейчас в теме
Начинал как то делать что-то подобное на регулярках в шарпе, просто была идея немного упростить труд КодРевьюверов ) и заодно "прошерстить" код от франчайзи. никакого статанализа не делал, только регулярка )

https://github.com/znsoft/1SCodeAnalyze

за код стыдно если честно. Последняя версия в ветви VS08.

работает так: распаковываете все модули конфигурации в каталог,
и в этом каталоге запускаете прогу .. а она в консоль выдает все найденные ошибки (имя объекта.имя модуля. имя метода. номер строки. кусок кода)
hotey; tkalin.vladimir; Sardukar; +3 Ответить
53. so-quest 140 08.06.16 15:14 Сейчас в теме
-> про вывод дерева понял. запишу себе в план.
Ну хоть что-то :) Когда ждать? Где будут обновления?

-> сложность хотя бы в том, что в С++ нет возможности взять лямбду в виде куска кода из файлы и выполнить.

Нет никакой сложности. ecl именно для этого и придуман. Хотя проще сразу перейти на интерпретируемый язык. Выгоды получишь больше. Правда, если планируешь потом продавать свой продукт - будет сложнее защитить.

-> Плохо искал?

Нет, видимо искал хорошо. Но пропустил слова ASTLOG, datalog. Понимаешь в чем дело - нет стандартизированных методик статанализа кода, но все исследования которые проводятся в этом направлении - завершаются словами "Создана база правил для анализа языка " и правила эти до боли похожи на прологовские.
56. honomer 56 08.06.16 15:37 Сейчас в теме
(53) so-quest, ecl - это Embedable Common Lisp? Если да, ну и зачем оно мне - в QT уже есть встроенная поддержка QtScript.

55. naf2000 08.06.16 15:32 Сейчас в теме
а зачем анализировать недоязык?
57. honomer 56 08.06.16 15:39 Сейчас в теме
(55) naf2000, Если вы серьёзно не понимаете зачем это, то дискуссия видится бессмысленной.
58. so-quest 140 08.06.16 15:45 Сейчас в теме
(55) Тролишь? Или можешь привести доказательство того что 1С недоязык?
(56) тогда непонятно что вsзвало проблему - " С++ нет возможности взять лямбду в виде куска кода из файлы и выполнить. Т.е. Нужно будет написать ещё один интерпретатор. или встроить какой-то, типа lua. " - если есть qtscript.
59. honomer 56 08.06.16 15:56 Сейчас в теме
(58) so-quest, правила в приведённом виде - это не язык. и нужно будет делать их анализ и интерпретацию.
В общем, я запишу и подумаю.
60. 987ww765 307 13.07.17 12:03 Сейчас в теме
61. artbear 1558 13.07.17 12:26 Сейчас в теме
Посмотрите наш проект https://silverbulleters.org/sonarqube/

Тот самый крутой статический анализатор на базе AST-деревьев, кеша метаданных и т.п.
Можно свои правила добавлять.

Уже в куче разных компаний юзается, есть и облачные решения для клиентов

По ссылке намного подробнее написано
gubanoff; +1 Ответить
62. guy_septimiy 16.11.17 15:03 Сейчас в теме
Годная штука. Находит досадные недочеты
63. gubanoff 63 04.12.19 14:39 Сейчас в теме
(0) (61) да, лучший вариант эти правила добавить в сонар. Можно в свободный плагин, который развивает сообщество https://github.com/1c-syntax/bsl-language-server
64. prohorp 33 30.06.23 05:07 Сейчас в теме
Сделал проект для групповой разработки статического анализатора, написанный на чистом Си Статический анализатор кода 1С на Си
65. so-quest 140 30.06.23 08:45 Сейчас в теме
офф. Как давно это все было :)
Оставьте свое сообщение