Переменные и методы класса выдают ошибку компиляции

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Re: Переменные и методы класса выдают ошибку компиляции

Сообщение zub » 09.09.2016 19:57:06

Предлагаю написать программу сканирующую исходники и строящую граф зависимостей модулей (может чего еще)
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Переменные и методы класса выдают ошибку компиляции

Сообщение Лекс Айрин » 09.09.2016 20:06:42

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

Тем более, что если я все же дорасту до собственного компилятора, то это придется делать.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Переменные и методы класса выдают ошибку компиляции

Сообщение zub » 09.09.2016 20:22:35

>>отсутствовать напрочь((
а нинадо ничего отображать, надо сгенерить xmlку которую поймет yEd и отобразит граф.
от себя - могу попробовать попарсить исходники - собрать инфу для xmlки
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Переменные и методы класса выдают ошибку компиляции

Сообщение Лекс Айрин » 09.09.2016 20:47:20

zub, то есть, предлагаешь сверстать xml из имеющихся данных? В принципе, задача (с виду) не особо сложная, если есть формат xml файла. можно будет и попробовать. Как я понимаю, результатом должен быть модуль или несколько... но нужен будет формат вывода парсера... иначе, придется как минимум переделывать.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Переменные и методы класса выдают ошибку компиляции

Сообщение zub » 09.09.2016 20:57:22

>>но нужен будет формат вывода парсера...
Да в каком надо формате, в таком и будет. из этого надо будет организовать чтото такое http://yed.yworks.com/support/manual/fileformat.html а красивости добавлять уже в самом yed`e

Добавлено спустя 6 минут 45 секунд:
В принципе есть AGraph (либа для работы с графами на паскале) он умеет писать графы в gml, а yed его читает. Но AGraph хоть и штука серъезная, но старенькая и собирать его у меня получалось только под win32
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Переменные и методы класса выдают ошибку компиляции

Сообщение Лекс Айрин » 09.09.2016 21:16:09

zub, там только краткие описания, но нет самого формата. Конечно, можно будет распотрошить какой-нибудь файл... но нюансы могут пропасть.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Переменные и методы класса выдают ошибку компиляции

Сообщение zub » 09.09.2016 21:32:54

Понятно что нюансов в любом деле тонна. Но волков боятся... темболее что в xmlке нужно только отразить узлы и связи графа, не заботясь о красивой расстановке узлов и протаскивании связей с минимальным колвом пересечений - это автоматически сделает yed
Попробую поэкспериментировать с AGraph и fcl-passrc для начала - может никакие xmlки и не понадобятся
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Переменные и методы класса выдают ошибку компиляции

Сообщение Лекс Айрин » 09.09.2016 21:38:10

zub, да я ж не спорю... поставлю прогу, посмотрю что там за "GraphML Format '.graphml' ". Главное понять принцип... а собрать выхлоп не самое сложное.

ЗЫ: глядишь, вдвоем что-то и сделаем)))
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Переменные и методы класса выдают ошибку компиляции

Сообщение zub » 09.09.2016 21:57:33

С графом всё нетак плохо. прилагаю то что выдпл AGraph, и кликабельную гифку того что вышло в еде.
Изображение
файлик t1.gml
Код: Выделить всё
graph [
  Creator "AGraph Library 990824 (C) A.Chernobaev"
  directed 1
  AGraph [
    tree 1
    Root 1
    weighted 1
    vertex_attrs [
      bool "t"
    ]
  ]
  edge [
    source 1
    target 9
    AGraph [
      weight 16.0
    ]
  ]
  node [
    id 2
    AGraph [
      Parent 1
      global [
        bool [
          name "t"
          value 0
        ]
      ]
    ]
    graphics [
      x -0.0252059353515506
      y -0.42943066987209
      z 0.34085443476215
    ]
  ]
  edge [
    source 7
    target 8
    AGraph [
      weight 31.0
    ]
  ]
  node [
    id 1
    AGraph [
      global [
        bool [
          name "t"
          value 0
        ]
      ]
    ]
    graphics [
      x -0.127761641284451
      y -0.0743262325413525
      z -0.417987840482965
    ]
  ]
  node [
    id 5
    AGraph [
      Parent 3
      global [
        bool [
          name "t"
          value 0
        ]
      ]
    ]
    graphics [
      x 0.197674974100664
      y 0.344170969445258
      z 0.217982857255265
    ]
  ]
  node [
    id 3
    AGraph [
      Parent 2
      global [
        bool [
          name "t"
          value 0
        ]
      ]
    ]
    graphics [
      x -0.440275765256956
      y -0.206703428179026
      z 0.417284708702937
    ]
  ]
  node [
    id 7
    AGraph [
      Parent 2
      global [
        bool [
          name "t"
          value 0
        ]
      ]
    ]
    graphics [
      x -0.0339795409236103
      y -0.25334635283798
      z 0.325676416279748
    ]
  ]
  node [
    id 4
    AGraph [
      Parent 3
      global [
        bool [
          name "t"
          value 1
        ]
      ]
    ]
    graphics [
      x -0.132093521300703
      y 0.274664897238836
      z -0.172074464149773
    ]
  ]
  node [
    id 6
    AGraph [
      Parent 2
      global [
        bool [
          name "t"
          value 0
        ]
      ]
    ]
    graphics [
      x -0.193358695134521
      y -0.337374148657545
      z -0.170503546018153
    ]
  ]
  node [
    id 8
    AGraph [
      Parent 7
      global [
        bool [
          name "t"
          value 0
        ]
      ]
    ]
    graphics [
      x -0.220970516558737
      y -0.0182336822617799
      z -0.350815065205097
    ]
  ]
  node [
    id 9
    AGraph [
      Parent 1
      global [
        bool [
          name "t"
          value 0
        ]
      ]
    ]
    graphics [
      x 0.374335013562813
      y -0.212705797050148
      z 0.27275326824747
    ]
  ]
  edge [
    source 1
    target 2
    AGraph [
      weight 0.0
    ]
  ]
  edge [
    source 2
    target 3
    AGraph [
      weight 3.0
    ]
  ]
  edge [
    source 3
    target 4
    AGraph [
      weight 86.0
    ]
  ]
  edge [
    source 3
    target 5
    AGraph [
      weight 20.0
    ]
  ]
  edge [
    source 2
    target 6
    AGraph [
      weight 27.0
    ]
  ]
  edge [
    source 2
    target 7
    AGraph [
      weight 67.0
    ]
  ]
]

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

Добавлено спустя 5 часов 48 минут 39 секунд:
Поэкспериментировал. fcl-passrc не поддерживает генерики, а в зкаде у меня их много((( довольно быстро напарывается на <> и бросает исключение.
Я почемуто думал fcl-passrc - составная часть PasDoc, посмотрел - пасдок на генериках не вываливается)), а заодно увидел что он уже умеет строить графы зависимостей и классов))
Прогнав зкад пасдоком получил файл GVUses.dot (150кб) с содержимым похожим на граф. ед такое не поддерживает(( зато такое поддерживает некий Graphviz. Эта хрень качалаь полчаса (17мб) и час уже висит открывая мой GVUses.dot

Добавлено спустя 45 минут 34 секунды:
Какимто питон скриптом с просторов инета сконвертил dot в чтото понятное еду, но при этом похоже потерялись направления связей (не потерялось, выключилось отображение). Запощу картинки в тему про зкад
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Переменные и методы класса выдают ошибку компиляции

Сообщение Лекс Айрин » 10.09.2016 09:32:23

zub, проще, с XML форматом работать))
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Переменные и методы класса выдают ошибку компиляции

Сообщение zub » 11.09.2016 03:13:24

fcl-passrc генерики поддерживает, но только в fpc синтаксисе, делфи - нет. В принципе для проекта без генериков или только с фпц генериками я уже могу получить полную uses инфу.
Стоит ли продолжать в свете неполноценности fcl-passrc что PasDoc это всё умеет?
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Переменные и методы класса выдают ошибку компиляции

Сообщение Лекс Айрин » 12.09.2016 11:08:12

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


И, кстати, если уж начинать, то можно потом создать и визуализацию объектной модели с привязкой к модулям и (возможно) пакетам. А если потом удастся переделать без использования внешних инструментов и обеспечить "проваливание" в исходный код, то можно неплохое дополнение к лазарю сделать.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Переменные и методы класса выдают ошибку компиляции

Сообщение zub » 12.09.2016 15:18:11

Лекс Айрин
Дело не в программировании на дельфях - можно прекрасно на fpc в {$mode delphi} это делать.
Конечно можно написать "костылик" который будет выдирать из файлов секцию uses и колхозненько ее парсить... но потом встанет вопрос условной компиляции, потом захочется дерево классов... лучше сразу, по нормальному парсером от разрабов fpc\laz. С первого взгляда добавить туда {$mode ...} в сканер и отсутствие specialization в парсер не такуж и сложно

Ты подумай что тебе надо для экспорта. Я вижу это примерно так
массив записей такого вида
Код: Выделить всё
TUnitInfo=record
  Name:String
  Color,Group,ЕщеКакиенибудьАтрибуты:ТЧенибудь
  InterfaceUses,ImplementationUses:array of Integer {индексы юнитов}
end;
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Переменные и методы класса выдают ошибку компиляции

Сообщение and » 12.09.2016 15:56:12

Сдаётся мне, что продуктивнее существующий (-е) велосипед(-ы) допилить, чем с нуля свой ваять. Например:
Вид - "Зависимости модуля";
Пакет - "диаграмма пакетов".
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Re: Переменные и методы класса выдают ошибку компиляции

Сообщение zub » 12.09.2016 16:10:22

>>Сдаётся мне, что продуктивнее существующий (-е) велосипед(-ы) допилить, чем с нуля свой ваять. Например:
Понятно что в лазаре это есть, иначе это не IDE бы было.
Я и планирую подрпилить fcl-passrc, а остальное - и получение инфы и экспорт это 3 с половиной строчки. Ну разве что гуй для фильтрации результатов и настройки параметров экспорта
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Пред.След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

Рейтинг@Mail.ru