Технологии автоматического дедуктивного распараллеливания в языке 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) должен быть константным выражением, содержащим только неименованные константы. Такое выражение может быть числом/числовым выражением, или строкой (заключенной в апострофы), или списком, который может содержать числа, строки и другие списки. Числовые выражения вычисляются, применительно к результирующим значениям действуют следующие простые правила:
– целые числа так и считаются целыми;
– близкие к нулю вещественные константы считаются целочисленными нулями;
– близкие к целым вещественные значения считаются соответствующими целыми (с округлением);
– прочие