Комиссия
Описание файла
Документ из архива "Комиссия", который расположен в категории "". Всё это находится в предмете "практикум (прикладное программное обеспечение и системы программирования)" из 4 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Онлайн просмотр документа "Комиссия"
Текст из документа "Комиссия"
-
КС (УКС)
L={a2nbmc2k | m=n+k, n,k>=1} Не более 3 нетерминалов.
Отв:
S->AB
A->aaAb|aab
B->bBcc|bcc
-
Вставить действия, переводящие грамматику в полиз
E->TE’
T->FT’
F->notP|P
E’->orTE’|
T’->andFT’|
P->(E)|a|b
Отв:
E->TE’
T->FT’
F->notP<not>|P
E’->orT<or>E’|
T’->andF<and>T’|
P->(E)|a<cout << a;>|b<cout << b;>
-
Преобразовать для РС. Определить язык. Дополнить грамматику действиями, исключающими из языка все цепочки, не удовлетворяющие условию: количество букв ‘b’ и ’c’ одинаково и не меньше 10. Написать анализатор, действуя РС методом.
S->aA
A->Abb|BB
B->cB|a
Отв:
S->aBBA
A->bbA|
B->cB|a
L={a{c}*a{c}*a{bb}*}
S->a<int i=0, j=0;>BBA<if (i==0 && j>=10)throw ”error”;>
A->bb<i+=2;>A|
B->cB<i--;j++;>|a
void S(void)
{
if(equal(“a”)) curr_lex=getlex();
else throw “error”;
B(); B(); A();
if(!equal(“”)) throw “error”;
}
void B(void)
{
if(equal(“c”))
{
curr_lex=getlex();
B();
}else
if(!equal(“a”)) throw “error”;
curr_lex=getlex();
}
void A(void)
{
if(equal(“b”))
{
curr_lex=getlex();
if(!equal(“b”)) throw “error”;
curr_lex=getlex();
A();
}
}
4.
-
Абстрактный класс должен содержать только чисто виртуальные функции
-
throw без выражения может появиться только в try блоке, вложенном в другой try блок
-
указатель на базовый класс может быть явно преобразован в указатель на его производный класс
-
если в классе все описанные конструкторы имеют параметры, то компилятор автоматически сгенерирует конструктор по умолчанию
-
все функции виртуального базового класса становятся виртуальными
-
Найти и вычеркнуть команды с ошибками. Какие функции будут вызваны при вызове f().
class X
{
public:
virtual void g1();
virtual void g2();
virtual void g3();
};
class Y: public X
{
public:
virtual void g1();
void g2();
virtual void g3(int);
};
void f()
{
X a;
Y b;
X *p=&a;
p->g1();
p->g2();
p->g3();
p->g3(1);
p=&b;
p->g1();
p->g2();
p->g3();
p->g3(1);
}
-
Для класса rational описать перегруженную операцию умножения так, чтобы были верны все действия функции g(). Возможно ли это? Если нет, то почему. Если возможно, то описать её и объяснить, какие операции будут выполняться при вызове функции g().
class rational
{
int p,q;
public:
rational (int a=0, int b=1)
{
p=a;
q=b;
}
… … …
};
void g()
{
rational x(1,2), y(4), z;
int t=3;
z=x*y;
z=z*t;
z=t*z;
}