Скачать презентацию Описание грамматик языков программирования Описание грамматик языков Скачать презентацию Описание грамматик языков программирования Описание грамматик языков

SPO-5 Описание грамматики языков программирования.pptx

  • Количество слайдов: 21

Описание грамматик языков программирования Описание грамматик языков программирования

Описание грамматик языков программирования Описание языка программирования может быть записано на некотором метаязыке. Для Описание грамматик языков программирования Описание языка программирования может быть записано на некотором метаязыке. Для описания синтаксиса используются формальные нотации, эквивалентные порождающим грамматикам Н. Хомского. 2

Описание грамматик языков программирования Основные соглашения нотаций касаются: – способов выделения терминальных и нетерминальных Описание грамматик языков программирования Основные соглашения нотаций касаются: – способов выделения терминальных и нетерминальных символов; – способов сокращения количества правил за счет их объединения (альтернативные варианты, необязательные или повторяющиеся символы); и т. п. 3

Описание грамматик языков программирования Форма Бэкуса-Науэра или Бэкуса нормальная форма (БНФ) впервые была применена Описание грамматик языков программирования Форма Бэкуса-Науэра или Бэкуса нормальная форма (БНФ) впервые была применена при формальном описании языка Алгол-60 Метасимволы: <> – служат для выделения нетерминальных символов (понятий языка); | – «или» – разделяет альтернативные правые части правил; : : = – «определение» – заменяет стрелку при описании порождающих правил. 4

Описание грамматик языков программирования Терминальные символы записываются как есть, никаких специальных способов их выделения Описание грамматик языков программирования Терминальные символы записываются как есть, никаких специальных способов их выделения не предусмотрено. Для выражения повторения используется рекурсия, т. е. определение нетерминального символа через самого себя. 5

Описание грамматик языков программирования Пример 1. Число <знаковое число> : : = <беззнаковое число> Описание грамматик языков программирования Пример 1. Число <знаковое число> : : = <беззнаковое число> | +<беззнаковое число> | –<беззнаковое число> : : = <цифра> | <беззнаковое число><цифра> : : = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 6

Описание грамматик языков программирования Пример 2. Арифметическое выражение <простое арифметическое выражение> : : = Описание грамматик языков программирования Пример 2. Арифметическое выражение <простое арифметическое выражение> : : = <терм> | <знак операции типа сложения> <терм> | <простое арифметическое выражение> <знак операции типа сложения> <терм> <знак операции типа сложения> : : = + | – 7

Описание грамматик языков программирования Расширенная форма Бэкуса-Науэра (РБНФ) использовалась Н. Виртом при описании языков Описание грамматик языков программирования Расширенная форма Бэкуса-Науэра (РБНФ) использовалась Н. Виртом при описании языков программирования Модула-2 и Оберон Метасимволы: | – разделяет альтернативные варианты; [ ] – обозначают необязательность выражения; { } – обозначают повторение выражения, в т. ч. и 0 раз; = – определение; . – конец правила 8

Описание грамматик языков программирования Нетерминальные символы начинаются с заглавной буквы. Терминальные символы • или Описание грамматик языков программирования Нетерминальные символы начинаются с заглавной буквы. Терминальные символы • или начинаются с малой буквы, • или записываются целиком заглавными буквами, • или заключаются в кавычки (одинарные или двойные). 9

Описание грамматик языков программирования Пример 1. Идентифкатор Имя = Буква { Буква | Цифра Описание грамматик языков программирования Пример 1. Идентифкатор Имя = Буква { Буква | Цифра }. 10

Описание грамматик языков программирования Пример 2. Объявление массива Array-type = 'array' '[' Index-type { Описание грамматик языков программирования Пример 2. Объявление массива Array-type = 'array' '[' Index-type { ', ' Index-type } ']' 'of' Component-type. Index-type = Ordinal-type. Component-type = Type-denoter. 11

Описание грамматик языков программирования Пример 3. РБНФ Синтаксис Правило Выражение Вариант Элемент Выражение Цепочка Описание грамматик языков программирования Пример 3. РБНФ Синтаксис Правило Выражение Вариант Элемент Выражение Цепочка = { Правило } = Имя "=" Выражение ". ". = Вариант { "|" Вариант }. = Элемент { Элемент }. = Имя | Цепочка | "(" Выражение ")" | "[" "]" | "{" Выражение "}". = "'" { символ } "'" | '"' { символ } '"' 12

Описание грамматик языков программирования Описание синтаксиса языков семейства С (С++, C#, …) использовалось в Описание грамматик языков программирования Описание синтаксиса языков семейства С (С++, C#, …) использовалось в книге Б. Керниган, Д. Ритчи «Язык программирования С» • Нетерминалы записываются курсивом. • Терминалы записываются прямым шрифтом. • Левая часть правила записывается отдельной строкой с отступом влево. • Альтернативные части правил выписываются в столбик по одному в строке или помечаются словами “one of”. • Необязательные части обозначаются нижним индексом “opt”. 13

Описание грамматик языков программирования Средства для обозначения повторений отсутствуют, поэтому в описаниях часто используется Описание грамматик языков программирования Средства для обозначения повторений отсутствуют, поэтому в описаниях часто используется рекурсия. 14

Описание грамматик языков программирования Пример 1. Составной оператор составной оператор { список описанийopt список Описание грамматик языков программирования Пример 1. Составной оператор составной оператор { список описанийopt список операторовopt } список операторов оператор список операторов 15

Описание грамматик языков программирования Пример 2. Элементарное выражение primary-expression: identifier constant string-literal ( expression Описание грамматик языков программирования Пример 2. Элементарное выражение primary-expression: identifier constant string-literal ( expression ) 16

Описание грамматик языков программирования Пример 3. Спецсимволы в С/С++ simple-escape-sequence: one of ' Описание грамматик языков программирования Пример 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 Описание грамматик языков программирования Пример 1. Синтаксическая диаграмма слагаемого (язык Паскаль) 20

Описание грамматик языков программирования Пример 2. Структура команды языка Ассемблера 21 Описание грамматик языков программирования Пример 2. Структура команды языка Ассемблера 21