Cтраница 1
Циклические инструкции, такие, как инструкции DO в Фортране и ПЛ / 1, инструкции for в Алголе и варианты инструкции PERFORM в Коболе, представляют во многих языках еще одну основную управляющую структуру. В отличие от условных инструкций, которые всегда необходимы в той или иной форме, циклические инструкции часто можно заменить последовательностями более простых инструкций. [1]
Основу структуры циклической инструкции составляет тело и заголовок. Тело обычно является произвольной последовательностью инструкций, а заголовок состоит из выражения, указывающего, сколько раз следует выполнить тело. На тело циклической инструкции не накладывается сколько-нибудь существенных ограничений, вместе с тем можно встретить много вариантов структуры заголовка. Рассмотрим некоторые, наиболее типичные из них. [2]
В простейшем типе заголовка циклической инструкции указывается, что тело должно быть выполнено некоторое фиксированное число раз. [3]
Эти вопросы в применении к рассмотренным простым циклическим инструкциям могли бы показаться незначительными, но те же вопросы возникают для любой формы циклической инструкции, поэтому важно разобрать их здесь в простейшем виде. В любом случае целесообразно спросить: ( 1) когда производится проверка окончания и ( 2) когда вычисляются значения переменных, используемых в заголовке. [4]
Находят применение и многие другие варианты циклических инструкций. Мы не ставим своей целью осветить все их. Иллюстрацию дополнительных возможностей можно найти в части II при описании языков Алгол, ПЛ / I и Кобол. Циклические инструкции образуют еще одну основную альтернативу механизму меток и переходов. Как и в случае условных инструкций, циклические инструкции не требуют использования меток, и структура всей инструкции легко анализируется. [5]
Инструкция PERFORM в Коболе служит и как циклическая инструкция, и как простой вызов подпрограммы без параметров. [6]
Смысл этой конструкции изображен блок-схемой на рис. 5.9. В циклической инструкции этого вида выражение, используемое для проверки, перевычисляется каждый раз после выполнения тела. Еще одно замечание: здесь мы должны предполагать, что выполнение тела изменяет значения каких-то переменных, входящих в выражение для проверки - иначе повторение, раз начавшись, никогда не закончилось бы. [7]
Структуры, используемые для связи инструкций или групп инструкций, такие, как условные и циклические инструкции. [8]
Основной структурой данных в АПЛ также являются однородные массивы, однако в АПЛ нет циклических инструкций, и, даже если ввести их, они фактически имели бы относительно-малое значение. Причина заключается в том, что для АПЛ не характерна последовательная обработка массивов по одному элементу. Большинство операторов работают сразу с целыми массивами в качестве операндов. От программиста скрыта последовательная обработка массива, которая, возможно, происходит внутри этих операторов. Вообще программа на АПЛ обычно содержит относительно мало управляющих структур на уровне инструкций. [9]
Эти вопросы в применении к рассмотренным простым циклическим инструкциям могли бы показаться незначительными, но те же вопросы возникают для любой формы циклической инструкции, поэтому важно разобрать их здесь в простейшем виде. В любом случае целесообразно спросить: ( 1) когда производится проверка окончания и ( 2) когда вычисляются значения переменных, используемых в заголовке. [10]
Циклические инструкции, такие, как инструкции DO в Фортране и ПЛ / 1, инструкции for в Алголе и варианты инструкции PERFORM в Коболе, представляют во многих языках еще одну основную управляющую структуру. В отличие от условных инструкций, которые всегда необходимы в той или иной форме, циклические инструкции часто можно заменить последовательностями более простых инструкций. [11]
Вновь возникает вопрос о том, когда выполняется проверка окончания; когда и как часто вычисляются различные выражения, входящие в заголовок. В данном случае эти вопросы имеют первостепенную важность для разработчика транслятора еще и потому, что такие циклические инструкции являются главными объектами оптимизации, а различные ответы на поставленные вопросы могут оказать сильное влияние на допустимые типы оптимизации. Как мы увидим в разд. [12]
Используя сканеры и генераторы, можно создать такие управляющие структуры для обработки структур данных, которые во многих языках непосредственно построить трудно. Например, в таких языках, как Фортран и Алгол, где для создания сканеров массива обычно применяется циклическая инструкция, мы оказываемся в затруднительном положении, если алгоритм требует нескольких независимо продвигающихся сканеров для одного массива. Структура инструкции DO в Фортране или инструкции for в Алголе позволяют описывать в одной инструкции только одну индексную переменную. Это требование делает невозможным независимое продвижение индексных переменных. [13]
Основу структуры циклической инструкции составляет тело и заголовок. Тело обычно является произвольной последовательностью инструкций, а заголовок состоит из выражения, указывающего, сколько раз следует выполнить тело. На тело циклической инструкции не накладывается сколько-нибудь существенных ограничений, вместе с тем можно встретить много вариантов структуры заголовка. Рассмотрим некоторые, наиболее типичные из них. [14]
В качестве указателя в массиве используется индексная переменная - простая целая переменная, последовательно принимающая значения индексов соответствующих элементов массива. Инструкция DO в Фортране или инструкция for в Алголе отражают эту естественную структуру, позволяя легко организовывать циклы, выполнять начальную установку индексной переменной, ее изменение и проверку. Поскольку последовательная, элемент за элементом, обработка массивов в этих языках - весьма часто встречающийся процесс, циклические инструкции широко используются, и их отсутствие заметно ухудшило бы эти языки. [15]