Jump to content

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


A.Kudrjashov

2,506 views

 Share

<Каталог>

<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

 

 

 

 

 

Edited by A.Kudrjashov
Добавление информации

 Share

2 Comments


Recommended Comments

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

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

 

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

Спойлер

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

  • Like 2
Link to comment
27 минут назад, EdwardSt сказал:

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


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

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

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

Link to comment
Guest
Add a comment...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...