Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка 15.02.docx
Скачиваний:
2
Добавлен:
07.05.2019
Размер:
240.61 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«Ухтинский государственный технический университет»

(УГТУ)

Методические указания

к выполнению практических работ по дисциплине «Системное программное обеспечение» (основы языков и грамматик)

Ф. В. Маракасов, К. В. Рочев

Кафедра информационных систем и технологий

Ухта 2012

Оглавление

Введение 3

Порождающие грамматики Хомского 3

Цель 3

Теория 4

Неограниченные грамматики 6

Контекстно зависимые грамматики 6

Контекстно свободные грамматики 6

Автоматные грамматики 7

Эквивалентность грамматик 7

Однозначность грамматик 7

Задачи и упражнения 9

Контрольные вопросы 10

Конечный автомат 11

Детерминированный конечный автомат 11

-НКА 11

Построение ДКА из -НКА 12

Задачи и упражнения 15

Контрольные вопросы 17

Регулярные грамматики. Лексический анализатор. 17

Роль лексических анализаторов 17

Лексические ошибки 18

Регулярные выражения 18

Преобразование регулярного выражения в автомат 19

Распознание токенов 21

Задачи и упражнения 22

Контрольные вопросы 23

S–грамматики. Автоматы с магазинной памятью. 23

Автоматы с магазинной памятью 23

S-грамматики 24

Нисходящие методы разбора 27

Устранение левой рекурсии 27

Левая факторизация 28

Метод рекурсивного спуска 28

Пример нисходящего интерпретатора 29

Задачи и упражнения 34

Контрольные вопросы 35

Введение

Языки и грамматики составляют основу таких программных систем как трансляторы (компиляторы, интерпретаторы), выполняющие преобразование входной последовательности символов, записанных на одном языке в выход на другом языке. Например, перевод программы, записанной на языке С# в промежуточный код IL (Intermediate Language). Формальные правила, заложенные в транслятор представляют собой элемент грамматики, на основе которых происходит распознавание входных цепочек. Теоретической базой большинства трансляторов являются порождающие грамматики Аврама Ноама Хомского, – известного американского лингвиста, внёсшего существенный вклад в понимание механизмов мышления.

Порождающие грамматики Хомского Цель

  • Научиться различать классы грамматик.

  • Научиться строить простые грамматики различных классов для порождения заданных цепочек.

Теория

Грамматикой Хомского общего вида будем называть набор

G = <T, N, S, R>,

где T – множество терминальных символов TN = ; терминальные символы будем обозначать малыми буквами из начала латинского алфавита; N – множество нетерминальных символов; будем обозначать их большими латинскими буквами; S – начальный нетерминальный символ SN; R – конечное множество правил (или продукций); правило имеет вид a b, где a, b (T N)*, причём a содержит хоть один нетерминальный символ.

Символы объединённого алфавита V = TN будем обозначать малыми буквами из конца латинского алфавита (u, v, w, ...). Основным понятием грамматик является понятие вывода и выводимости. Если в грамматике есть правило , то из цепочки  за один шаг выводима цепочка  (говорят также непосредственно выводима). Это отношение обозначается G. Отношение выводимости за 0 или более шагов обозначается G* (рефлексивно-транзитивное замыкание отношения G) и называется просто отношением выводимости. Последовательность цепочек 0G1G...Gn называется выводом длины n  0. Вывод также будем обозначать иногда G* . В случае, когда понятно, в какой грамматике рассматривается вывод, индекс G можно опускать.

Определение 1. Из цепочки  непосредственно выводима цепочка  в грамматике G (обозначается как  G ), если:

  • Цепочку  можно представить как конкатенацию трёх цепочек  =  (некоторые цепочки могут быть пустыми);

  • Цепочку  также можно представить как конкатенацию трёх цепочек ;

  • В грамматике G есть продукция  

Определение 2. Из цепочки  непосредственно выводима цепочка  в грамматике G (обозначается как  G* ), если существует конечное множество цепочек 0 , 1 , n ,n0, такое, что = ,  = n и i=1,…,n выполняется i-1  i

  • Цепочку  можно представить как конкатенацию трёх цепочек  =  (некоторые цепочки могут быть пустыми);

  • Цепочку  также можно представить как конкатенацию трёх цепочек ;

  • В грамматике G есть продукция  

Следствие: порождающая грамматика не предписывает единственный вывод, т.е. не задаёт алгоритм порождения. Вывод является недетерминированным процессом, т.е. не задаёт последовательность операций.

Определение 3. Языком, порождаемым грамматикой G, называется множество терминальных цепочек, выводимых из начального символа грамматики.

L(G) = {T* | S G*}

Примеры грамматик:

  • V1 ={a,b}; L1={aabb, baa, aaba}.

  • V2={a,b}; L2={anbn | n >=0}.

  • V3={a,b,c}; L3 = {anbcm | n,m >=0}

Таблица 1. Типы грамматик

Тип

Вид правил

Синонимичные названия грамматик

Распознающие абстрактные устройства

0

a  b

Неограниченные грамматики

Машины Тьюринга

Свободные грамматики

1

gAd 

gbd

Контекстно-зависимые грамматики

Линейно-ограниченные автоматы

Неукорачивающие грамматики

Грамматики непосредственных составляющих

2

А

Контекстно-свободные грамматики

Автоматы с магазинной памятью

3

АaB

Автоматные грамматики

Конечные автоматы

Aa

Регулярные грамматики

A

Грамматики с конечным числом состояний