ОБЪЯВЛЕНИЕ БЛОКОВ - ПРОТОТИПИРОВАНИЕ |
Имена блоков, определенных в программном модуле, имеют видимость в пределах всей программы. Для локализации поля видимости имен внутри модуля должна быть использована инструкция <описатель блока> ::= [<описатель типа>] [ <дескриптор массива> ] <имя блока> Пример: internal <int> bl_1( <int> y1, x1 ), => В Caper 4 каждый блок, представленный в internal, интерпретируется как определение структуры и, тем самым, порождается новый тип. Имя блока интерпретируется как тэговое имя структуры. Компилятором Caper в такую структуру стандартно включаются элементы, описываемые как <block> body где <тип> - тип возвращаемого значения. Так, описанные выше блоки будут представляться структурами: struct bl_1 { <int> return, =>
struct bl_2 { <null> return, => struct bl_3 { <null> return, => struct bl_4 { <tagStru> [] return, => Важным отличием от обычных структур является инициализация элемента body указанием блока. Элемент body может быть изменен в процессе выполнения программы. Пример: internal bl_examp blk.body := bl_examp Следующая инструкция похожа на internal, однако служит несколько иным целям, а именно, созданию классов (типов) блоков. Данная инструкция не описывает реальные блоки: В <описатель блока> задается имя не реального блока, а класса блоков. На данное имя может опираться реальное определение блока. Использование прототипа блока осуществляется в операторе internal: prototype <int> ADDITIVE ( <int> x, y ) internal <as ADDITIVE> bl_1, <as ADDITIVE> bl_2 Тем самым bl_1 и bl_2 должны быть реально определены и, согласно прототипу, должны иметь по два целочисленных параметра и возвращать <int>. |