Технологии автоматического дедуктивного распараллеливания в языке Planning C. Владимир Викторович Пекунов
произвольный_Planning_C_код должен представлять собой фрагмент синтаксически корректного языкового выражения, не содержащего символа «@». Это может быть описатель любого статического элемента генерируемого кода. GNU_PROLOG_выражение может содержать вызовы любых предикатов GNU Prolog, в том числе генерирующих консольный вывод – результаты этого вывода и будут использоваться в качестве сгенерированных фрагментов кода. В большинстве случаев вывод будет генерироваться предикатом write.
Обращение к макромодулю имеет формат:
имя_модуля « (» [значение_параметра] {»,» значение_параметра}»)» «;»
В точке обращении к макромодулю компилятором выполняются следующие действия:
а) вычисляются все параметры обращения;
б) значения параметров подставляются в текст модуля вместо соответствующих лексем – имен параметров;
в) из текста модуля исключаются все предикаты, из которых формируется текст логической GNU Prolog-программы;
г) фрагмент модуля, содержащий какую-либо из целей, заменяется результатом доказательства этой цели (то есть блоком выведенных на консоль в ходе доказательства строк) в контексте сформированной логической GNU Prolog-программы;
д) в программу на Planning C вместо обращения к макромодулю вставляется код, содержащий префиксную строку (которая может быть пустой) и результирующий текст модуля, обрамленный фигурными скобками.
Необходимо детализировать возможные типы параметров. Каждый параметр (после выполнения всех макроподстановок и подстановок значений констант, определенных в программе с помощью ключевого слова const) должен быть константным выражением, содержащим только неименованные константы. Такое выражение может быть числом/числовым выражением, или строкой (заключенной в апострофы), или списком, который может содержать числа, строки и другие списки. Числовые выражения вычисляются, применительно к результирующим значениям действуют следующие простые правила:
– целые числа так и считаются целыми;
– близкие к нулю вещественные константы считаются целочисленными нулями;
– близкие к целым вещественные значения считаются соответствующими целыми (с округлением);
– прочие значения считаются вещественными.
Развернутый в константное выражение параметр распознается по следующим правилам:
а) если он начинается с « [», то это список, который передается в макромодуль без изменения вплоть до»]» с учетом сбалансированности по вложенным парам квадратных скобок;
б) если он начинается с «'», то это строка, которая передается без изменения вплоть до закрывающего апострофа «'» с учетом наличия в строке возможных пар апострофов, представляющих апостроф, являющийся одним из символов строки;
в) иначе делается попытка распознать параметр как число/числовое выражение.
Определение макромодуля может содержать обращения к иным макромодулям, записанным в той же форме «имя_модуля (параметры);». Таким образом, реализованы вложенные