К. Йенсен, Н. Вирт - Паскаль - Руководство для пользователя (1109480), страница 33
Текст из файла (страница 33)
Таблииьг 221 З1п Зог Вега Зисс ТехС Тгое Тгепс ОпрасК Иггйе Иг1Се1п Уур Паскаль. Руководство для пользователя Альтернативное представление: (. Еог .) Еог Т 6,рг Еог Т Дир Еагиагд саве сапас бгу да даипйо е1ае ЕапсСТап райю 11 Еп 1аЬе1 аоб аг раскед ргоседаге ргаагаа гесогд гереай Фуре а по 11 нег нп11е н1са ПРИЛОЖЕНИЕ 4 СИНТАКСИС Метасимаол Значение равно по определению или (альтериатиаа! конец прааила О или ! ахождеиие Х О нлн более вхождений гртппироаание: или Х, или и терминальный симиол Хть нетерминатьный снмаол с именем й(еин(лл (Х( (Х! (Х(У) "Хус" Метинам Правила РБНФ можно, например, использовать для определения их собственного синтаксиса.
Синтаксис = (Правило). Правило = Нетерминал "=-'* Выражение' "." Выра»«ение = Терм ( *'(" Терм). Терм = Фактор (Фактор). Фактор = Нетерминал'! Терминал( "("Выражение" ) ** ! " ('Выразсение") " ("("Вырадкение") ". Терминал = *. "" Символ (Символ( '"'"' Нетерминал = Буква (Буква(Цифра). Описание синтаксиса языка программирования с помо!пью Расширенных Бэкуса — Наура Форм (РБНФ) состоит из набора правил, иногда называемых и «продукциями». определяющими процесс образования предложений в языке. Множество таких правил называют «грамматикой». Каждое правило состоит из нетерминального символа и РБНФ-выражения, разделенных знаком равенства, в конце правила ставится точка.
Нетерминальный символ представляет собой некоторое «метаимя» (синтаксическую константу„обозначаемую с помощью английского слова), а РБНФ- выражение определение этого метаимени. РБНФ-выражение включает нуль или более терминальных символов, нетерминальные символы и другие метасимволы, приводимые в нижележащей таблице. 224 Паскаль. Руководство для пользователя Замечания. 1. Любой терминальный символ (буквальиое его изображение литерал) всегда заключается в двойные кавычки.
Если же заключаются и сами двойные кавычки, то их записывают дважды. Таким образом, в следующем далее описании Паскаля с помощью РБНФ "(" и "]" в программе на Паскале представляют левую и правую квадратные скобки, а ( и ] — метасимволы из РБНФ-выражений, указывающие на нуль или одно вхождение того, что в иих заключено. 2. В каждом синтаксисе есть начальный символ (метаимя), из которого выводятся все предложения языка. В синтаксисе для Паскаля начальный символ — Программа.
а СИНТАКСИС ЯЗЫКА, ЗАПИСАННЫИ С ПОМОЩЬЮ ПРАВИЛ РБНФ 1. Программа = Заголовок программы *';" Блок ".". 2. Заголовок программы = "ргоигагп" Имя (Список параметров программы] . 3. Список параметров программы = "("Список имен")". 4. Блок — Раздел описания меток Раздел определения констант Раздел определения типов Раздел описания переменных Раздел описания процедур и функций Раздел операторов 5.
Раздел описания меток — Г'!аЬеГ' Последовательность цифр ('*," Последовательность цифр]";"]. 6. Раздел определения констант = ]"сопв1" Определение константы ";" (Определение константы ";"]]. 7. Раздел определения типов = Г'1уре" Определение типа ( Определение типа ";"] ] .
8. Раздел описания переменных = ["чаг" 'Описание переменной (Описание переменной '; ]]. 9. Раздел описания процедур и функций ='((Опкисание процедуры( Описание функции) ";"]. !О. Раздел операторов = Составной оператор. 11. Определение константы = Имя "=" Константа. 12. Определение типа = Имя '*=" Тип. 13. Описание переменной = Список имен ":" Тип. 14. Описание процедурьс = Заголовок процедуры ";" Блок] Заголовок процедуры ';** Директива( Идентификация процедуры ";" Блок. л2б Паскаль. Рукоаоостао для аольаоаателя 34.
Сложный оператор = Составной оператор [Выбирающий оператор [Циклический оператор [Оператор присоединения. 35. Выбирающий оператор = Условный оператор [Оператор варианта. 36. Циклический оператор = Цикл с предусловием[ Цикл с постусловием [Цикл с шагом. 37. Пустой оператор =. 38. Оператор присваивания = (Переменная [Имя функции) "=*' Выражение. 39. Оператор процедуры = Имя процедуры [Список фактических параметров [ Список параметров вывода) .
40. Оператор перехода = *'до1о" Метка. 41. Условный оператор = "1Г' Логическое выражение "15еп" Оператор [ов)зе" Оператор) . 42. Оператор варианта = Гсазео Индекс варианта "оГ' Вариант [";" Вариант) [";") "епсГ*. 43. Цикл с постусловием = огереаГ Последовательность операторов "пп11Г' Логическое выражение. 44. Цикл с предусловием = "ю51!е" Логическое выражение "до" Оператор. 45. Цикл с шагом = '*1ог" Параметр цикла ":=" Начальное значение ("1о" [ "йоип1о") Конечное значение **во" Оператор.
46. Оператор присоединения = "ю115" Список переменных-записей "до" Оператор. 47. Список переменных-записей = Переменная-запись [*'," Переменная-запись). 48. Индекс варианта = Ординольное выражение. 49. Вариант = Константа ["," Константа) ":" Оператор. 50. Параметр цикла = Имя переменной. 51. Начальное значение = Ординальное выражение. 52. Конечное значение = Ординальное выражение, 53. Тип = Простой тип [Составной тип [Ссылочнаш" тип.
54. Простой тип = Ординальный тип[Имя вещественного типа. 55. Составной тип = ["распрей"][ Неупакованный составной тип[ Имя составного типа. 56. Ссылочный тип = "1*' Тип области[Имя ссылочного типа. 57. Ординальный тип = Перечисляемый тип[Диапазонный тип[ Имя ординального типа. 58. Неупакованный составной тип = Массивовый тип [Записной тип [Множественный тип [Файловый тип. 59.
Тип области = Имя типа. 60. Перечисляемый тип = "("Список имен" )'*. Прилоясение 4. Синтаксис 227 61. Диапазонный тип = Константа ".." Константа. 62. Массивовый тип = "аггау" "("Тип индекса ["," Тип индекса) ")" "оГ' Тип компоненты. 63. Записной тип = "гесопГ' Список полей "епй". 64. Множественный тип = "зеГ* "оГ' Базовый тип. 65. Файловьсй тип = "11!е" "оГ' Тип компоненты. 66, Тип индекса = Ординальньсй тип. 67.
Тип компоненты = Тип. 68. Базовый тип = Ординальный тип. 69. Тип результата = Имя ординального типа ) Имя вещественного типа ) Имя ссьиочного типа. 70. Список полей = ((Фиксированная часть (";" Вариантная часть) ) Вариантная часть) (";"] ) . 71. Фиксированная часть = Секция записи (";" Секиия записи). 72. Вариантная часть = "сазе" Селектор вариант оГ' Вариант записи (";" Вариант записи).
73. Секция записи = Список имен ":" Тип. 74. Селектор варианта = (Поле признака ":**) Тип признака. 75. Вариант записи — Константа ("," Константа) ":" "("Список полей**) ". 76. Тип признака = Имя. 77. Поле признака = Имя. 78. Константа = (Знак) (Число без знака ) Имя константьс) ) Строка символов. 79. Выражение = Простое выражение (Оператор отношения Простое выражение) . 80. Простое вьсражение = (Знак) Терм (Аддитивная операция Терм) . 81. Терм = Фактор (Мультипликативная операция Фактор).
82. Фактор = Константа без знака) Имя границы)Переменная) Конструктор множества ) Обозначение функи,ии ) "поГ Фактор) *'("Вьсражение") '*. 83. Операция отношения= "=*') "()") "~") "( ='*)"-»") "> =" ('*1п". 84. Аддитивная операция = "+" ) "—" ("ог"'. 85. Мультшсликативная операция=". ") "/") "й)ч") "гпод") '*апгГ'. 86.
Константа без знака = Число без знака)Строка символов) Имя константы ) "псГ'. 87. Обозначение функции = Имя функции (Список фактических параметров) . 88. Переменная = Полная переменная ) Переменния-компонента) Идентифицированная переменная ) Буферная переменная. 89. Полная переменния = Имя переменной. лег Паскаль. Руководство для аольвователя 90, Переменная-компонента = Индексированная переменния [ Обозначение поля. 91. Идентифицированная переменная = Ссылочная переменная "[". 92. Буферная переменная = Переменная-файл "[*'. 93. Индексированная переменная = Переменная-массив "["Индекс ["," Индекс] "]". 94. Обозначение поля = [Переменния-запись "."] Имя поля.
95. Конструктор множества = "['*[Описание элемента ['*," Описание элемента) ] '*] ". 96. Описание элемента= Ординальное выражение [".." Ординальное выражение] . 97. Список фактических параметров = "[" Фактический. параметр ["," Фактический параметр) ") 98. Фактический параметр = Выражение[Переменная [Имя процедуры [Имя функции. 99. Список параметров вывода = "[ "Переменния-файл [ Параметр вывода) [" Параметр вывода ]")". 100. Параметр вывода = Выражение [":" Целое выражение [":*' Целое выражение] ].