Владимир Викторович Пекунов

Технологии автоматического дедуктивного распараллеливания в языке Planning C


Скачать книгу

произвольный_Planning_C_код должен представлять собой фрагмент синтаксически корректного языкового выражения, не содержащего символа «@». Это может быть описатель любого статического элемента генерируемого кода. GNU_PROLOG_выражение может содержать вызовы любых предикатов GNU Prolog, в том числе генерирующих консольный вывод – результаты этого вывода и будут использоваться в качестве сгенерированных фрагментов кода. В большинстве случаев вывод будет генерироваться предикатом write.

      Обращение к макромодулю имеет формат:

      имя_модуля « (» [значение_параметра] {»,» значение_параметра}»)» «;»

      В точке обращении к макромодулю компилятором выполняются следующие действия:

      а) вычисляются все параметры обращения;

      б) значения параметров подставляются в текст модуля вместо соответствующих лексем – имен параметров;

      в) из текста модуля исключаются все предикаты, из которых формируется текст логической GNU Prolog-программы;

      г) фрагмент модуля, содержащий какую-либо из целей, заменяется результатом доказательства этой цели (то есть блоком выведенных на консоль в ходе доказательства строк) в контексте сформированной логической GNU Prolog-программы;

      д) в программу на Planning C вместо обращения к макромодулю вставляется код, содержащий префиксную строку (которая может быть пустой) и результирующий текст модуля, обрамленный фигурными скобками.

      Необходимо детализировать возможные типы параметров. Каждый параметр (после выполнения всех макроподстановок и подстановок значений констант, определенных в программе с помощью ключевого слова const) должен быть константным выражением, содержащим только неименованные константы. Такое выражение может быть числом/числовым выражением, или строкой (заключенной в апострофы), или списком, который может содержать числа, строки и другие списки. Числовые выражения вычисляются, применительно к результирующим значениям действуют следующие простые правила:

      – целые числа так и считаются целыми;

      – близкие к нулю вещественные константы считаются целочисленными нулями;

      – близкие к целым вещественные значения считаются соответствующими целыми (с округлением);

      – прочие значения считаются вещественными.

      Развернутый в константное выражение параметр распознается по следующим правилам:

      а) если он начинается с « [», то это список, который передается в макромодуль без изменения вплоть до»]» с учетом сбалансированности по вложенным парам квадратных скобок;

      б) если он начинается с «'», то это строка, которая передается без изменения вплоть до закрывающего апострофа «'» с учетом наличия в строке возможных пар апострофов, представляющих апостроф, являющийся одним из символов строки;

      в) иначе делается попытка распознать параметр как число/числовое выражение.

      Определение макромодуля может содержать обращения к иным макромодулям, записанным в той же форме «имя_модуля (параметры);». Таким образом, реализованы вложенные