рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдмреНрд░реЗрдирдлрдХ рднрд╛рд╖рд╛ рдХреЛ рд▓рд┐рдпрд╛, рдпрд╣ рдЗрддрдирд╛ рдЫреЛрдЯрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдирдИ рдФрд░ рдХрд╛рдлреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдореВрд▓ рднрд╛рд╖рд╛ рдХреЗ рдЙрддреНрд╕рд╛рд╣ рдХреЛ рди рдЦреЛрддреЗ рд╣реБрдП - рдореЗрд░реА рднрд╛рд╖рд╛ рдЕрднреА рднреА рдЕрдкрдиреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рддрд░рд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдорд╕реНрддрд┐рд╖реНрдХ рдХреЛ рдкреАрдбрд╝рд╛ рджреЗрдЧреА!
рддреЛ рдмреНрд░реЗрдирдлреБрдХред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдПрди рд░рдЬрд┐рд╕реНрдЯрд░ / рд╕реЗрд▓ рд╣реИрдВред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рдкрд╣реБрдВрдЪ рдЙрди рд╕рднреА рддрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдордирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдпрд╛рдиреА рд╕реЗрд▓ 2 рд╕реЗ рд╕реЗрд▓ 7 рдкрд░ рддреБрд░рдВрдд рдЬрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдпрд╣ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рднрд╛рд╖рд╛ рдХреЗ "рдХреАрд╡рд░реНрдб":
- > - рджрд╛рдИрдВ рдУрд░ рд╕реЗрд▓ рдкрд░ рдЬрд╛рдПрдВред
- <- рд╕реЗрд▓ рдореЗрдВ рдмрд╛рдИрдВ рдУрд░ рдЬрд╛рдПрдВред
- + - рд╕реЗрд▓ рд╡реИрд▓реНрдпреВ рдХреЛ рдПрдХ рд╕реЗ рдмрдврд╝рд╛рдирд╛ред
- - - рдПрдХ рд╕реЗ рд╕реЗрд▓ рд╡реИрд▓реНрдпреВ рдХреЛ рдШрдЯрд╛рдПрдВред
- , - рдорд╛рдирдХ рдЗрдирдкреБрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рд╕реЗрд▓ рдореЗрдВ рдорд╛рди рдкрдврд╝реЗрдВред
- ред - рдПрдХ рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рд╕реЗрд▓ рд╡реИрд▓реНрдпреВ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВред
- [- рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдХрд╛ рдорд╛рди 0 рдирд╣реАрдВ рд╣реИ рдФрд░ рдЕрдЧрд▓реЗ рд╕реЗрд▓ рдкрд░ рдЬрд╛рдПрдВ рддреЛ рд▓реВрдк рдХреЛ рд╢реБрд░реВ рдХрд░реЗрдВред
- ] рдЬрдмрдХрд┐ рдмреНрд▓реЙрдХ рдХрд╛ рдЕрдВрдд рд╣реИред рдпрджрд┐ "рд╕рд╢рд░реНрдд рдХрдХреНрд╖" рдХрд╛ рдорд╛рди 0 рдирд╣реАрдВ рд╣реИ, рддреЛ рдЪрдХреНрд░ рдХреЛ рдЬрд╛рд░реА рд░рдЦреЗрдВ ("рд╕рд╢рд░реНрдд рдХрдХреНрд╖" рд╡рд╣ рдХрдХреНрд╖ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЪрдХреНрд░ рд╢реБрд░реВ рд╣реБрдЖ рдерд╛)ред
рдЬреЛрдбрд╝реЗ рдЧрдП "рдХреАрд╡рд░реНрдб":
- $ - рд╕реЗрд▓ рдореЗрдВ рдорд╛рди рдХреЛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝реЗрдВ (> ANCII рд╡рд░реНрдг рдХреЗ рд░реВрдк рдореЗрдВ рд░реАрдбрд┐рдлрд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ)
- ! - рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ
- {- рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд, рд╢реБрд░реБрдЖрдд рдХреЗ рдмрд╛рдж рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рд╣реЛрддрд╛ рд╣реИ (рдЕрдХреНрд╖рд░% <рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо>% рдХреЗ рдмреАрдЪ рдЕрдХреНрд╖рд░реЛрдВ рдХрд╛ рдХреЛрдИ рднреА рдЕрдиреБрдХреНрд░рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рд░рд┐рдЯрд░реНрди рдорд╛рди рдХреЛ рдХреЙрд▓рд┐рдВрдЧ рдмреНрд▓реЙрдХ рдХреЗ рд╡рд░реНрддрдорд╛рди рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
- } - рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдЕрдВрдд
- - - рдЯрд┐рдкреНрдкрдгреА рдХреА рд╢реБрд░реБрдЖрдд
- ) - рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдЕрдВрдд
- @% <рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо>% - рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓
- ^ - рд╕реЗрд▓ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░реЗрдВ
рдЪреВрдВрдХрд┐ рдХреАрд╡рд░реНрдб рдХреЗ рдкреВрд░реЗ рд╕реЗрдЯ рдореЗрдВ ANCII рд╡рд░реНрдг рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕:
//
const char bf_next = '>';
const char bf_prev = '<';
const char bf_incr = '+';
const char bf_decr = '-';
const char bf_prnt = '.';
const char bf_read = ',';
const char bf_wBeg = '[';
const char bf_wEnd = ']';
//
const char bf_pNum = '!' ;
const char bf_rNum = '$';
const char bf_fBeg = '{';
const char bf_fEnd = '}';
const char bf_fNme = '%';
const char bf_comm= '(';
const char bf_call = '@';
const char bf_null = '^';
рд╕рд╛рдорд╛рдиреНрдпрддрд╛ рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд┐рдирд╛, рд╣рдо рд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реЗрд▓ рд▓реЗрддреЗ рд╣реИрдВ, 256 рдХрд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдЧрд░ рд╣рдо рдПрдХ рдЕрдорд╛рдиреНрдп рд╕реЗрд▓ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдмрд╣реБрдд рдкрд╣рд▓реЗ рд╕реЗрд▓ рдореЗрдВ рдЬрд╛рдПрдВрдЧреЗ (рдпрджрд┐ рд╕рдВрдХреНрд░рдордг рдмрд╛рдИрдВ рдУрд░ рд╣реИ) рдпрд╛ рдмрд╣реБрдд рдЕрдВрддрд┐рдо рддрдХ (рдпрджрд┐ рджрд╛рдИрдВ рдУрд░ рд╕рдВрдХреНрд░рдордг рд╣реИ)ред
рдЬреЛрдбрд╝реЗрдВ:
const unsigned long regSize = 256; //
long reg[ regSize ]; //
long stck[ regSize ]; // ,
void resetRegisters(); //
void printRegistres(); //
рдЕрдм, рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ test.bf рд╣реИ, рдЗрдирдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдореЗрд░реА рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИ рдпрд╛ рдореЗрд░реЗ рдореВрд▓ рдмреНрд░реЗрдирдлрдХ рдореЗрдВред рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ "рдкрд┐рдЫрдбрд╝реА рдЕрдиреБрдХреВрд▓рддрд╛" рдкреНрд░рджрд╛рди рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдлрд┐рд░, рд╕рд╛рдорд╛рдиреНрдпрддрд╛ рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд┐рдирд╛, рд╣рдо рд╕рднреА рдХреЛрдб рдХреЛ рдХреБрдЫ рд╕реАрдорд┐рдд рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛рдиреА рджреБрднрд╛рд╖рд┐рдпрд╛ рд╕реАрдорд┐рдд рдЖрдХрд╛рд░ рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЖрдЗрдП рдЗрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ:
const unsigned long maxCodeSize = 1024000; /* */
unsigned long realCodeSize; // realCodeSize < maxCodeSize
char code[maxCodeSize]; //
рджреБрднрд╛рд╖рд┐рдпрд╛ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдХреЛрдб рдкрдврд╝рддрд╛ рд╣реИред рдПрдХ рд╡рд░реНрдг рд╕рд░рдгреА рдореЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд░реАрдбрдХреЛрдб () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЧреИрд░-рд░рд┐рдХреНрдд рдкрд╛рда рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, m_realCodeSize рдореЗрдВ рдХреЛрдб рдореЗрдВ рд╕рдЯреАрдХ рд╡рд░реНрдг рд╣реЛрдВрдЧреЗ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
int main (int argc, char ** argv)
{
рд╕реНрд╡рд╛рдЧрдд ();
resetRegisters ();
readCode ("test.bf");
рд▓реВрдк (0, realCodeSize - 1, regSize, reg);
рд╡рд╛рдкрд╕реА 0;
}
рдЕрдЧрд▓рд╛, рд╣рдо рд▓реВрдк рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯреИрдХ рдХреА рдирдХрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
bool loop( unsigned long from,
unsigned long to,
unsigned long condRegIndx,
unsigned long currReg,
long* registers );
bool runFunction( unsigned long from,
unsigned int to,
unsigned int& retValue);
void copyRegistersTo( long* source, long* destination );
рдкрд╣рд▓рд╛ рд▓реВрдк рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рд╣реА рд▓реМрдЯреЗрдЧрд╛ рдпрджрд┐ рд▓реВрдк рдмрд┐рдирд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛, рдЕрд░реНрдерд╛рддреНред рдХреЛрдИ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдирд╣реАрдВред
рджреВрд╕рд░рд╛ рд╡реНрдпрдХреНрддрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХрд░реЗрдЧрд╛, рдФрд░ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рд░рд┐рдЯрд╡рд▓ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдЙрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕ рдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЛ рдЗрд╕рдХреЗ рдЕрдВрдд рдХреЗ рдмрд╛рдж рдлрд╝рдВрдХреНрд╢рди рд╕реНрдЯреИрдХ рдХрд╛ рдкрд╣рд▓рд╛ рд░рдЬрд┐рд╕реНрдЯрд░ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред
рдЬрдмрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓реВрдк рдХреА рдмрд╛рдд рдХрд░рддреЗ рд╣реБрдП, рд▓реВрдк рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рддрдХ рдЬрд╛рд░реА рд░рд╣ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдлреНрд░реАрдЬрд┐рдВрдЧ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЪрдХреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдПрдХ рдЪрд░ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВред
const unsigned long maxLoopCycles = 999999;
рдкрд╣рд▓реЗ рд╣рдо рдкрд┐рдЫрдбрд╝реА рдЕрдиреБрдХреВрд▓рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ рдЕрднреА рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдмреНрд░реЗрдирдлрдХ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рджреЗрдВред
рд╣рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
bool makeCommand( char command, long* registers, unsigned long currReg )
unsigned long findLoopEnd( const unsigned long from )
рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рджреВрд╕рд░реЗ рдФрд░ рддреАрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рддреАрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рдХрд┐рд╕ рд╕реЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреВрд╕рд░реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдЕрд▓рдЧ рд╣реИрдВ, рдФрд░ рдЙрди рдкрд░ рд╕рдВрдЪрд╛рд▓рди рд╕рдорд╛рди рд╣реИрдВред
рдирд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рджреВрд╕рд░рд╛ рдлрд╝рдВрдХреНрд╢рди, рдЪрдХреНрд░ рдХрд╛ рдЕрдВрдд рдкрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдг '' '' рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Brainfuck рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рджреБрднрд╛рд╖рд┐рдпрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ
рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛
$[+<->]<<$>!<>>++++[++++++++++<->]<+++.++++++++++++++++++<<<!>[<-<+>>]>>.<<<!
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рджреБрднрд╛рд╖рд┐рдпрд╛ рдПрдХ + b = c рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рджреЛ рдирдВрдмрд░реЛрдВ рдХреЗ рдпреЛрдЧ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ред
рд╕реМрднрд╛рдЧреНрдп ... рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ!
рдкреБрдирд╢реНрдЪ
рдпрджрд┐ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдмрд╛рдж рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдмрд╛рдХреА рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред