Cтраница 2
Формальные параметры служат только для указания типа и длины, количества и порядка записи фактических параметров, которые ставятся им в соответствие при каждом обращении к подпрограмме. Тип формальных параметров может быть задан неявно или установлен операторами описания типа, следующими за оператором начальной строки подпрограммы-функции. Если формальным параметром является идентификатор массива, то он должен быть описан внутри подпрограммы-функции. [16]
Формальными параметрами могут быть имена простых переменных, массивов и подпрограмм. Тип формальных параметров ( переменных и массивов) может быть задан неявно или операторами описания, следующими за оператором заголовка. [17]
Каждый формальный параметр представляет собой наименование простой переменной, массива или процедуры. Описание типов формальных параметров начинается одним из следующих символов: real, integer, boolean, array, integer array, boolean array, procedure, за которыми следует список наименований из числа формальных параметров. Описания задают свойства формальных параметров. [18]
Элемент тип задает тип формального параметра, который может быть любым из типов VBA, кроме строки с фиксированной длиной. [19]
Здесь в описании функции тип формального параметра определен как неограниченный массив целых. Фактический параметр отнесен к тому же типу, но при декларации сигнала определен фактический его размер. Размер массива в подпрограмме автоматически устанавливается равным размеру фактического массива. Атрибут фактического массива data range использован для задания числа повторений оператора loop. Такой прием часто используется для создания подпрограмм обработки массивов произвольной размерности. [20]
Список параметров - это список ( возможно пустой) формальных параметров, которые используются функцией. Объявления параметров описания параметров задают типы формальных параметров. [21]
Переменные Р и Q могут представлять только процедуры, имеющие один формальный параметр типа BOOLEAN. Объявление типа процедуры описывает количество и тип формальных параметров, которые должна иметь процедура-переменная. Если процедура является процедурой-функцией, то объявление также задает и тип результата. [22]
Если формальный параметр есть параметр-переменная, соответствующий фактический параметр также должен быть переменной, а не выражением. Тип фактического параметра должен совпадать с типом формального параметра, с одним только исключением: если формальным параметром является параметр-значение вещественного типа, фактическим параметром может быть выражение целого типа соответственно общему правилу, по которому целые выражения можно записывать там, где по контексту должно находиться выражение вещественное. [23]
В случае, если в заголовке процедуры не приводится пояснительная информация о формальных параметрах, то для установления типа переменной у транслятор должен предварительно перед переводом этого выражения проанализировать в алгол-программе все обращения к данной процедуре. Если же в заголовке процедуры указать информацию о типе формального параметра у, то отпадает необходимость предварительного просмотра обращений к процедуре, что в значительной мере упрощает и ускоряет процесс трансляции. [24]
![]() |
S. Вид стека при обработке определения генератора функций. [25] |
При этом имена, типы и значения параметров генератора заносятся в таблицу имен. В качестве имени и типа здесь выступают имя и тип формального параметра, которые берутся из типа генератора, а значения поставляются аргументами. Так как аргументом генератора может быть константа, переменная или выражение, то это значение может представлять собой адрес константы, переменной или выражения в объектной программе. [26]
Если переопределяется реализация виртуального метода, то заголовок заново определяемого виртуального метода в производном типе не может быть изменен. Иначе говоря, должны остаться неизменными порядок расположения, количество и типы формальных параметров в одноименных виртуальных методах. Если этот метод реализуется функцией, то не должен изменяться и тип результата. [27]
Трудности возникают в двух ситуациях: 1) вызов функции в Алголе может быть рекурсивным, и поэтому временная память, необходимая во время вычисления выражения, должна выделяться динамически в тех случаях, когда выражение содержит вызов функции; 2) иногда тип значения выражения нельзя предсказать заранее во время трансляции и требуется динамическая проверка типов. Последняя ситуация возникает при вычислении условных выражений и в тех случаях, когда типы формальных параметров не указаны в подпрограмме. [28]
Синтаксические диаграммы для процедурных типов показаны на рис. А. Объявление процедурного типа достаточно просто. Оно начинается со слова PROCEDURE, за которым следует список типов формальных параметров. Если имеется процедура-функция, то в объявление включается тип результата. [29]
При вызове внешней процедуры в списке параметров указываются не формальные параметры, которые объявлялись в описании процедуры, а действительные, которые объявлены в вызывающей программе. Действительные параметры при вызове процедуры заменяют формальные и фактически будут участвовать как операнды в выполнении процедуры. Поэтому последовательность написания действительных параметров и их типы должны строго соответствовать списку и типам формальных параметров, дабы избежать ошибок в результатах. [30]