Cтраница 2
Первоначально авторы языка Алгол для того, чтобы не ориентировать язык на какой-либо конкретный тип ЭВМ, при разработке эталонного языка намеренно не определили строго ввод и вывод информации. И только в мае 1964 г. было принято и опубликовано [3] официальное сообщение, которое определило набор первичных процедур для ввода и вывода данных. В связи с этим разработчики трансляторов с Алгола самостоятельно определили во входных языках специальные операторы процедур ввода и вывода информации, рассчитанные на возможности устройств ввода и вывода конкретных машин. [16]
Как и в других ситуациях, в которых предписано копирование, следует помнить важное замечание в разд. Сообщения: Любой из этих процессов может быть заменен любым процессом, вызывающим тот же эффект. В частности, при манипулировании с подпрограммами разработчик транслятора обычно располагает другими средствами, вызывающими тот же эффект, что и копирование. То же самое относится ко многим другим ситуациям этого рода, особенно связанным с копированием. [17]
Типы устройств ввода и подготовки данных, кодирования информации на носителе специфицируются с помощью номеров каналов. Каналы ввода числовых значений и каналы ввода текста нумеруются независимо. Закрепление номеров каналов за отдельными типами устройств ввода и подготовки данных осуществляется разработчиками транслятора с языка АЛМО на каждой конкретной машине. [18]
Известно много методов синтаксического анализа, основанного на формальных грамматиках, в частности на НФБ-грам-матиках с различными ограничениями. Поиск эффективных и общих методов грамматического разбора для языков, определяемых формальными грамматиками различного вида, привел к развитию целого ряда сложных и мощных методов, превосходящих предназначенные для конкретных случаев методы, которые использовались в ранних трансляторах языков программирования. Большую пользу в этой области принесла связь между теоретическими исследованиями и практикой: большинство разработчиков трансляторов теперь в той или иной степени используют понятия синтаксически ориентированных компиляторов. [19]
В этом случае действуют правила соглашения, называемые правилами по умолчанию. Отсутствующие описатели в процессе трансляции автоматически приписываются. Если не указан описатель DECIMAL или BINARY, то приписывается описатель DECIMAL; если не указан описатель FIXED или FLOAT, то приписывается описатель FLOAT; если не заданы значения разрядности ( Р, Q) или ( Р), то значения устанавливаются равными некоторым стандартным значениям, определяемым разработчиками транслятора. [20]
В конструкции языка обычно предполагается применение определенного метода управления памятью, однако детали механизмов управления и их погружение в аппаратуру и программное обеспечение являются задачами разработчика транслятора. Например, конструкция Лиспа может подсказать в качестве основы управления памятью список свободного пространства и сбор мусора, но известно много различных методов сбора мусора. Разработчик транслятора должен выбрать или построить метод, наиболее подходящий для имеющейся аппаратуры и программного обеспечения. [21]
КОБОЛ ориентирован на решение экономических задач. Язык определяется как набор из ядра-и восьми функциональных модулей обработки, для каждого из которых определены различные уровни сложности. Такой подход к определению языка позволяет разработчикам трансляторов выбирать подмножества языка, соответствующие требованиям применения и возможностям оборудования, оставаясь в то же время в рамках стандарта. [22]
В ПЗ семантика языка утверждает, что объект вида протип. Как и в других ситуациях, в которых предписано копирование, следует помнить важное замечание в разд. Сообщения: Любой из этих процессов может быть заменен любым процессом, вызывающим тот же эффект. В частности, при манипулировании с подпрограммами разработчик транслятора обычно располагает другими средствами, вызывающими тот же эффект, что и копирование. То же самое относится ко многим другим ситуациям этого рода, особенно связанным с копированием. [23]
Обратим внимание на трудности работы с такой структурой программы, когда используются обычные подпрограммы. Программа естественно разбивается на две фазы: А и В. Структура сопрограмм была бы несколько удобнее, но на программиста легла бы ответственность за точное определение способа чередования фаз выполнения А и В. В данном случае преимущество структуры задач в том, что она освобождает программиста от этих проблем, предоставляя языковому процессору и операционной системе самим устанавливать наилучший способ чередования в выполнении двух задач. Структура задач также желательна с точки зрения разработчика транслятора, так как аппаратура часто обеспечивает параллельное выполнение процессов ввода-вывода; в этом случае структура задач позволяет процессору языка более эффективно использовать аппаратуру. [24]
Кроме того, в книге [91] не все ясно и однозначно определено, например вопросы эквивалентности типов. В результате между различными реализациями языка Паскаль имеются существенные различия даже в тех случаях, когда их разработчики имели самые лучшие намерения. Тем не менее представляется, что затруднительно определить степень совместимости реализации языка Паскаль для ЭВМ семейства CDC с другими реализациями языка Паскаль и, соответственно, степень легкости переноса программного обеспечения. Одна из причин этого - слишком малое время, прошедшее от момента появления большинства реализаций языка Паскаль ( за исключением его реализации для ЭВМ семейства CDC), и, соответственно, отсутствие опыта их использования. Ряд вопросов в книге [91] не определен, и их решение оставлено на усмотрение разработчиков трансляторов с языка Паскаль. [25]