Перейти к содержанию

Синтаксический разбор вызовов LISP модулей (PowerShell)


A.Kudrjashov

282 просмотра

<Каталог>

<nanoCAD. Программирование и автоматизация>

 

Подготовил на Powershell скрипт синтаксического разбора LISP модулей с последующей генерацией диаграммы связности функций при помощи GraphViz.

 

Актуальная версия скрипта будет пока лежат здесь.
Сейчас скрипт в первом приближении.

 

Я запускаю скрипт из под ISE, но, в принципе, работает и из командной строки.

 

Скрипт опробован на трех модулях:

bgtools_3.11a_Nc_21.lsp,
pltools_NC.lsp,

StripMtext_v5-0c1_NC.lsp

 

При запуске скрипта предлагается выбрать LISP файл для анализа и отметить списки, которые необходимо по окончании работы экспортировать в Excel.
Результатом работы является текстовый файл в каталоге \dot.

 

Для обработки текстового файла необходим комплект утилит GraphViz. Я экспериментировал с утилитами Dot, Circo и Twopi.

В каталоге \dot лежат командные файлы заточенные под мои каталоги. Их необходимо отредактировать.

 

Кроме этого, можно экспериментировать с:
опциями заполнения окончательного изображения диаграмм (строка опции в текстовом DOT файле)
ratio=fill|expand
с размером генерируемых изображений в дюймах (строка опции в текстовом DOT файле)
size=24|36|48
c опцией разрешения изображения для растров (опция в командном файле)
-Gdpi=0|100|200|300

... с другими параметрами

 

Важно!
При обработке утилитами GraphViz почему то в режиме имен файлов по умолчанию "-O" нормально воспринимаются любые имена файлов, а при указании конкретных имен  "-o" только имена файлов без пробелов.

 

В результате получаем схему взаимосвязей вызовов функций вида:

bgtools_3.11a_Nc_21.lsp

Спойлер

bgtools_3.11a_Nc_21-2_circo.thumb.jpg.ee8d024afa7c3ec570bc7311fcb06c2a.jpg

 

 

pltools_NC.lsp

Спойлер

pltools_NC_dot.thumb.jpg.8de235f6c69e1ec4c73ce1cfd539580e.jpg

 

 

StripMtext_v5-0c1_NC.lsp

Спойлер

StripMtext_v5-0c1_NC_twopi.thumb.jpg.a1fcee54b1387b40d7fe26c39b29020f.jpg

 

 

 

 

 

Изменено пользователем A.Kudrjashov
Добавление информации

2 Комментария


Рекомендуемые комментарии

Приведенные средства позволяют очень глубоко погрузиться в структуру программы.

Можно даже наметить узкие места.

 

Кстати, последняя схема показательна в части предыдущего обсуждения

Спойлер

image.png.ab4bac032132e15fcdd8f8085be6ca3d.png

 

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

Спойлер

    (defun RE:Replace (newstr pat string / res result x)
      (setq result string res (RE:Execute pat string))
      (foreach x res 
        (setq result (vl-string-subst newstr (car x) result (cadr x))))
     (setq string result)
    )                  
 

Эта функция одинаково корректно работает и в АС, и в NC

Ссылка на комментарий
27 минут назад, EdwardSt сказал:

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


Вместе победим.
Буду писать об обновлениях [скрипта анализа] по мере добавления. Здесь ещё есть куда двигаться.

добавлено через 0 минут

... добавлены серые связи вложенности функций.
Версия файла пока та же самая 1.1.02 29-10-2021

Ссылка на комментарий
Гость
Добавить комментарий...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...