Cтраница 3
Комментарии к процедурам языка ассемблера обозначаются точкой с запятой и могут быть продолжены до конца строки. Операции языка проектирования для нашего примера показаны на рис. 6.5 как комментарии. [31]
Конечной целью языка программирования, естественно, является выполнение операций над некоторым набором данных. Мощность операций языка положительно влияет на надежность программирования, сокращая объем программы, которую должен написать программист. PL / I позволяет выполнять операции над целыми массивами или структурами или над подмассивами ( например, отдельной строкой или столбцом), что дает программисту возможность одним оператором сделать то, что могло бы потребовать целого цикла в программе на Фортране. Мощь АПЛ во многом объясняется тем, что его операции единообразно применяются к векторам и массивам так же, как и к скалярам. [32]
Авторами был разработан эмулятор просмотра для автоматизации этого процесса. Эмулятор просматривает операции языка проектирования и выводит их на дисплей одну за другой, что позволяет всем участникам просмотра легко наблюдать за последовательностью операций. Проектировщику остается только указать ветвь, по которой должна идти проверка, а также указать, выполняются или нет условия, определяемые в конструкции условного цикла. [33]
Прежде всего установим приоритеты всех операций, имеющихся во входных языках. В табл. 4.2 приведены приоритеты всех операций языков ПЛ / 1 и Фортран. Здесь не учитывается тот факт, что в языке ПЛ / 1 наиболее приоритетные операции выполняются справа налево. [34]
Операции PL / M, соответствующие операциям языка проектирования, могут располагаться на следующей строке после комментария. Реализация программы на языке PL / M вместе с комментариями на языке проектирования создает хорошую основу для документирования программ, которые становятся легкочитаемыми и удобными в работе. [35]
Это операция, единственной целью которой является занесение значения, стоящего слева от нее, в стек для дальнейших манипуляций с ним. Все остальные операции не являются напрямую операциями языка Esse, а либо операции языка-родителя высокого уровня, либо низкоуровневые команды на ассемблере, либо функции операционной системы. Результатом работы интерпретатора является промежуточный код виртуальной машины, которая может быть реализована на любом языке и адаптирована под конкретную операционную систему и платформу, либо код на языке-родителе, тогда виртуальной машиной будет являться компилятор или интерпретатор языка-родителя. [36]
Поведенческое представление дискретных устройств задается в форме арифметических и логических преобразований над исходными и промежуточными данными. Состав и обозначения разрешенных операций соответствует составу операций языка С и его обозначениям. Обеспечивается возможность представления взаимодействующих подсистем, для чего в языке определены как параллельные, так и последовательные операторы и процедуры. Параллельные операторы отображают поведение цепей без памяти, а при моделировании исполняются при изменении любого операнда в правой части оператора. Порядок записи параллельных операторов не имеет значения. [37]
Одним из выходов, создаваемых как компилятором, так и ассемблером, является файл, содержащий команды машинного языка для транслируемого модуля. Когда они выполняются, это означает выполнение операций языка программирования, которые содержались в исходном тексте на языке программирования. Однако прежде, чем команды машинного языка могут быть выполнены, они должны быть размещены в памяти микрокомпьютера. Поскольку каждая процедура или модуль транслируются по отдельности, то во время трансляции неизвестно, где будут расположены в ПАМЯТИ команды других модулей. Возникает вопрос, как собрать оттранслированные по отдельности программные модули в работающую систему. Чтобы ответить на него, рассмотрим концепцию перемещаемости, которая приведет нас к понятиям редактирования связей и перемещающей загрузки. [38]
Когда модуль или процедура программы на языке проектирования закончены, они должны быть конвертированы в программу на языке программирования. Как указывалось ранее, это означает преобразование каждой операции языка проектирования в комментарий и вставление соответствующих операций языка программирования в текст. Преобразование стандартных конструкций языка проектирования в комментарии, раздвигание этих комментариев для того, чтобы было можно вставить текст на языке программирования, и вставка конструкций языка программирования могут быть выполнены автоматически. [39]
При использовании языка проектирования для написания программ и конвертирования их в программы на языке программирования обычно бывает достаточно ручки и бумаги. Однако уже при использовании автоматизированных средств для трансляции операций языка программирования в команды машинного языка первые должны иметь машиночитаемый формат. Для хранения информации в такой форме могут служить перфоленты, перфокарты или устройства магнитной памяти. Многие системы используют для этой цели устройства памяти на магнитных дисках. Мы будет предполагать, что вся информация, которая создается вновь или обрабатывается в течение цикла проектирования системы, хранится на магнитных дисках. Средства для идентификации хранимой информации и для доступа к ней предусматриваются операционной системой. [40]
Тип данных определяется с учетом множества значений переменных и множества операций языка, которые могут быть применены к значениям данного типа. При описании переменной тип данных задается непосредственно либо на него ссылаются с помощью имени типа. [41]
Заметим, что реляционные СУБД могут сочетать возможности реляционной обработки любым удобным способом. Например, в системе INGRES фирмы Relational Technology, Inc, операция RETREIVE языка запросов QUEL [29] содержит все три оператора ( выбора ( select), проекции ( project) и соединения join) в одном запросе, так что можно получить тот же самый результат, что и при применении каждого из этих операторов по отдельности или любого их сочетания. [42]
Большинство изученных в этой главе механизмов управления последовательностью действий являются механизмами общего назначения в том смысле, что они имеются во многих языках программирования и не зависят от структур данных или операций, используемых в этих языках. Вместе с тем было бы неправильно при изучении механизмов управления последовательностью действий не рассмотреть их тесную взаимосвязь со структурами данных и операциями языка. В то время как разнообразие механизмов управления последовательностью действий может оказывать влияние на общность языка, одним из важнейших факторов, определяющих естественность языка программирования, является возможность выбора механизмов управления последовательностью действий, соответствующих структурам данных и операциям, имеющимся в языке. Например, исключение циклических инструкций из Алгола и Фортрана безнадежно испортило бы эти языки, тогда как АПЛ вполне обходится без циклических инструкций. Аналогично, нельзя представить себе Лисп без рекурсивных подпрограмм, однако в Фортране рекурсия не допускается, а в Алголе рекурсия, хотя и допускается, играет незначительную роль. Чтобы объяснить это, нам нужно учесть то, что циклы удобны для поэлементной обработки массивов, а рекурсия - для обработки списочных структур. [43]
Компилятор транслирует модули и процедуры, написанные на языке высокого уровня, например PL / M, в команды машинного языка. Функциональные связи между компилятором и его входами и выходами показаны на рис. 7.4. Вход в компилятор состоит из текстового файла, содержащего операции языка программирования высокого уровня, конвертированные из версии программного обеспечения на языке проектирования. Компилятор считывает входной текст из файла построчно. Если строка содержит комментарий, то она игнорируется. Если строка содержит текст, не являющийся комментарием, компилятор проверяет текст на синтаксические ошибки. Если синтаксических ошибок не обнаружено, текст транслируется в одну или несколько команд машинного языка. Эти команды хранятся в файле для последующего использования редактором связей. Компилятор передает также каждую строку входного текста печатающему устройству для создания входного листинга. [44]
![]() |
Процедура СТИРАНИЯ ВХОДНОЙ ЗАПИСИ. [45] |