
- •1. Сообщения, информация. Обработка сообщений и обработка информации.
- •2. Понятие системы программирования. Парадигмы программирования.
- •3. Понятие транслятора и способы его реализации. Сравнительный анализ компиляторов, интерпретаторов и псевдокомпиляторов.
- •4.Процедурное программирование. Характеристики языков, реализующих процедурное программирование.
- •6!. Программный интерфейс между процедурами на языке Ассемблера и программой на языке Pascal.
- •7. Язык программирования с – основные конструкции и особенности.
- •8. Сравнительный анализ языков c и Pascal.
- •19. Распознаватели как способ определения языка. Виды распознавателей и их связь с грамматикой.
- •22. Контекстно- свободные языки и их свойства. Дерево вывода.
- •23. Распознаватель со стековой памятью.
- •27.Класс ll(1) грамматик и их свойства. Критерий принадлежности языка к классу ll(1).
- •28.Однопроходный синтаксический анализатор и его алгоритм работы. Управляющая таблица.
- •35.Понятие о фазах трансляции.
- •31.Построение лексического анализатора с помощью утилиты lex. Виды регулярных выражений.
- •33.Грамматики простого предшествования и операторного.
22. Контекстно- свободные языки и их свойства. Дерево вывода.
Грамматика G называется контекстно-свободной если каждое правило из Р имеет вид A ->α, где А є N, α є (NUΣ)*В грамматике может быть несколько выводов, эквивалентных в том смысле, что во всех них применяется одни и те же правила в одних и тех же местах, но в различном порядке. Определить понятие эквивалентности двух выводов для грамматик произвольного вида сложно, но в случае КС можно ввести удобное графическое представление класса эквивалентных выводов, называемое деревом вывода.
Помеченное упорядоченное дерево D называется деревом вывода (или деревом разбора) в КС-грамматике G(A)=(N,Σ,P,A), если выполнены следующие условия:
Корень дерева D помечен A.
Если
,...,
–
поддеревья и корень дерева
помечен
,
то А->
,...,
- правило из множества Р.
должно
быть деревом вывода в грамматике
G(
)=(N,Σ,P,
),
если
-нетерминал,
и
состоит
из единственной вершины, помеченной
,
если
-терминал.
Если корень дерева имеет единственного потомка, помеченного е, то этот потомок образует дерево, состоящее из единственной вершины, и А->е – правило из множества Р.
Короной дерева вывода назовем цепочку, которая получится, если выписать слева направо метки листьев.
Дерево
называется деревом вывода ( или деревом
разбора) в КС- грамматике
,
если выполнены следующие условия:
каждая
вершина дерева помечена символом из
множества
,
при этом корень дерева помечен символом
S; листья- символами из
;если
вершина дерева помечена символом
,
а ее непосредственные потомки –
символами
,
где каждое
,
то
-
правило вывода в этой грамматике;
если
вершина дерева помечена символом
,
а ее единственный непосредственный
потомок помечен символом
-
правило вывода в этой грамматике.
23. Распознаватель со стековой памятью.
Его определение и алгоритм работы. Автомат с магазинной (стековой) памятью- это односторонний недетерминированный распознаватель, в потенциально бесконечной памяти которого элементы информации хранятся и используются так же, как патроны в магазине автоматического оружия, т.е. в каждый момент доступен только верхний элемент магазина.
Автомат с магазинной (стековой) памятью - это семерка
P=(Q, Σ, Г, δ, q0, Z0, F), где
Q – конечное множество символов состояний, представляющих всевозможные состояния управляющего устройства;
Σ – конечный входной алфавит;
Г – конечный алфавит магазинных символов;
δ – отображение множества Qx(ΣU{e})xГ в множество конечных подмножеств множества QхГ*(по другому набор правил);
q0 - начальное состояние управляющего устройства;
Z0 – символ, находящийся в магазине в начальный момент (начальный символ);
F – множество заключительных состояний;
Автомат со стековой памятью в отличие от обычного КА имеет стек, в который можно помещать специальные т.н. "магазинные" символы. Переход из одного состояния в другое зависит не только от входного символа, но и от верхних символов магазина. В начале работы в магазине лежит специальный символ Z0.
При выполнении перехода из магазина удаляются верхние символы, соответствующие правилу, и добавляется цепочка символов, соответствующих переходу. Допускаются также переходы, при которых входной символ игнорируется (и, тем самым, будет входным символом при следующем переходе). Эти переходы называются e-переходами. Автомат называется недетерминированным, если при одних и тех же состоянии, входном символе и вершине магазина возможен более чем один переход. Если при окончании цепочки автомат находится в одном из конечных состояний, а стек пуст, цепочка считается допущенной (после окончания цепочки могут быть сделаны e-переходы) .
24.Построение распознавателя со стековой памятью по грамматике. Левый и правый разборы. По контекстно-свободной грамматике легко строится недетерминированный КА (конечный автомат) с магазинной памятью, который допускает цепочки этого языка. Он использует только одно состояние и следующий набор переходов:
е(A) [x] для каждого правила грамматики A:x
а (а) [] для каждого терминала а
Можно построить и другой автомат, который также содержит одно состояние и имеет следующие переходы: а(е)[а] для каждого терминала а е(x) [A] для каждого правила грамматики A:x
Удобно считать, что в начале разбора магазин этого автомата пуст. Тогда в конце разбора в магазине останется символ S.
По недетерминированному КА с магазинной памятью можно построить КС-грамматику. Таким образом класс КС-языков и класс языков, допускаемых автоматами с магазинной памятью, эквивалентны.
К сожалению, не каждый КС-язык допускает разбор с помощью детерминированного автомата. Например, язык цепочек-палиндромов из 0 и 1 не может быть допущен детерминированным КА с магазин ной памятью. Таким образом, недетерминированные автоматы со стеком могут распознавать более широкий класс языков, чем детерминированные автоматы со стеком - в этом их существенное отличие от КА. Практический интерес для реализации компиляторов представляют детерминированные КС-языки собственное подмножество КС-языков, допускающее распознавание с помощью детерминированных автоматов с магазинной памятью.
Два (недетерминированных) автомата, построенных выше для КС-грамматики определяют два класса методов разбора КС-языков: сверху-вниз снизу вверх.
В первом случае (пример - рекурсивный спуск) при просмотре цепочки слева направо естественно будут получаться левые выво¦ ды. При детерминированном разборе проблема будет состоять в том, какое правило применить для раскрытия самого левого нетер¦ минала.
Определение: вывод цепочки β принадл (VT)* из S принад VN в КС-грамматике G = (VT, VN, P, S), называется левым (левосторонним), если в этом выводе каждая очередная сентенциальная форма получается из предыдущей заменой самого левого нетерминала.
Определение: вывод цепочки β прин (VT)* из S прин VN в КС-грамматике G = (VT, VN, P, S), называется правым (правосторонним), если в этом выводе каждая очередная сентенциальная форма получается из предыдущей заменой самого правого нетерминала.
25.Понятие схемы синтаксически управляемого перевода.Проблема задания бесконечного перевода конечными средствами аналогична проблеме задания бесконечного языка. Известно несколько возможных подходов к определению переводов. Аналогично порождению языка с помощью грамматики можно использовать систему, порождающую пары цепочек, принадлежащие переводу. Можно также воспользоваться распознавателем с двумя лентами, распознающий пары принадлежащие переводу, или же определить автомат, который принимает в качестве входа цепочку х и выдает все цепочки у, являющиеся переводами цепочки х. Этот список не исчерпывает всех возможностей, но охватывает наиболее распространенные модели.
Устройство, которое по данной входной цепочке х вычисляет такую выходную цепочку у, что (х,у) є Т, называется транслятором, реализующим перевод Т.
Схемой синтаксически управляемого перевода называется пятерка Т=(N, Σ, Δ, R, S), где
1. N – конечное множество нетерминальных символов;
2. Σ – конечный входной алфавит;
3. Δ – конечный выходной алфавит;
4. R – конечное множество правил вида А-> α, β и вхождения нетерминалов в цепочку β образуют перестановку вхождений нетерминалов в цепочку α;
5. S – начальный символ, выделенный нетерминал из N.
(Синтаксически управляемый перевод
На практике синтаксический, семантический анализ и генерация внутреннего представления программы часто осуществляются одновременно.
Существует несколько способов построения промежуточной программы. Один из них, называемый синтаксически управляемым переводом, особенно прост и эффективен.
В основе синтаксически управляемого перевода лежит грамматика с действиями (см. раздел о контроле контекстных условий). Теперь, параллельно с анализом исходной цепочки лексем, будем выполнять действия по генерации внутреннего представления программы. Для этого дополним грамматику вызовами соответствующих процедур генерации.
Содержательный пример - генерация внутреннего представления программы для М-языка, приведен ниже, а здесь в качестве иллюстрации рассмотрим более простой пример.
Пусть есть грамматика, описывающая простейшее арифметическое выражение: Е → T {+T} Т → F {*F}
F → a | b | (E)
Тогда грамматика с действиями по переводу этого выражения в ПОЛИЗ (постфиксная запись) будет такой:
Е → T {+T <putchar('+')>}
Т → F {*F <putchar('*')>}
F → a <putchar('a')> | b<putchar('b')> | (E)
Этот метод можно использовать для перевода цепочек одного языка в цепочки другого языка (что, собственно, мы и делали, занимаясь переводами в ПОЛИЗ цепочек лексем).
Например, с помощью грамматики с действиями выполним перевод цепочек языка
L1 = {0n1m | n,m>0} в соответствующие цепочки языка
L2={ambn|n,m>0}: Язык L1 можно описать грамматикой
S → 0S | 1A
А->1А|е
Вставим действия по переводу цепочек вида 0n1m в соответствующие цепочки вида ambn:
S → 0S <putchar('b')> | 1 <putchar('a')> A
А → 1 <putchar('a')> A |ε
Теперь при анализе цепочек языка L1 с помощью действий будут порождаться соответствующие цепочки языка L2. )