Ada (798525), страница 2
Текст из файла (страница 2)
Примеры:3.14100.00.0Символьные литералы обозначают одиночные символы, и для их обозначенияиспользуются одинарные кавычки. Например:'a''b'Примечание:В отличие от языка Паскаль, в Аде нельзя производить присваиваниесимвольного литерала строковой переменной (подробности о работе состроками в Аде мы пока отложим на потом).Строковые литералы предназначены для обозначения строковых значений, и для ихобозначения используются двойные кавычки.
Например:"это строковый литерал""a"-- это тоже строковый литерал, хотя и односимвольныйПримечание:Строковый литерал не может непосредственно содержать символ табуляции,хотя значение строковой переменной или константы - может. Это достигаетсяпутем конкатенации строки и символа, или вставкой символа в строку.1.4.4 Зарезервированные словаНекоторые слова, такие как with, procedure, is, begin, end и т.д., являютсячастью самого языка программирования. Такие слова называют зарезервированными(или ключевыми) и они не могут быть использованы в программе в качестве именидентификаторов. Полный список зарезервированных слов Ады приводится ниже:abortelsenewreturnabselsif* abstractnotendreverseacceptnullentryselectaccessexception* aliasedexitallseparateofsubtypeorandforarrayfunctionothers* taggedouttaskatterminategenericbegingotobodyconstantthenpragmatypeprivateifcasepackageinprocedure* protectedis* untiluseraisedeclarerangedelaylimiteddeltaloopdigitsdorecordrecordwhenwhilewhilerenamesmod* requeuexorПримечание:Зарезервированные слова помеченные звездочкой введены стандартом Ada95.1.5 Методы Ады: подпрограммы, операции и знаки операцийМетодами Ады являются подпрограммы (процедуры и функции), а также операции изнаки операций (возможно более корректно будет звучать: с помощью подпрограммосуществляется реализация действий, выполняемых операциями и знакамиопераций).
Необходимо отметить, что стандарт Ады строго различает понятия знаковопераций (operators) и операций (operations).Знаки операций представляются следующими символами (или комбинациямисимволов): "=", "/=", "<", ">", "<=", ">=", "&", "+", "-", "/", "*". Другие знакиопераций выражаются зарезервированными словами: "and", "or", "xor", "not","abs", "rem", "mod", - или могут состоят из нескольких зарезервированных слов:"and then", "or else".
Ада позволяет осуществлять программисту совмещение(overloading) знаков операций (в современной литературе по Си++ это частоназывается как "перегрузка операторов").В общем случае, совмещением (overloading) называют механизм, которыйпозволяет различным сущностям использовать одинаковые имена.Использование "use type" делает знаки операций именованных типов локальновидимыми. Кроме того, их можно сделать локально видимыми используя локальноепереименование.Операции включают в себя присваивание, проверку принадлежности диапазону илюбые другие именованные операции.
Операции, также как и знаки операций,допускают совмещение.Следует заметить, что Ада накладывает некоторые ограничения на использованиесовмещений: совмещения не допускаются для операций присваивания и проверкипринадлежности диапазону, а также для знаков операций "and then" и "or else".Операция присваивания обозначается комбинацией символов ":=". Онапредопределена для всех нелимитированных типов. Операция присваивания неможет быть совмещена или переименована.
Присваивание запрещено длялимитированных типов. Необходимо подчеркнуть, что операция присваивания в Аде,в отличие от языков C/C++, не возвращает значение и не обладает побочнымиэффектами.Еще одной разновидностью операций является операция проверки принадлежностидиапазону, которая обозначается с помощью зарезервированного слова "in". Длявыполнения проверки на не принадлежность "in" может комбинироваться с "not" "not in".
Проверка на принадлежность диапазону разрешена для всех типов Ады,включая лимитированные.Другие операции могут быть описаны программистом. Как правило, описания такихопераций выполняются в спецификации пакета, а реализация операций выполняетсяс помощью соответствующих подпрограмм.1.6 Инструкции, выражения и элаборацияОчевидно, что исполнение инструкций осуществляется во время выполненияпрограммы с целью выполнить какие-либо действия. Также, во время выполненияпрограммы осуществляются вычисления различных выражений для получениязначений каких-либо типов. Кроме того, во время выполнения программыпроисходит вычисление различных имен, которые указывают на соответствующиеобъекты (содержащие какие-либо значения) или другие сущности (такие какподпрограммы и типы).Некоторые конструкции языка содержат описательные части, сопровождаемыепоследовательностями инструкций.
Например, тело процедуры может иметьследующий вид:procedure P( ... ) isI: Integer := 1; -- описательная часть...begin...-- последовательность инструкцийI := I * 2;...end P;Перед выполнением тела процедуры происходит элаборация (elaboration) всехописаний, которые указаны в описательной части. Последовательность элаборацииописаний определяется порядком их следования в описательной части. Эффект отэлаборации описаний заключается в создании сущностей, определенных в описаниях,и в выполнении прочих действий, которые специфичны для описаний.
Например,элаборация описания переменной может осуществить инициализацию этойпеременной значением, которое определяется результатом вычисления какого-либовыражения. Достаточно часто значения подобных выражений могут быть вычисленыв процессе компиляции программы.После завершения элаборации, осуществляется исполнение последовательностиинструкций, в порядке их следования (за исключением случаев, когда осуществляетсяпередача управления в какое-либо другое место, отличное от последующейинструкции).
Инструкция присваивания позволяет заменить значение переменнойрезультатом вычисления выражения того же самого типа. Обычно, присваиваниеосуществляется простым побитовым копированием значения, которое получено врезультате вычисления выражения. Однако, в случае нелимитированныхконтролируемых типов, после осуществления побитового копирования, пользователь(при необходимости) может определить дополнительную последовательностьдействий. Инструкции case и if позволяют осуществлять выбор выполненияопределенной последовательности инструкций, полагаясь на результат вычислениякакого-нибудь выражения.
Инструкция loop позволяет повторять выполнениепоследовательности каких-либо инструкций, согласно выбранной схемы итерации,или до обнаружения инструкции exit. Инструкция goto осуществляет передачууправления в место отмеченное соответствующей меткой.Выражения могут быть использованы в различном контексте, как в описаниях, так ив инструкциях. Используемые в языке Ада выражения, во многом подобнывыражениям, которые используются в большинстве современных языковпрограммирования.
Они могут содержать обращения к переменным, константам илитералам, кроме того они могут использовать любые операции, которые возвращаютзначения. Результатом вычисления любого выражения является значение. Каждоевыражение имеет определенный тип, который известен на этапе компиляции.Во многих случаях результаты вычисления выражений и ограничения подтиповопределяются статически (существует возможность отключения некоторыхдинамических проверок ограничений подтипов с помощью использованиясоответствующих опций компилятора). Более того, достаточно часто компилятор Адытребует чтобы вычисление некоторых выражений и подтипов осуществлялось наэтапе компиляции программы.
Например, в общем случае вся информация обописании известна во время компиляции, следовательно, элаборация во времявыполнения программы не потребует выполнения какого-либо машинного кода. Языкопределяет механизмы согласно которых Ада-компиляторы могут осуществлятьпредварительную элаборацию некоторых модулей, то есть, реальные действия,которые необходимы для осуществления элаборации, выполняются однократно, наэтапе компиляции программы, вместо того, чтобы выполнять их при каждом запускепрограммы.1.7 Директивы компилятораБывают случаи, когда в исходном тексте необходимо указывать какую-либодополнительную информацию, которая предназначена сугубо для компилятора.Например, такая информация может предоставлять компилятору дополнительныесведения о режимах трансляции программного модуля, который компилируется втекущий момент времени (оптимизация генерируемого двоичного кода, вставкаотладочного кода и т.д.) или управлять распечаткой листинга трансляции.Для Ады, как и для многих других современных языков и сред программирования,такими средствами передачи дополнительной информации компилятору являютсядирективы компилятора.
При указании директивы компилятору Ада используетзарезервированное слово pragma. Общий вид указания директивы компиляторуследующий:pragma < имя_директивы > ( < параметры_директивы > );Стандарт языка Ада определяет 39 директив, список которых представлен вприложении L (Annex L) руководства по языку программирования Ада (RM-95).Кроме того, конкретная реализация компилятора может обеспечиватьдополнительные директивы компилятора которые, как правило, описываются всопроводительной документации компилятора.Выражаясь не строго, можно заметить, что директивы компилятора не изменяютобщий смысл программы.2.
Скалярные типы данных языка Ада.К скалярным типам относятся типы данных которые определяют соответствующиеупорядоченные множества значений. Эта глава описывает скалярные типы данных Ады, а такжеатрибуты и операции допустимые для этих типов.Предопределенный пакет Standard содержит описания стандартных типов, таких как Integer,Float, Boolean, Character и Wide_Character, а также определяет операции, которыедопускается производить над этими типами.Следующие знаки операций допустимы для всех скалярных типов:=, /=<, <=, >, >=in, not inпроверка на равенство/не равенствоменьше, меньше или равно, больше, больше или равнопроверка принадлежности к диапазонуПеред тем как приступить к непосредственному детальному обсуждению скалярных типов Ады,необходимо сделать некоторое общее введение в систему типов языка Ада2.1 Введение в систему типов языка АдаДанные - это то, что обрабатывает программа.
Практически, любой современный языкпрограммирования определяет свои соглашения и механизмы для разделения данных на разныетипы. Известно, что Ада - это язык со строгой типизацией. И хотя это не единственное свойствоАды, но, пожалуй, это свойство наиболее широко известно.Понятие типа данных Ады подразумевает, что:1. каждый тип данных имеет свое имя2.