
- •Формальные языки и грамматики Введение
- •1. Предварительные обсуждения
- •2. Формальные грамматики
- •3. Классификация формальных грамматик
- •4. Система составляющих
- •5. Синтаксические диаграммы
- •6. Синтаксическое дерево
- •7. Алгоритмы обхода вершин дерева разбора.
- •7.1 Алгоритм обхода "сверху-вниз".
- •7.2 Алгоритм обхода "снизу-вверх".
- •8. Двоичное дерево
- •9. Свойства двоичного дерева
- •10. Грамматический разбор цепочек
- •10.1. Разбор цепочки "сверху-вниз".
- •10.2. Разбор цепочки "снизу-вверх".
- •11. Операции над языками
- •Заключение
- •Контрольные вопросы и задачи
- •Индивидуальное задание
- •Указатель обозначений
- •Предметный указатель
- •Список литературы
- •1. Предварительные обсуждения.................................................... 4
Заключение
Рассмотренные классы формальных языков, правил формирования цепочек символов, алгоритмы разбора синтаксических конструкций позволяют автоматизировать синтаксический анализ текстов. Эти идеи нашли широкое применение в разработке программных и технических средств современных вычислительных машин.
Программа или техническое средство, выполняющие преобразование исходной программы, написанной на языке высокого уровня, в объектные модули языка вычислительной машины называется транслятором. Для организации такого преобразования необходимо знать алфавиты языков высокого уровня и вычислительной машины, правила построения синтаксических конструкций текстов, написанных на языке высокого уровня и объектных модулей на языке вычислительной машины. Эти знания заложены в синтаксис соответствующего языка. Как правило, для языка высокого уровня это - КС-грамматика, для языка вычислительной машины это - система команд. Если текст исходной программы написан синтаксически верно, то следующим шагом выполняется семантический анализ текста, подготовка и генерация системы команд вычислительной машины. Эти работы определяются типом вычислительной машины и его языком.
Контрольные вопросы и задачи
1. Дайте формальное определение языка для формирования:
а) множества целых положительных чисел;
b) множества слов русского языка;
с) множества идентификаторов языка программирования.
2. Пусть VT={ 0;1;2 }, а также 01, = 2 , 011. Выпишите следующие цепочки: 4, 42( )3. Опишите их длины,головы и хвосты.
3. Пусть дана грамматика G = VT; VN; P; J , где
VT = {a,b,c}, VN = {A,B,J}, J VN, P = { p1 = J ::= aB;
p2 = B ::= A;
p3 = B ::= b;
p4 = A ::= c }.
Докажите истинность или ложность вывода следующих цепочек:
a) J =>...=> a; b) J =>...=> ac;
c) B =>...=> Ac; d) aJ =>...=> aab;
e) aBb =>...=> acb.
Какой тип грамматики?
4. Опишите грамматику, язык которой состоит из множества четных целых чисел.
5. Опишите грамматику, язык которой состоит из нечетной последовательности символа "a".
6. Пусть дана грамматика G = VT; VN; P; J , где
VT = {a}, VN = {A,J}, J VN, P ={ p1 = J ::= a;
p2 = J ::= aJa }.
Цепочки какого языка генерирует грамматика ?
7. Пусть дана грамматика G = VT; VN; P; J , где
VT = {a,b}, VN = {A,B,J}, J VN, P = { p1 = J ::= B;
p2 = J ::= AJ;
p3 = AJ ::= a;
p4 = B ::= b }.
Цепочки какого языка генерирует грамматика?
8. Пусть дана грамматика G = VT; VN; P; J , где
VT = {a,b}, VN = {A,B,J}, J VN, P = { p1 = J ::= aA;
p2 = A ::= a;
p3 = A ::= B;
p4 = B ::= b B
p5 = B ::= b}.
Цепочки какого языка генерирует грамматика?
9. Дано множество правил P = { p1 = J ::= ABA;
p2 = A ::= Ca;
p3 = A ::= bA;
p4 = C ::= d }.
Найти матрицы связей, таблицы подстановок, синтаксические деревья и их двоичные эквиваленты для цепочки, начинающейся с символа "d".
10. Дано множество правил P = { p1 = J ::= ABA;
p2 = J ::= DE;
p3 = A ::= Ca;
p4 = B ::= bC;
p5 = C ::= c;
p6 = D :: E;
p7 = E ::= cJC }.
Найти матрицы связей, таблицы подстановок, синтаксические деревья и их двоичные эквиваленты для цепочки, начинающейся с символа "c".
11. Нарисуйте синтаксические диаграммы языка программирования Паскаль для синтаксических переменных:
<идентификатор>, <программа>, <целое_без_знака>, <терм>, <простое _выражение>, <конец_блока>, <заголовок_программы>.
12. Используя грамматику арифметических выражений (пример 14), постройте дерево разбора и его двоичный эквивалент для выражений:
a) a x ( a + b ) / c ;
b) ( a + b ) / c ;
c) ( a + b ) x ( a - c ) / ( b - c ).