Решение
Критерий применимости метода рекурсивного спуска.
Пусть 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 правил, считая альтернативы.