Владимир Паронджанов писал(а):
А как обстоит дело с теорией компиляторов для графических языков?
Специально никогда не интересовался теорией, хотя практикой, можно сказать, занимаюсь постоянно...
Насколько мне известно, подавляющее большинство решений не производят компиляцию (обычно под этим термином понимается компиляция в машинный код), а делают промежуточную кодогенерацию на какой-нибудь стандартный язык программирования (Си, ассемблер и т.п.). Например, так делают многочисленные CASE-средства, поддерживающие тот же UML.
Отдельно следует заметить, что в результате кодогенерации может получаться не прямо исполняемый код, а данные для run-time интерпретатора (обычно именуемые шитым кодом той или иной разновидности; сегодня это часто байт-код Java и т.п.).
На мой взгляд, дело в том, что даже императивный графический язык вроде Дракона гораздо менее императивен, чем стандартные языки программирования. Он содержит метаинформацию, на основе которой можно построить совершенно разные программы и решить разные задачи.
Особенно это свойственно декларативным языкам (например, диаграмма состояний или диаграмма потоков данных). Там громадный простор для различных способов кодогенерации, равно как и для исследований, преобразований схем и их оптимизаций.
Кроме того, в ряде случаев схема на графическом языке в рамках конкретной системы исполняется непосредственно, путём интерпретации. Тут о компиляции по существу речь не идёт совсем...