Решение
Критерий применимости метода рекурсивного спуска.
Пусть G — КС-грамматика. Метод рекурсивного спуска применим к G, если и только если для любой пары альтернатив X → | выполняются следующие условия:
first() first () ;
справедливо не более чем одно из двух соотношений: , ;
если , то first() follow( X ) .
Для данной грамматики first(AC) first( bB ) {b} . То есть, для пары правил S AC и S bB не выполняется пункт (1) критерия. Других пар, нарушающих критерий, нет.
КРИТЕРИИ:
Есть ошибки в формулировке критерия: -5
Есть ошибки в обосновании: -5
5.
Дан автомат A
в виде ДС с действиями. С помощью
действий он допускает цепочки языка L1
и переводит их в цепочки языка L2.
Определить языки L1 и L2.
Построить КС-грамматику, анализируемую
методом рекурсивного спуска, с действиями
только вида cout<<’символ’,
задающую тот же перевод цепочек L1
в цепочки L2.
A:
Решение
Автомат A с действиями допускает цепочки вида abx1abx2…axn-1adbn, где n≥1, xi{b}* для i = 1,…, n-1, и каждую такую цепочку переводит соответственно в цепочку an-1bсn. Грамматика с действиями такова ( запись вида a означает cout<<’a’ ):
S aAbc
A bBaaAbc |d b ( или A baBaAbc |d b )
B bB |
Возможен и такой вариант ответа:
S aAbc
A bBaAbc |d b
B bB | a
КРИТЕРИИ: -- есть ошибки в описаниях языков L1 , L2 : -3
-- грамматика для L1 ошибочна: -4
-- метод рекурсивного спуска неприменим: -2
-- есть действие не вида cout<<’символ’ : -10
-- конечное число цепочек переводятся неправильно: -3
-- бесконечно много цепочек переводятся неправильно: -6
6. Привести три примера контекстных условий, выполнение которых контролируется в современных языках программирования.
Ответ: (какие-нибудь три подходящих примера:)
Имя, используемое в программе, должно быть описано.
Не допускаются два описания одного и того же имени в одной области видимости.
В операторе присваивания типы переменной и выражения должны быть совместимыми (совпадать).
В условном операторе и в операторе цикла в качестве условия возможно только
логическое выражение (Паскаль, Оберон, Ада).
Операнды операции отношения должны быть определенного типа (например, одного из перечислимых типов в Паскале).
Количество фактических параметров в вызове подпрограммы должно соответствовать количеству формальных параметров в описании подпрограммы, а типы фактических параметров должны быть совместимы по присваиванию с типами соответствующих формальных параметров.
Возможны другие условия.
КРИТЕРИИ: за каждый пропущенный (или ошибочный) пункт: -4.
7
.
На клетчатой поверхности размера 3x3
в левой нижней клетке расположен
робот-шар. Он умеет выполнять команды
перехода в соседнюю клетку: ’a’
– переместиться на одну клетку вправо,
’b’
– влево, ’c’
– вверх, ’d’
– вниз. С помощью последовательности
команд можно задавать траекторию
движения шара. Например, последовательность
aaccbbdaba
перемещает шар в центральную клетку.
Последовательность команд является
цепочкой в алфавите {a,b,c,d}.
Если цепочка пуста, шар остается на
месте. Опишите регулярную
грамматику с терминальным алфавитом
{a,b,c,d},
задающую все возможные траектории шара,
удовлетворяющие условиям: шар начинает
движение из левой нижней клетки, может
двигаться только вокруг центральной
клетки против часовой стрелки, не покидая
поверхности; остановиться может только
в левой нижней клетке.
В грамматике должно быть не более 9 правил, считая альтернативы.
