Cтраница 2
Общая программа составляется из отдельных подпрограмм, которые, в некоторых случаях, являются процедурами без параметров. Формальные параметры такой процедуры вводятся в состав общих переменных, глобальных по отношению к блоку процедуры. Настройка такой процедуры на фактические параметры сводится к присвоению значений фактических параметров глобальным переменным процедуры. После этого в программе осуществляется передача управления на вход процедуры. Этот метод позволяет программисту воздействовать на порядок присвоения значений формальным параметрам, на способ передачи управления на процедуру и управлять выделением памяти под ее формальные параметры. [16]
Выполнение оператора процедуры состоит в следующем. Все формальные параметры заменяются соответствующими фактическими. После этого создается динамический экземпляр блока процедуры, который и выполняется. [17]
Когда процедура вызвана, считают, что она становится активной и остается такой, пока не закончится. Важно очень четко понимать основную идею активизации и окончания блоков процедур и знать, как идентификаторы определяются и какие описатели их задают, поскольку от этого зависит связь имен идентификаторов между блоками. [18]
Это делает программу нагляднее. Правилами определения области действия допускается использование одного имени для глобального и формального параметров. В этом случае глобальный параметр теряет свое значение внутри блока процедуры или функции, так как с этим именем связан локальный параметр. [19]
Метки в этом операторе END произвольны. Первая метка ( или метки) является метками оператора, в то время как последняя метка, если она необходима, означает метку процедуры. Это облегчает чтение блока процедуры. [20]
Если в секции формальных параметров списку идентификаторов предшествует зарезервированное слово VAR, то все параметры из этого списка являются параметрами-переменными. В качестве фактического параметра, соответствующего формальному параметру-переменной, должна использоваться переменная. Тип фактического параметра должен быть идентичным типу, заданному в спецификации параметра-переменной. При обращении к описанию процедуры с помощью оператора процедуры перед созданием динамического экземпляра блока процедуры устанавливается ссылка на идентификатор той переменной, которая является фактическим параметром. Все действия, задаваемые телом процедуры, выполняются над фактическим параметром, который доступен в течение всего времени существования созданного блока процедуры. Если переменная, выступающая в качестве фактического параметра, изменяет свое значение в процессе выполнения процедуры, то после завершения выполнения процедуры это значение остается доступным для последующих вычислений, несмотря на то, что динамический экземпляр блока процедуры прекращает свое существование. [21]
Если в секции формальных параметров списку идентификаторов предшествует зарезервированное слово VAR, то все параметры из этого списка являются параметрами-переменными. В качестве фактического параметра, соответствующего формальному параметру-переменной, должна использоваться переменная. Тип фактического параметра должен быть идентичным типу, заданному в спецификации параметра-переменной. При обращении к описанию процедуры с помощью оператора процедуры перед созданием динамического экземпляра блока процедуры устанавливается ссылка на идентификатор той переменной, которая является фактическим параметром. Все действия, задаваемые телом процедуры, выполняются над фактическим параметром, который доступен в течение всего времени существования созданного блока процедуры. Если переменная, выступающая в качестве фактического параметра, изменяет свое значение в процессе выполнения процедуры, то после завершения выполнения процедуры это значение остается доступным для последующих вычислений, несмотря на то, что динамический экземпляр блока процедуры прекращает свое существование. [22]
Один блок ( либо PROCEDURE, либо BEGIN) может быть вложен в другой блок. Такие блоки называются внутренними. Совмещения блоков быть не может. Каждый блок должен быть полностью вложен в другой аналогично тому, как вкладываются друг в друга группы DO. Блоки, которые ни в какой другой блок не вкладываются, называются внешними. Внешними могут быть только блоки процедур, а в каждой программе ПЛ / 1 должна быть по крайней мере одна внешняя процедура. [23]
Если в секции формальных параметров списку идентификаторов предшествует зарезервированное слово VAR, то все параметры из этого списка являются параметрами-переменными. В качестве фактического параметра, соответствующего формальному параметру-переменной, должна использоваться переменная. Тип фактического параметра должен быть идентичным типу, заданному в спецификации параметра-переменной. При обращении к описанию процедуры с помощью оператора процедуры перед созданием динамического экземпляра блока процедуры устанавливается ссылка на идентификатор той переменной, которая является фактическим параметром. Все действия, задаваемые телом процедуры, выполняются над фактическим параметром, который доступен в течение всего времени существования созданного блока процедуры. Если переменная, выступающая в качестве фактического параметра, изменяет свое значение в процессе выполнения процедуры, то после завершения выполнения процедуры это значение остается доступным для последующих вычислений, несмотря на то, что динамический экземпляр блока процедуры прекращает свое существование. [24]
Работа транслятора начинается вводом программы на языке АЛГОЛ в машину. При этом работает 1 - й или 2 - й блок, который перекодирует все основные символы языка в 15-разрядный двоичный код. После этого работает блок синтаксического контроля. Все места записи с ошибками выдаются на печать. Следующий блок - выделения понятий - сводит алгольную программу к системе таблиц, относящихся к различным понятиям внутреннего языка транслятора. В процессе работы печатаются все неописанные идентификаторы. Если таких нет, то начинает работать блок программирования выражений, выделенных во входной записи в условном коде. Затем вызываются блоки по обработке операторов или описаний определенного типа ( входа, циклов и др.), по окончании работает блок распределения памяти для простых переменных и массивов. После блока распределения памяти работают блоки процедур - кодов. [25]