V2_2010 (Варианты языков от Волковой)
Описание файла
Файл "V2_2010" внутри архива находится в папке "Варианты языков от Волковой". Документ из архива "Варианты языков от Волковой", который расположен в категории "". Всё это находится в предмете "практикум (прикладное программное обеспечение и системы программирования)" из 4 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Онлайн просмотр документа "V2_2010"
Текст из документа "V2_2010"
Вариант 2_2010 Ф.И.О.___________________________________№ группы________
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
1. Дана грамматика G: S aA | A A BbB | Bb | B B C | CC CC CCC C c | (a) Описать язык L(G) в виде теоретико-множественной формулы или исчерпывающего словесного описания (не более 300 печатных знаков включая пробелы). | (б) Каким из перечисленных классов грамматик принадлежит G?
|
(в) Тип языка: найти такое целое k, что язык L(G) является языком типа k и не является языком типа k+1.
2. Дать определение порождающей грамматики. Какие ограничения на использование терминальных и нетерминальных символов в правилах грамматики наложены этим определением? Предложите какую-либо грамматику для языка L = {(a,b)+} и укажите на этом примере все компоненты, упоминаемые в определении грамматики.
3. Дана диаграмма состояний конечного автомата. Построить по этой диаграмме соответствующую леволинейную грамматику. Если заданный автомат детерминирован, построить анализатор на Си, иначе – преобразовать автомат в соответствии с алгоритмом преобразования НКА в эквивалентный ДКА, и по полученному ДКА построить праволинейную грамматику.
a
a
a
a
b
b
4. | Имеется клетчатый лист бумаги, бесконечный вправо и вверх. В левом нижнем углу расположено перо, оставляющее на бумаге след при перемещении. Перо управляется интерпретатором-графопостроителем. На вход интерпретатору подается последовательность символов-команд из алфавита {с, a, e}: c — переместить перо на одну клетку вверх; | |
a — переместить перо на одну клетку вправо; e — переместить перо на одну клетку вниз. Например, по последовательности cccccaaaa интерпретатор построит букву «Г» размера 54, изображенную на рисунке. Построить грамматику с терминальным алфавитом {c, a}, описывающую буквы «Г» любого размера nm, n,m 1. В грамматике должно быть не более 4 правил вывода (считая альтернативы). | | |
В построенную грамматику добавить действия вида cout << ′символ′; так, чтобы описание буквы «Г» размера nm переводилось в описание буквы «П» размера n (m+1). |
5. Восстановить грамматику по заданному анализатору на С++. Сформулировать достаточное условие применимости метода рекурсивного спуска для грамматик с эпсилон-правилами. Соответствует ли полученная грамматика данному условию? Обосновать свой ответ. Корректен ли данный анализатор? Обосновать свой ответ (доказать корректность или найти примеры некорректного поведения анализатора).
void S () { if (c == ‘1’) { c = GetL (); A();
if (c != ‘0’) Error ();
c = GetL (); C(); D();
if (c != ‘1’) Error ();
c = GetL ();
}
else Error ();
}
void A () { if (c == ‘0’) { c = GetL (); A(); }
else if (c == ‘1’) { c = GetL (); B(); }
else Error ();
}
void B () { if (c == ‘0’) { c = GetL (); C(); }
else if (c == ‘1’) { c = GetL (); B(); }
else Error ();
}
void C () { if (c == ‘0’) { c = GetL (); C(); }
else if (c == ‘1’) { c = GetL (); D(); }
else Error ();
}
void D () { if (c == ‘1’) { c = GetL (); D(); } }
6. Описать основные задачи ассемблеров, компиляторов и интерпретаторов. В чём сходство и различие этих компонентов систем программирования?
7. Нарисовать схему однопроходного компилятора. Каким образом в таких компиляторах взаимодействуют лексический и синтаксический анализаторы? Какой из анализаторов является ведущим в таком взаимодействии?
8. Описать основные подходы, использующие поведенческие и структурные тесты программ. В чем их основные различия?
9. Дать определения бесплодных и недостижимых символов алфавита контекстно-свободной грамматики. Преобразовать контекстно-свободную грамматику G к приведённому виду, выписывая результаты применения каждого шага используемого алгоритма.
G: S Ab | Ba
A Ca
B Bb | Da
C Aa | Bb | a | b
D Db | Ba
10. По приведенной обратной польской записи фрагмента программы, написанной на языке Си++, восстановите этот фрагмент двумя способами: сначала, пользуясь операторами условного и безусловного перехода на метку, а затем (если это возможно), пользуясь только операторами структурного программирования без переходов. Операция ПОЛИЗ '@' соответствует унарной операции изменения знака.
ПОЛИЗ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
&a | x | @ | 11 | * | y | x | @ | / | — | += | ; | &x | #+ | 5 | &y | +# |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | |
— | x | + | 1 | — | <= | 28 | !F | 1 | ! | &y | &x | y | 8 | + | = | 7 | + | = | ; | |