Можно ли преобразовать код в логический граф? - PullRequest
1 голос
/ 28 июня 2009

Возможно ли преобразовать код в логический граф?


EDIT:

Я думаю, что математика абсолютна. Мы можем судить, правильно это или нет. Но для кода есть нечто иное, чем логика. Я хочу удалить это «что-то», чтобы сохранить там только логику.

Ответы [ 4 ]

2 голосов
/ 28 июня 2009

Не уверен, что это именно то, что вы имеете в виду, но статические анализаторы, такие как анализ кода clang, определяют все возможные ветви, которые может принять код, и проверяют наличие ошибок. Например, с учетом кода ..

1. if(somefunction()){
2.    this_will_break();
3. } else {
4.     if(anotherfunction()){
5.         printf("%i", str(something));
6.     }
7.     print("this is fine");
8. }

Вы получите вывод по линиям:

Line 1. Taking true branch.
Line 1. Error: Function this_will_break is not defined
Line 4. Taking true branch.
Line 5. Warning: Function passed incompatible type

Вы могли бы потенциально наметить эти пути, но я не понимаю, почему вы хотели бы (это действительно ничего не показывает)

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

Последнее, что приходит на ум, это нодальные приложения, такие как Shake или Quartz Composer - способы «визуального программирования», представляющие код наподобие Add(Blur(MyImage), Blur(AlphaChannel)) в виде:

[MyImage]--->[Blur]----\/
                      [Add]
                       /\
[AlphaChannel]----------

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

2 голосов
/ 28 июня 2009

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

Быстрый Google вывел: Код Visual на блок-схему <Ч /> что касается обратного, потоковые диаграммы слишком широки, чтобы их можно было преобразовать в код. Хотя есть и графические языки программирования. Например, LabView fpga от NI - это все графическое программирование, которое затем можно преобразовать в VHDL.

0 голосов
/ 28 июня 2009

Или как UML с обратной инженерией, с диаграммами классов и последовательностей?

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

Нет отладчиков или юнит-тестов для графических представлений любого рода.

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

0 голосов
/ 28 июня 2009

По крайней мере возможно обратное. При программировании ПЛК Siemen одной из наиболее распространенных форм программирования является «Ladder Logic», где вы программируете графически.

http://en.wikipedia.org/wiki/Ladder_logic

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...