
SPO-5 Описание грамматики языков программирования.pptx
- Количество слайдов: 21
Описание грамматик языков программирования
Описание грамматик языков программирования Описание языка программирования может быть записано на некотором метаязыке. Для описания синтаксиса используются формальные нотации, эквивалентные порождающим грамматикам Н. Хомского. 2
Описание грамматик языков программирования Основные соглашения нотаций касаются: – способов выделения терминальных и нетерминальных символов; – способов сокращения количества правил за счет их объединения (альтернативные варианты, необязательные или повторяющиеся символы); и т. п. 3
Описание грамматик языков программирования Форма Бэкуса-Науэра или Бэкуса нормальная форма (БНФ) впервые была применена при формальном описании языка Алгол-60 Метасимволы: <> – служат для выделения нетерминальных символов (понятий языка); | – «или» – разделяет альтернативные правые части правил; : : = – «определение» – заменяет стрелку при описании порождающих правил. 4
Описание грамматик языков программирования Терминальные символы записываются как есть, никаких специальных способов их выделения не предусмотрено. Для выражения повторения используется рекурсия, т. е. определение нетерминального символа через самого себя. 5
Описание грамматик языков программирования Пример 1. Число <знаковое число> : : = <беззнаковое число> | +<беззнаковое число> | –<беззнаковое число> : : = <цифра> | <беззнаковое число><цифра> : : = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 6
Описание грамматик языков программирования Пример 2. Арифметическое выражение <простое арифметическое выражение> : : = <терм> | <знак операции типа сложения> <терм> | <простое арифметическое выражение> <знак операции типа сложения> <терм> <знак операции типа сложения> : : = + | – 7
Описание грамматик языков программирования Расширенная форма Бэкуса-Науэра (РБНФ) использовалась Н. Виртом при описании языков программирования Модула-2 и Оберон Метасимволы: | – разделяет альтернативные варианты; [ ] – обозначают необязательность выражения; { } – обозначают повторение выражения, в т. ч. и 0 раз; = – определение; . – конец правила 8
Описание грамматик языков программирования Нетерминальные символы начинаются с заглавной буквы. Терминальные символы • или начинаются с малой буквы, • или записываются целиком заглавными буквами, • или заключаются в кавычки (одинарные или двойные). 9
Описание грамматик языков программирования Пример 1. Идентифкатор Имя = Буква { Буква | Цифра }. 10
Описание грамматик языков программирования Пример 2. Объявление массива Array-type = 'array' '[' Index-type { ', ' Index-type } ']' 'of' Component-type. Index-type = Ordinal-type. Component-type = Type-denoter. 11
Описание грамматик языков программирования Пример 3. РБНФ Синтаксис Правило Выражение Вариант Элемент Выражение Цепочка = { Правило } = Имя "=" Выражение ". ". = Вариант { "|" Вариант }. = Элемент { Элемент }. = Имя | Цепочка | "(" Выражение ")" | "[" "]" | "{" Выражение "}". = "'" { символ } "'" | '"' { символ } '"' 12
Описание грамматик языков программирования Описание синтаксиса языков семейства С (С++, C#, …) использовалось в книге Б. Керниган, Д. Ритчи «Язык программирования С» • Нетерминалы записываются курсивом. • Терминалы записываются прямым шрифтом. • Левая часть правила записывается отдельной строкой с отступом влево. • Альтернативные части правил выписываются в столбик по одному в строке или помечаются словами “one of”. • Необязательные части обозначаются нижним индексом “opt”. 13
Описание грамматик языков программирования Средства для обозначения повторений отсутствуют, поэтому в описаниях часто используется рекурсия. 14
Описание грамматик языков программирования Пример 1. Составной оператор составной оператор { список описанийopt список операторовopt } список операторов оператор список операторов 15
Описание грамматик языков программирования Пример 2. Элементарное выражение primary-expression: identifier constant string-literal ( expression ) 16
Описание грамматик языков программирования Пример 3. Спецсимволы в С/С++ simple-escape-sequence: one of ' " ? \ a b f n r t v octal-escape-sequence: octal-digit octal-digit hexadecimal-escape-sequence: x hexadecimal-digit hexadecimal-escape-sequence hexadecimal-digit 17
Описание грамматик языков программирования Синтаксические диаграммы использовались Н. Виртом при описании языка программирования Паскаль • Для каждого нетерминала грамматики строится отдельная диаграмма, обозначенная названием этого нетерминала. • Нетерминалы из правых частей правил изображаются на диаграммах прямоугольниками, внутри которых записывается название нетерминала. Терминальные символы изображаются в кружках (или овалах). 18
Описание грамматик языков программирования • Для каждой правой части правила строится ветвь, представляющая собой последовательно соединенные прямоугольники и круги (овалы), следующие в том же порядке слева направо, что и соответствующие нетерминалы и терминалы правой части правила. • Ветви, соответствующие альтернативным правым частям правил для одного нетерминала, соединяются параллельно и образуют диаграмму для данного нетерминала. 19
Описание грамматик языков программирования Пример 1. Синтаксическая диаграмма слагаемого (язык Паскаль) 20
Описание грамматик языков программирования Пример 2. Структура команды языка Ассемблера 21