Оцените PGF1.3- отладчик-форматер структурных ошибок в исходниках Pascal+Delphi.
___Ключевые слова: отладка, форматирование, сопровождение, надежность, визуализация, документирование, Pascal, Delphi, FreeWare.
___Уважаемые программисты.
___Форматеры исходных кодов программ, используемые в современной практике программирования, базируются в основном на принципе однонаправленной обработки текста. Из исходного файла вводится строка текста и тут же производиться вывод этой информации в выходной файл. Максимум, что позволяет данный подход, это выделять операторы на отдельную строку и выводить их с соответствующим сдвигом. В данном сообщении будет расcмотрена модификация имеющегося метода форматирования, получившая название графическое форматирование. Для PASCAL + DELPHI разработан отладчик-форматер PGF (Pascal-programs Graphical Formatter), обеспечивающий следующие ДОПОЛНИТЕЛЬНЫЕ возможности:
___1. Автоматическое ВЫЯВЛЕНИЕ и локализация СТРУКТУРНЫХ ошибок, с указанием наиболее вероятного варианта их ИСПРАВЛЕНИЯ.
___2. Преобразование блоков по умолчанию (когда имеется всего один исполняемый оператор в теле условного- или цикл-оператора ) в явные блоки (добавляется begIN-eND).
___3. Реальная структура программы, полученная после вышеуказанных преобразований, визуализируется в виде форматированного текста, с использованием ЦВЕТА и ЖИРНОСТИ.
___4. Операторы перехода (явные - GoTo, неявные - Exit, Halt, Continue …) ПОЗИЦИОННО и ЦВЕТОМ выравниваются на свою метку (если нет метки, то в нужном месте генерируется фантом-метка), что делает их заметными с первого взгляда.
___5. В текст программы добавляется большое количество вспомогательных комментариев структурного характера, в частности ко всем стуктурообразующим операторам приписываются комментарии с информацией, обеспечивающей их ВЗАИМНО-ПЕРЕКРЕСТНЫЕ ссылки.
___6. Для всех *.PAS файлов создаются их *.RTF эквиваленты (просматривать только через WordPad : Open With - WordPad; в WordPad, для отключения режима переноса длинных строк, в режиме View / Options ... / Rich Text / установить опцию No Wrap), в которых новая структура программы (сформированная в результате нейтрализации неточностей) а также выявленные структурные ошибки визуализируются с помощью отступов, цвета и жирности. При желании можно прямо в *.RTF файлах произвести отладку текста, сохранить их ‘File: Save as’, указав режим ‘Save as type: Text document’ и приписав в ‘File name’ после имени файла расширение ‘.PAS’. В этом случае исправленный текст заменит старый *.PAS файл, и можно продолжать отладку в Turbo Pascal или Delphi.
___Подбирая в меню желаемые значения параметров, можно легко настроить работу программы на индивидуально желаемый профиль функционирования.
___Наглядно видя реализованную в исходном тексте программы РЕАЛЬНУЮ структуру, программист легко может определить требуемые коррекции, чтобы она стала адекватна ЖЕЛАЕМОЙ структуре. Вам самим решать, насколько это облегчит разработку собственной и адаптацию чужой программной продукции, повысит ее надежность.
___Вполне возможно, что применение пакета в УЧЕБНОМ процессе и при оформлении ИЛЛЮСТРАЦИОННЫХ примеров в учебниках также даст положительный эффект, поскольку более наглядная и качественная визуализация структуры программ облегчит усвоение учебного материала.
___FreeWare, пакет распространяется бесплатно. Система Windows. Пользователь может сам: переделать интерфейс выходных форм по своему усмотрению (в инсталлятор включены исходные тексты программы); легко добавить в интерфейс любой желаемый язык (PGF.exe мультиноязычен, объём сообщений невелик и пока English, Russian, RuTranslit, Georgian, German, French, Spanish). Пакет распространяется несколько месяцев, и за это время сообщений об опасных сбоях (связанных с сохранностью исходников) не поступало, т.е. можете брать смело – если не поможет, то уж наверняка не навредит. Чтобы проверить, действительно ли вышеописанные нововведения облегчают анализ структуры программ, скопируйте подробное описание, инсталлятор (скачать: http://grafor.moy.su/Files/PGFLanSetup.rar) или обновление пакета PGF, раздел Files на сайтах GRAFOR.MOY.SU, GRAFOR.PVT.GE . Если PGF у Вас уже инсталлирован, то для обновления достаточно скопировать обновление файла PGFWin.exe. Буду рад, если Вам понравиться. Новые версии PGF, с учетом Ваших замечаний, будут регулярно выставляться (если что-то сбоит, просто деинсталлируйте старую и установите новую версию).
! + ? + ! + ? + !+ ? + !+ ? + !+ ? + !+ ? + !+ ? + !+ ? + !+ ? + !+ ? + !+ ? + !+ ? + !+ ? + !+ ? + !
___Однако меня теперь больше интересует обсуждение с пользователями вопроса о возможности и целесообразности развития аналогичного подхода к другим языкам программирования. Какой язык программирования Вам кажется наиболее перспективным? Можете ли Вы принять участие в подобных работах? Знаете ли Вы организацию, которая заинтересована в проведении подобной работы настолько, что готова её профинансировать, и как с ней связаться? Можно открыть общую дискуcсию здесь или на форуме GRAFOR.MOY.SU. В идеале это должен быть модуль, подключаемый к имеющимся трансляторам с данного языка, а еще лучше интегрированный в его новые разрабатываемые трансляторы. Мне кажется, здесь открывается широкое поле деятельности, где прибыль получит тот, кому удасться создать востребованный продукт(ы). Ведь в PGF реализованы идеи, практически полезные, но отсутствующие в экслуатируемых отладчиках и форматерах: Локализация структурных ошибок, с указанием наиболее вероятного варианта их исправления; Использование цвета и жирности для визуализации структуры; Выравнивание переходов по позиции и цвету их метки; Генерация для структурообразующих элементов комментариев с взаимно-перекрестными ссылками; ... . Буду Вам весьма признателен, если укажете (а лучше пришлете) пакеты, где какие-либо из этих идей уже реализованы. Если Вы уже ведёте или заинтересовались проведением похожих работ, берите понравившиеся идеи (в любом случае будет приятно сознавать, что мои идеи начали приносить пользу, но вдвойне будет приятно, если Вы при этом дадите на меня ссылку) или пригласите к сотрудничеству – авось мой опыт окажется полезен и все сможем заработать some of money :) .
! + ? + ! + ? + !+ ? + !+ ? + !+ ? + !+ ? + !+ ? + !+ ? + !+ ? + !+ ? + !+ ? + !+ ? + !+ ? + !+ ? + !
___ Желаю всего наилучшего.
___Трошин Василий. Nik: Vasil54, Сайты: GRAFOR.MOY.SU, GRAFOR.PVT.GE.
Программа невыносимо актуальна для 80-х 90-х годов. Сегодня здравомыслящие люди пользуются нормальными IDE с автоформаттерами и проверкой синтаксиса "на лету".
___Активен только сайт GRAFOR.MOY.SU (GRAFOR . PVT . GE – отключён)
___Скриншот программы PGF1.3
___Демонстрационный пример работы программы PGF1.3
___Прямая ссылка на скачивание: http://grafor.moy.su/Files/PGFLanSetup.rar
___ Желаю всего наилучшего.
___Трошин Василий. Nik: Vasil54, Сайт: GRAFOR.MOY.SU
К автору, а в чем смысл начинать каждый новый абзац с тройного нижнего подчеркивания? :)
[/OFFTOP]
К автору, а в чем смысл начинать каждый новый абзац с тройного нижнего подчеркивания? :)
[/OFFTOP]
[SIZE=2][COLOR=DimGray]Ээээ... видимо используется этот самый PGF для форматирования поста :)[/COLOR][/SIZE]
тогда напрашивается расшифровка PGF как Pipets-Govno-Formatter.
___Каюсь, моё ухищрение выделять абзацы тройным подчеркиванием в предыдущем сообщении было излишним - все строки были с абзаца.
___Надеюсь по локализации структурных ошибок Delphi будет много конструктивных замечаний.
___С наилучшими пожеланиями.
___ Активна новая версия PGF 1.4. Ничего серьёзного, небольшая косметика :) .
___ Я не претендую на то, что в одиночку создал продукт лучше фирменных. Однако, разве не улучшаться эти фирменные редакторы и трансляторы, если в них появятся, не голословно предложенные, а практически РЕАЛИЗОВАННЫЕ в PGF ДОПОЛНИТЕЛЬНЫЕ возможности: Возможность обрабатывать ЛЮБЫЕ модули (ошибочные, или даже незавершённые), преобразуя их структуру в законченный вид. Осуществляется автоматическое ВЫЯВЛЕНИЕ и локализация СТРУКТУРНЫХ ошибок, с указанием наиболее вероятного варианта их ИСПРАВЛЕНИЯ.; Генерация для структурообразующих элементов комментариев с взаимно-перекрестными ссылками; Выравнивание переходов по позиции и цвету их метки; Использование цвета и жирности для визуализации структуры; ... . Поправьте меня, если это не так. Я и выставляю PGF на форум, и делаю рассылку, с надеждой на то, что эти доп. возможности понравиться простым программистам, а это стимул для разработчиков редакторов и трансляторов добавить их в свои пакеты. Поверьте, если бы это было просто, то уже давно было бы сделано, хоть для одного языка.
___ Желаю всего наилучшего.
___ Трошин Василий. Nik: Vasil54, Сайт: GRAFOR.MOY.SU.
Omg :eek: даже представлять такое не хочется.
По делу: идея может быть интересной, но, мне думается, ей опасно выходить за рамки применения в студенческих лабах. В одной замкчательной книге по Си было написаано (вольный перевод):
Как вы представляете себе однозначность в вашем случае? Ну, скажем:
...
repeat
...
{??} until ...
Где здесь пропущен until? Конец ли это внутреннего цикла или это тело внешнего? И так далее...
И это уж не говоря о том, что добавляемые номера строк + какие-то (иногда странные) комментарии мягко говоря делают код трудно читаемым без 100 грамм...
{{ 21 p e t } NLAN:=- 1;
{{ 22 p e t } FORM1.ComboBox1.ItemIndex:=- 1;
{{ 23 p e t } FORM1.ComboBox1.TEXT:= 'Key <> ' + SLanKey;
{{ 24 p e te } end {{t SRAB<>SLAN #20}
{{ 25 p e eb } else BEGIN {{ #38}
{{ 26 p e e } {SOZDANIE MENU AZIKOV}
{{ 27 p e e wb } while not Eof(FVX) do begin {{ #36}
{{ 28 p e e w } Readln(FVX, SRAB);
{{ 29 p e e w } Readln(FVX, SRAB);
{{ 30 p e e w } FORM1.ComboBox1.Items.Add(Trim(SRAB));// DOBAVLENIE V MENU ELEMENTA
{{ 31 p e e w } {ShowMessage('V MENU DOBAVLENO ' + SRAB + '; Insex='+ inttostr(FORM1.ComboBox1.ItemIndex));}
{{ 32 p e e w } J2:=(2 *((KXarLan-1) + KSOOB))+ 3;//+ 3 V RADIOGROUP1
{{ 33 p e e w fb } FOR J1:= 1 TO J2 DO begIN {{ #35}
{{ 34 p e e w f } READLN(FVX, SRAB);
{{ 35 p e e w fe } eND; {{f J1:=1 TO J #33}
{{ 36 p e e we } END; {{w not Eof(FV #27}{W NOT EOF}
{{ 37 p e e } FORM1.ComboBox1.ItemIndex:= NLAN;
{{ 38 p e ee } end; {{e SRAB<>SLAN #25}
{{ 39 p e } CLOSEFILE(FVX);
{{ 40 p ee } end; {{e IOResult>0 #17}
{{ 41 pe } end; {{p PLanMenu #7}
{{ www.grafor.pvt.ge PGF(Ver 1.3 activ 01.04.2009) formatted 1. 4.2009/22:12 }
{{ 1 }
{{ 2 } {TABLICA CHIPSET PO OTNOSENIU K VIVODU ENG+RUS+GEO
p.s: кстати, в чём смысл устанавливать вместе с прогой её полные исходники, прямо в папку с бинарниками?
PGFLan.dof
PGFLan.dpr
PGFLan.exe
PGFLan.opr
PGFLan.res
PGFLan.stat
...
___Спасибо за внимание и замечания.
___1. Однозначности я достигаю очень просто. Каждый END / UNTIL увязывается с ближайшим предшедствуюшими BEGIN / REPEAT. Для незакрытых BEGIN / REPEAT в конце модуля генерируются соответственные END / UNTIL. Тем самым структурная ошибка локализуется в данном модуле, а не ограничивается абстрактным сообщением в конце программы (особено если есть несколько подпрограммам). Полученная РЕАЛЬНАЯ структура визуализируется - программист может ее сравнить с ЖЕЛАЕМОЙ структурой, и или принять или переделать предлагаемые коррекции. В любом случае ему не придется искать места ошибок - мелочь, а приятно.
___2. Генерируются автоматически обновляемые комментарии. К каждому BEGIN / UNTIL приписывается номер строки соответствующего оператора. К каждому END / REPEAT приписывается коментарий с: (первой буквой породившего блок оператора) + ( условием оператора) + (номером строки соответственного оператора). при анализе текста не надо гадать как далеко тянется блок, а если подряд идет несколько END / REPEAT, то не надо гадать кто - чей. Мелочь - а приятно. Все переходы позиционно, стрелкой и цветом позиционируются на свою метку - значит не проглядите выход из глубины нескольких вложенных блоков. Мелочь - а приятно.
___3. Коментарии слева позволяют для ЛЮБОГО оператора определять не только на какой глубине вложенности блоков он находиться, но и то, какими операторами эти блоки былы образованы.
___4. Исходники я поставляю в наивной надежде, что если кому не понравиться дизайн - переделает по своему вкусу.
___5. Если некоторые комментарии для Вас не информативны, или мешает цвет - отключите в меню.
___Надеюсь, я Вас заинтересовал. Буду ждать новых замечаний.
___Трошин Василий. Пакет PGF, Sait: GRAFOR.MOY.SU
90% таких "приятных мелочей" устраняются правилами, которые обобщённо называются Clean Code. Например, нумерация строк, поиск ближайшего repeat и пр. - всё это происходит от того, что человек не озаботился ограничением функций по размеру - скажем, строк 20-30, когда ничего искать не нужно, ибо весь код функции умещается на одном экране и потому ясен.
Ваша программа, кажется, пытается "облегчить бремя написание чистого кода", что приведёт к написанию ещё более плохого кода, ещё более "прощающих компиляторов" (что по определению странно) и т.д. Примерно то же, что сейчас происходит с медициной.
___ Уважаемые программисты, разработчики текстовых редакторов и отладочных систем.
___ Предлагаю опробовать PGF (Programs Graphical Formatter) - отладчик-форматер структурных ошибок в исходниках Pascal / Delphi / C / C# / C++. О вкусах не спорят, но, скорее всего он будет особенно полезен: а) для начинающих программистов, которые ещё недостаточно овладели навыками создания структуры программы; б) при разработке больших модулей со сложной структурой; в) при сопровождении и адаптации старой и/или плохо документированной программной продукции. Возможно Вам понравяться его дополнительные возможности, и Вы станете им пользоваться параллельно с используемыми Вами системами ( например JEdid, Eclipse ). Надеюсь, что разработчики текстовых редакторов и отладочных систем сочтут целесообразным включить в свои пакеты режимы, реализующие некоторые его дополнительные возможности. Если они это сделают самостоятельно – я не возражаю; но если обратятся ко мне, то возможно они выиграют время, а я смогу заработать.
___Активена новая версия PGF 2.1 . Исправлены выявленные ошибки. Добавлено форматирование языков C, C++, C#.
___Активен только сайт GRAFOR.MOY.SU.
___Скриншот программы PGF (Ver 2.1)
___ Теперь конкретно перечислю некоторые дополнительные возможности:
___1. Реальная СТРУКТУРА программы, полученная после обработки PGF, визуализируется в виде форматированного текста, с использованием ЦВЕТА и ЖИРНОСТИ.
___ 2. Выравнивание операторов перехода (явные - GoTo, неявные - Exit, return, Continue, break …) ПОЗИЦИОННО и ЦВЕТОМ на свою метку (если нет метки, то в нужном месте генерируется фантом-метка), что делает их заметными с первого взгляда. Тогда при анализе и отладке не придётся искать ситуации передачи управления из глубины нескольких вложенных блоков на верхние уровни, или вообще инициализации выхода из подпрограммы - всё будет наглядно показано.
___ 3.Добавление в текст программы большого количества вспомогательных комментариев структурного характера, в частности ко всем стуктурообразующим операторам приписываются комментарии с информацией, обеспечивающей их ВЗАИМНО-ПЕРЕКРЕСТНЫЕ ссылки. Это особенно удобно, когда:
___ 3.1.Подряд идут несколько операторов конца блока, и надо определить, который оператор какой блок закрывает и где был открыт каждый закрываемый блок;
___ 3.2. На метку имеется несколько переходов, и важно знать как их местоположение, так и их количество (например, несколько Exit, return, GoTo, break ...).
___ 4. Преобразование блоков по умолчанию (когда имеется всего один исполняемый оператор в теле условного- или цикл-оператора ) в явные блоки (добавляются операторные скобки).
___ 5. Возможность обрабатывать ЛЮБЫЕ модули (ошибочные, или даже незавершённые), преобразуя их структуру в законченный вид. Осуществляется автоматическое ВЫЯВЛЕНИЕ и локализация СТРУКТУРНЫХ ошибок, с указанием наиболее ВЕРОЯТНОГО варианта их ИСПРАВЛЕНИЯ.
___ Для всех *.PAS / *.C / *.CC / *.CS / *.CPP файлов создаются их *.RTF эквиваленты (просматривать только через WordPad : Open With - WordPad; в WordPad, для отключения режима переноса длинных строк, в режиме View / Options ... / Rich Text / установить опцию No Wrap), в которых новая структура программы (сформированная в результате нейтрализации неточностей) а также выявленные структурные ошибки визуализируются с помощью отступов, цвета и жирности. При желании можно прямо в *.RTF файлах произвести отладку текста, сохранить их ‘File: Save as’, указав режим ‘Save as type: Text document’ и приписав в ‘File name’ после имени файла расширение ‘.PAS’ / ‘.C’ / ‘.CC’ / ‘.CS’ / ‘.CPP’. В этом случае исправленный текст заменит старый *.PAS / *.C / *.CC / *.CS / *.CPP файл, и можно продолжать отладку.
___ Желаю всего наилучшего.
___ Трошин Василий. Nik: Vasil54, Сайт: GRAFOR.MOY.SU