- •Часть 1
- •Лекция №1 Предисловие п.1. Место системного программного обеспечения в компьютерной системе
- •П.2. Структура спо
- •П.3. Хакеры как движущая сила развития спо
- •Лекция №2
- •1. Формальные языки и грамматики в системе программирования
- •1.1. Структура систем программирования
- •1.2. Языки и цепочки символов. Способы задания языков
- •1.2.1. Общие представления о языках
- •1.2.2. Цепочки символов. Операции над цепочками символов
- •1.2.3. Формальное определение языка
- •1.2.4. Способы задания языков
- •Лекция №3
- •1.3. Грамматики и распознаватели
- •1.3.1. Порождающая грамматика
- •1.3.2. Запись правил грамматики с использованием метасимволов
- •Лекция №4
- •1.3.3. Распознаватели
- •1.3.4. Классификация распознавателей
- •1.3.4.1. Классификация распознавателей по компонентам
- •1.3.4.2. Классификация распознавателей по типу языков
- •Лекция №4
- •Лекция №5
- •1.3.5. Примеры классификации языков и грамматик
- •Лекция № 6
- •1.4. Технология формирования предложений языка
- •1.4.1. Выводимость цепочек
- •1.4.2. Сентенциальная форма грамматики
- •1.4.3. Левосторонний и правосторонний выводы
- •1.4.4. Дерево вывода и методы его построения
- •1.4.5. Проблема однозначности грамматик
- •2.1.2. Формальное определение компилятора
- •2.1.3. Интерпретаторы
- •2.2. Общая схема работы компилятора
- •2.3. Варианты построения компиляторов
- •2.3.1. Общие подходы в построении компиляторов
- •2.3.2. Понятие прохода
- •2.3.3. Однопроходные и многопроходные компиляторы
- •2.4. Особенности построения интерпретаторов и их взаимодействие с компиляторами
- •3.1.2. Принципы построения сканеров
- •Лекция 9
- •3.1.3. Сканер как конечный автомат
- •Лекция 10
- •3.2. Взаимодействие сканера с таблицей идентификаторов
- •3.2.1.Назначение и особенности построения таблиц идентификаторов
- •3.2.2. Простейшие методы построения таблиц идентификаторов
- •3.2.3. Построение таблиц идентификаторов по методу бинарного дерева
- •Список литературы
1.3.2. Запись правил грамматики с использованием метасимволов
Форма Бэкуса-Наура удобна для формального описания грамматик и она, по существу, натолкнула исследователей на внедрение математических средств для системного описания и исследования языков программирования, и использование математического аппарата как основы для синтаксического анализа в трансляторах. Но БНФ не всегда доступна для понимания, особенно при использовании рекурсий различного вида. А при создании языка программирования важно, чтобы его грамматику понимали не только те, кому предстоит создавать компиляторы для этого языка, но и пользователи языка – программисты. Поэтому существуют другие способы описания формальных грамматик, ориентированные как бы на большую понятность для человека. Одним из таких способов является запись правил грамматики с использованием метасимволов.
Суть его заключается в том, что в строке правил грамматики могут встречаться специальные символы – метасимволы, которые имеют особый смысл и трактуются специальным образом. В качестве таких символов, например, могут использоваться скобки ( ), [ ], { }, « » (кавычки) и , (запятая).
Эти метасимволы имеют следующий смысл:
– круглые скобки означают, что из всех перечисленных внутри них цепочек символов в данном месте правила грамматики может стоять только одна цепочка;
– квадратные скобки означают, что указанная внутри них цепочка может встречаться, а может и не встречаться в данном месте правила грамматики (т. е. может быть в нем один раз или ни одного раза);
– фигурные скобки означают, что указанная внутри них цепочка может не встречаться в данном месте правил ни разу, может встречаться один раз или сколь угодно много раз;
– запятая служит для разделения цепочек внутри круглых скобок;
– кавычки используются в тех случаях, когда один из метасимволов должен использоваться как лексема (терминальный символ в цепочке).
Тогда правила рассмотренной в Примере 1.1 грамматики G, записанные с помощью метасимволов будут выглядеть следующим образом:
P:
число [(+, –)] цифра {цифра}
цифра 0123456789
Первая строка правил читается так: «число есть цепочка символов, которая может начинаться со знаков + или –, или без знака, должна содержать одну цифру, за которой может следовать любое количество цифр.
Вопрос слушателям. Каким образом на основе этих правил можно получить цепочку 125? Пояснить.
В отличие от БНФ в данной форме исключен искусственно введенный малопонятный нетерминал чс и полностью исключена рекурсия.
Кроме указанных метасимволов могут использоваться и другие метасимволы, смысл которых заранее разъяснен. Можно также произвести расширение смысла уже существующих метасимволов. Например, для метасимвола {} может быть введена запись{}n, где n целое число, n > 0. Такая запись означает, что цепочка символов, стоящая в фигурных скобках, может быть повторена от 0 до n раз. Это удобный способ ограничения на длину цепочки.
Если для грамматики G ввести условие, что она должна порождать целые десятичные числа, содержащие не более 15 разрядов, то получим G с правилами:
P:
число [(+, –)] цифра {цифра}14
цифра 0123456789.
Для организации такого ограничения в БНФ или в немодифицированной метасимвольной форме понадобилось бы еще 15 правил.