Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры СПО 2012.docx
Скачиваний:
11
Добавлен:
22.09.2019
Размер:
48.94 Кб
Скачать
  1. Автоматы с магазинной памятью.

МП-автомат – это конечный автомат, снабженный дополнительным стеков (магазином) для хранения промежуточной информации потенциально бесконечного объема

МПА=<S,S0,F,∑,Г, б>

S – множество внутренних состояний автомата

F – множество допускающих состояний

S0 – начальное состояние автомата

∑ - конечный алфавит выходных символов

Г – конечный алфавит магазина

Б – функция переходов

  1. Рекурсивные обходы деревьев.

Рекурсивный обход «»в глубину»

Void VisitNode (TreeNode node)

{ foreach(TreeNode childNode in node.Childs)

{VisitNode(child);}

ApplySemanticRules(node);

}

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

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

Грамматики типа 3 (регулярные языки) – грамматики, с правилами вида Аa; ABa; A. Имеют линейные по времени методы распознавания.

П ример:

  • SaS |bA

  • AaB|

  • BbA|a

  1. Семантические деревья.

Я вляется «сжатым» деревом разбора, в котором операторы размещены во внутренних узлах, а операнды оператора представлены дочерними ветвями узла. Проверяется наличие семантических ошибок в исходной программе и накапливается информация о типах для стадии генерации кода

  1. Связь синтаксических деревьев и генерация кода. Пример (трансляция в p-code).

  2. Обзор стратегий синтаксического анализа.

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

Восходящая стратегия: начиная от терминальной строки найти т.н. связку – правую часть продукции грамматики, которую нужно заменить нетерминалом (левой частью продукции) для получения нового узла синтаксического дерева.

Универсальные методы разбора (алгорит Кока-Ягнерса-Касами, алгоритм Эрли)

  1. Языки (определение).

Языком L над словарем v называется произвольное множество цепочек над этим словарем, т.е. L€ V*. Операции: объединения, пересечения, дополнения, конкатенации.

V={a,b}, V*={e,a,b,aa,ab,ba,bb,…}

  1. Определение токенов. Регулярные языки.

Базис:

  • Константы ξ и 0 являются регулярными выражениями определяющие языки L(ξ)= {ξ} и L(0)=0

  • Если α – произвольный символ, то а – регулярное выражение, определяющее язык L(a)={a}

Если E и F – регулярные выражения, то E+F, EF. E*, (E) – регулярные выражения

  1. Теория Ноама Хомского.

Объяснение механизмов понимания человеком смысла фраз естественного языка. Основная идея: структура текста определяет смысл предложения

  1. Лексические ошибки.

Ошибкой лексического анализа является невозможность распознать лексему по заданному возможному шаблону

  1. Роль синтаксического анализатора.

Задачей синтаксического анализатора является: по заданной терминальной цепочке восстановить ее вывод из начального символа по грамматике

  1. Операции над языками.

Операции: объединение, пересечение, дополнение, конкатенация (L1L2={αβ|α€L1, β€L2})

Замыкание Клини L*=L0UL1UL2U….

Позитивное замыкание языка L+=L*-{ξ}

  1. Определение ε-НКА.

A=<Q,∑,(сигма)<q0,F>

Q – множество состояний

∑ - множество входных символов

q0- начальное состояние

F, подмножество Q- множество допускающих состояний

(сигма)- функция переходов

  1. Моделирование ε-НКА. Пример в псевдокоде.

Bool NFA()

{ S=EClosure(s0);

C=getnextchar();

While (c!=eof)

{s=EClosure(move(S,c));

c=getnrxtchar();

}

Return (SΩF!=0);

}

  1. Пример трансляции (генерации кода).

Генератор промежуточного кода:

T1:=intToReal(60)

T2:=id3*T1

T3:=id2+T2

Id1:=T3

Оптимизация кода:

T1:=id3*60.0

Id1:+id2+T1

Генератор кода:

Movf r1,id3

Mulf r1,60.0

Movf r2, id2

Addf r1,r2

Movf id1,r2

  1. Роль лексического анализатора. Токены. Шаблоны. Лексемы.

Задача: чтение символов исходного текста программы и выдача последовательности токенов.

  • Удаление комментариев и не несущих смысловой нагрузки пробелов (табуляции и т.п.) из строки исходного кода.

  • Согласование сообщений об ошибках компиляции и текста исходной программы

  • Реализация макросов и директив препроцессора

Токен

Лексема

Шаблон

Const

Const

Const

If

If

If

Relation

<,>,<=,>=,=<,<>

< или <= или >= или…

Id

Pi,count,p2

Буква за которой следуют буквы и цифры

Num

3,14 , 0, -1

Любая числовая константа

Literal

‘this is a text’

Любые символы между кавычками, исключая сами кавычки

  1. Стратегии обработки ошибок синтаксического анализа.

  • Режим паники

  • Уровень фразы

  • Продукции ошибок

  • Глобальная коррекция

  1. Построение ДКА из ε-НКА.

Строим таблицу переходов Dtran дляD. Каждое сотояние ДКА является множеством состояний НКА, Dtrat строится так, чтобы D «параллельно» моделировал все возможные перемещения N по входной строке.

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

Вход: А->Aα |β

Правило:

A->βA’

A’->αA’ | ξ

  1. Атрибутные грамматики. Пример (управление мобильным роботом).

Это расширение контекстно-свободной грамматики Хомского, где каждому символу (терминальному и нетерминальному) порождающей КС-грамматики может быть приписано конечное множество семантических параметров – атрибутов, которые принимают некоторые значения.

Пример:

Seq->seq instr | begib

Instr -> east | north | west | south

Begin west south east east noth noth

Продукция

Семантическое правило

1

Seq->begin

Seq.x=0

Seq.y=0

2

Seq->seq1instr

Seq.x=seq1.x+instr.dx

Seq.y=seq1.y+instr.dy

3

Instr->east

Instr.dx=1

Instr.dy=0

4

Instr->west

Instr.dx=-1

Instr.dy=0

5

..

6

..

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

Любой язык, определяемый регулярным выражением, можно задать некоторым конечным автоматом.

Построение -НКА, обладающего свойствами:

  • имеет ровно одно допускающее состояние.

  • нет дуг, ведущих в начальное состояние.

  • нет дуг, выходящих из допускающего состояния.

  1. Построение деревьев вывода цепочек.

  • Корень дерева всегда помечен начальным нетерминальным символом грамматики.

  • Каждый внутренний узел помечен каким-либо нетерменальным символом

  • Листья дерева содержат терминальные узлы

  1. Моделирование ДКА. Пример на алгоритмическом языке.

Bool DFA()

{s=s0;

c=getnextchar();

while (c!=eof)

{s=move(s,c);

C=getnextchar();

}

Return(s€F);

}

  1. Классы грамматик Хомского. Краткий обзор.