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

Читать онлайн книгу Технологии автоматического дедуктивного распараллеливания в языке Planning C - Владимир Викторович Пекунов страница 5

СКАЧАТЬ и семантика макромодуля

      Предлагается следующий синтаксис декларации дедуктивного макромодуля (все элементы в описании могут разделяться пробелами):

      «#» «def_module» « (» префиксная_строка»)» имя_модуля « (» [имя_параметра] {»,» имя_параметра}»)» « {»

      (предикат | цель | произвольный_Planning_C_код)

      {(предикат | цель | произвольный_Planning_C_код}

      «}» «;»

      предикат = «@» имя_предиката [» (» переменные_предиката»)»] [»: -» GNU_PROLOG_выражение]».»

      цель = «@» «goal» «:-» GNU_PROLOG_выражение».»

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

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

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

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

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

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

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

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

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

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

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

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

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

      – прочие СКАЧАТЬ