К. Йенсен, Н. Вирт - Паскаль - Руководство для пользователя (1109480), страница 21
Текст из файла (страница 21)
Процедура или функция имеет фиксированное число параметров, каждый нз которых обозначается внутри процедуры илн функции с помощью имени, называемого формальным параметром. При активации процедуры или функции для каждого из параметров должна быть указана фактическая величина, на которую можно ссылаться изнутри процедуры или функции через соптветствующий формальный параметр. Эта величина называется фактическим параметром. Параметры бывают четырех видов: параметры-значения, параметры-переменные, параметры-процедуры и параметры-функции.
В первом случае фактический параметр — это выражение, которое вычисляется, а его значение присваивается формальному параметру; все это проделывается один раз перед началом каждой активации процедуры нли функции. Формальный параметр в этом случае представляет собой локальную переменную. В случае параметра-переменной фактический параметр обозначает некоторую переменную и формальный параметр во время всей активации процедуры или функции обозначает ту же переменную. В случае параметра-процедуры (процедурального) нли параметра-функции (функционального) фактический параметр— имя процедуры нлн функции.
Функции описываются аналогично процедурам, но функции дают еше результат, относящийся к типу, который должен быть задан в описании функции. По соглашению тип результата должен быть простым нли ссылочным. Функции можно употреблять как составные части в выражениях. Внутри опйсания функции необходимо избегать присваиваний нелокализованным переменным и других так называемых побочных эффектов.
3. НОТАЦИЯ И ТЕРМИНОЛОГИЯ Синтаксические конструкции обозначаются английскими словами (метаименами), напечатанными курсивом, и определяются в соответствии с Расширенными Бэкуса — Наура Формами 3. Нотация и терминояогия 555 (РБНФ) [13]. Каждое правило РБНФ определяет метаимя с помощью РБНФ-выражения, состоящего из одной или более альтернатив (фраз), разделенных вертикальной чертой (]) .
Фраза состоит из нуля или более элементов. Элемент — зто или некоторое метаимя, или некоторая буквальная комбинация символов, заключенная в кавычки («»), или другое РБНФ-выражение, заключенное с двух сторон в фигурные, квадратные или круглые скобки. Фигурные скобки ( ] указывают на повторение (нуль или более вхождений), квадратные скобки ( ] на допустимость (нуль или одно вхождение), а кругль|е скобки ( ) указывают на группирование (точно одно вхождение) выражений, в них заключенных.
В равд. 4 правила РБНФ описывают формирование из отдельных символов целых лексем; в лексему не должны входить дополнительные символы. В разд. б — 13 правила РБНФ определяют синтаксис программ в терминах лексем; лексемы могут разделяться (одна от другой) символами-разделителями (как это описано в равд'. 4). Термин «ошибка» (еггог) относится к действию или состоянию программы, нарушающим стандарт, и к таким, что любой конкретный процессор не всегда их может обнаружить.
Выражение «определяется при реализации» означает, что некоторые конструкции языка Паскаль в различных реализациях могут быть отличными одна от другой, причем в каждой из реализаций должно быть определено, как зта конструкция реализована. Выражение «зависит от реализации» означает, что некоторая конструкция в разных реализациях сделана по-разному, но при реализации не определяется, как зто сделано.
Расширение зто дополнительная конструкция или свойство, недоступная во всех реализациях, причем она не действует на конструкции стандарта Паскаля. Реализации часто поддерживают расширения в форме дополнительных предопределенных и предописанных констант, типов, переменных, процедур и функций.
Любая программа, соответствующая стандарту, не должна включать зависящие от реализации конструкции или какие-либо расширения. В любой же переносимой программе следует, кроме всего прочего, внимательно следить за употреблением конструкций, определяемых при реализации (иапример, множеством символов или диапазоном изменения целых значений). 4. ЛЕКСЕМЪ| И СИМВОЛЫ-РАЗДЕЛИТЕЛИ Любая программа выглядит как последовательность лексем, расположенных в соответствии с правилами и синтаксисом Паска- 156 Описание намни "61ч" ! "вой" ! "пВ" ! "1п" ! "ог" ! "ап6" ! "пос" ! "11" ! "Ьпеп" ! -е1зе" ! "сазе" ! "о1" ! "гереас"' ! "'опс11" ! "нп11е" ! "6о" ! "1ог" "Ьо" ! "косо" ! "6омпсо" ! "Ьеа1п" ! -еп6" "и)ЬЬ" ! попас ! "чаг ! "суре" ! "аггау" ! "гесог6"' ! "зес" ! "111е" ! "1опсс)оп" ! "ргосейиге"' ! "1аЬе1" ! "расйе6" ! "ргой ав" . Символы-слова В стандарте предусмотрены и такие альтернативные представления: Альтернативное представление л или в Основной символ Многие иа лексем строятся из букв и цифр.
Везде, за исключением евнутренности» строки символов, строчные буквы аквнваленты соответствующим прописным. Буква = "а" ! "Ь" ! "с" ! "6" ! "е" ! "1" ! "а" ! "Ь" ! "1" ! "1" ! "К"' ! "1" ! "а" ! "и" ! "о" ! 'р' ! "Ц" ! "г" ! "5" ! "Ь" ! "о" ! "ч" ! -н" ! "х" "у" ! "а" Цифра = "О" ! "1" ! "2" ! "3" ! "4" ! "5" ! "6" ! "7" ! "8" ! "9" Имена предназначены для обозначения констант, типов, переменных, процедур, функций и границ. Директивы же употребляются в описаниях процедур и функций.
ля. Соседние лексемы часто отделяются одна от другой для удобочитаемости символами-разделителями. Все лексемы делятся на специальные лексемы, имена, директивы, числа, метки и строки символов. Символы-разделители — это пробелы, примечания и концы строк (в текстовом представлении программ). Специальные-символы = "+" ! "-" ! """ ! 'У" ! — ! "<- !" " ! ->" ! "=" "(" ! ")" ! "1" ! ")" ! ":=" ! "." ! -..- ! ! "1" ! Символы-слова. 4. 77ексемтя и символььраэделители 157 Имя = Буква [ Буква [Цифра ). Директива = Букви [ Буква [ Цифра ).
Написание символов-слов, имен или директив — это вся последовательность, состоящая из входящих в нее букв и цифр. Ни одно имя или директива не могут иметь написание, совпадающее с написанием символов-слов. Примерьс имен (!несть различных написаний): Р)гэСР!асе огб РгосебпгеОгГопсСгппОес!згаС)оп Е1СгаьеСЬ доьп РгосебпгеОгГппсьгзпнеабгпх С помощью описания или определения вводится написание конкретного 'имени, и ему приписывается определенный смысл. Смысл, связанный с этим фиксированным написанием, остается неизменным внутри некоторой части текста программы, называемой областью действия (зсоре) данного описания или определения [см. равд. 10).
Для чисел используется традиционная десятичная система записи. Целые и вещественные числа без знака — константы, относящиеся соответственно к предопределенным типам 1и!епег и Кеа! [см. равд. 6.!.2). Буква «е», предшествующая в вещественных числах без знака порядку, означает «умножить нн 10 в степени» Максимальное значение целого числа без знака может быть задано с помощью значения предопределенной константы Махш1, определенной прн реализации.
Число без знака = Целое беэ знака [Вещественное без эпика. Целое без знака = Последовительность цифр. Вещественное беэ знака = Целое без знака "." Последовательность цифр ["е" Порядок! 1 Последовательность цифр "е" Порядок. Порядок [Знзк) Целое без эпика.
Знак = "+") "— ' . Последовательность цифр = цифра [Цифра). Примеры целых без знака: 1 !00 00100 Примеры вещественных без знака: 0.1 О.! еО 87.35е + 8 !Р2 Числовой ввод из текстовых файлов может воспринимать и числа со знаком [см. равд. !2).. Число со знаком = Целое со знаком [Вещественное со знаком. Целое со знаком = [Знак! Целое беэ опека. Вещественное со знаком = [Знак) Вещественное без знака 188 Описание левиса .Строка символов — это заключенная в апострофы последовательность элементов строки. Любой элемент строки представляет определяемое при реализации значение предопределенного типа Сваг; элемент состоит либо из двух идущих подряд апострофов, либо из любого другого, определяемого реализацией символа.
Два разных символа, фигурирующие в качестве элементов строки, должны обозначать различные значения типа Сваг. Элемент строки, состоящий из двух апострофов, обозначает символ апдстрофа. Строка символов = «Ъ Элемент строки ( Элемент строки ) «пм Элемент строки = «'*»)Любой символ кроме апострофа. Строка символов, если она содержит один элемент строки, относится к константам типа Сваг, в противном же случае к константам строкового типа (см.
равд. 6.2.1), имеющим столько компонент, сколько было в строке элементов. Замечание. Любая строка символов должна записываться точно в одной строке текста программы. Примеры строк символов: А' 'Раеса)' 'гп1е ж а сьагассег етг1пх' Между любыми двумя соседними лексемами и перед первой лексемой программы могут помещаться символы-разделители. Между двумя соседними именами, директивами, служебными словами (символами-словами), метками или числами должен находиться по крайней мере один символ-разделитель. Разделитель— это пробел, конец строки текста программы или примечание.
Смысл любой программы от замены любого примечания на пробел не изт меняется. примечание = ("1" ( "(*") (Элемент примечания) ( ) (») ). Элемент примечания — это либо конец строки, либо любая последовательность символов, не содержащая ")" или "в) Замечание. Допускаются примечания (... в) и (н ... ). Примечание ( (*) эквивалентно примечанию ( ( ).