рд╣рдо рдЕрдкрдиреА рдЧреВрдврд╝ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рджреБрднрд╛рд╖рд┐рдпрд╛ рд▓рд┐рдЦ тАЛтАЛрд░рд╣реЗ рд╣реИрдВ

рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдмреНрд░реЗрдирдлрдХ рднрд╛рд╖рд╛ рдХреЛ рд▓рд┐рдпрд╛, рдпрд╣ рдЗрддрдирд╛ рдЫреЛрдЯрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдирдИ рдФрд░ рдХрд╛рдлреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдореВрд▓ рднрд╛рд╖рд╛ рдХреЗ рдЙрддреНрд╕рд╛рд╣ рдХреЛ рди рдЦреЛрддреЗ рд╣реБрдП - рдореЗрд░реА рднрд╛рд╖рд╛ рдЕрднреА рднреА рдЕрдкрдиреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рддрд░рд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдорд╕реНрддрд┐рд╖реНрдХ рдХреЛ рдкреАрдбрд╝рд╛ рджреЗрдЧреА!

рддреЛ рдмреНрд░реЗрдирдлреБрдХред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдПрди рд░рдЬрд┐рд╕реНрдЯрд░ / рд╕реЗрд▓ рд╣реИрдВред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рдкрд╣реБрдВрдЪ рдЙрди рд╕рднреА рддрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдордирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдпрд╛рдиреА рд╕реЗрд▓ 2 рд╕реЗ рд╕реЗрд▓ 7 рдкрд░ рддреБрд░рдВрдд рдЬрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдпрд╣ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рднрд╛рд╖рд╛ рдХреЗ "рдХреАрд╡рд░реНрдб":



рдЬреЛрдбрд╝реЗ рдЧрдП "рдХреАрд╡рд░реНрдб":


рдЪреВрдВрдХрд┐ рдХреАрд╡рд░реНрдб рдХреЗ рдкреВрд░реЗ рд╕реЗрдЯ рдореЗрдВ 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 рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рджреЛ рдирдВрдмрд░реЛрдВ рдХреЗ рдпреЛрдЧ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ред

рд╕реМрднрд╛рдЧреНрдп ... рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ!

рдкреБрдирд╢реНрдЪ
рдпрджрд┐ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдмрд╛рдж рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдмрд╛рдХреА рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред

Source: https://habr.com/ru/post/In116004/


All Articles