рд╕рддреНрд░реЛрдВ рдХреЗ рдвреЗрд░ рдореЗрдВ рдПрдХ рд╕реБрдИ, рдпрд╛ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдмрд╛рдЗрдЯрдХреЛрдб


17 рдмрд┐рд▓рд┐рдпрди рдЗрд╡реЗрдВрдЯ, 60 рдорд┐рд▓рд┐рдпрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░ рдФрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдбреЗрдЯреНрд╕ рд░реЛрдЬрд╛рдирд╛ рдмреЗрде рдореЗрдВ рд╣реЛрддреА рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдирд╛ SQL рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдмрдбрд╝реЗ рдХрд░реАрдиреЗ рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИред


рджрд░реНрдЬрдиреЛрдВ рдЯреЗрд░рд╛рдмрд╛рдЗрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЖрдзреБрдирд┐рдХ рд╡рд┐рддрд░рд┐рдд рд▓реЗрдирджреЗрди рдбреЗрдЯрд╛рдмреЗрд╕ - рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХрд╛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪрдорддреНрдХрд╛рд░ред рд▓реЗрдХрд┐рди рдПрд╕рдХреНрдпреВрдПрд▓, рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдирдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдореЗрдВ рд╕рдВрдмрдВрдзрдкрд░рдХ рдмреАрдЬрдЧрдгрд┐рдд рдХреЗ рдЕрд╡рддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЕрднреА рддрдХ рд╣рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдЯреНрдпреВрдкрд▓реНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреНрд░рд╢реНрди рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред


рдЖрднрд╛рд╕реА рдорд╢реАрдиреЛрдВ рдкрд░ рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЕрдВрддрд┐рдо рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рджрд┐рд▓рдЪрд╕реНрдк рд╕рддреНрд░реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ - рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЗрдВрдЬрди ( рд╕реБрдЕрд░ рдореИрдЪ ), рдЬреЛ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди, рдмрд╛рдпреЛрдЯреЗрдХ рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдореБрдлреНрдд рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ!


рднрд╛рдЧ рдПрдХ, рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ
рднрд╛рдЧ рджреЛ, рдЕрдиреБрдХреВрд▓рди
рднрд╛рдЧ рддреАрди, рд▓рд╛рдЧреВ (рд╡рд░реНрддрдорд╛рди)


рдШрдЯрдирд╛рдУрдВ рдФрд░ рд╕рддреНрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░реЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЬрд▓реНрджреА рдФрд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рд╣рдо "рд╕рднреА рд╕рддреНрд░реЛрдВ рдХреЛ рдЧрд┐рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдмрд╛рдж", "рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкреИрдЯрд░реНрди рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╕рддреНрд░ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЦреЛрдЬреЗрдВ" рдЬреИрд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рддреНрд░ рдвреВрдВрдврдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, "рд╕рддреНрд░ рдХрд╛ рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рдЬреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рдж рд╣реБрдЖ рд╣реИ" рдпрд╛ "рдХрд┐рддрдиреЗ рд╕рддреНрд░реЛрдВ рдореЗрдВ рдХреБрдЫ рднрд╛рдЧреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ" рдЯреЗрдореНрдкрд▓реЗрдЯред " рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рд╕рдВрджрд┐рдЧреНрдз рд╕рддреНрд░, рдлрд╝рдирд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЖрджрд┐ рдХреА рдЦреЛрдЬ рдХрд░рдирд╛ред


рд╡рд╛рдВрдЫрд┐рдд рдЕрдиреБрд╡рд░реНрддреА рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдкрдиреЗ рд╕рд░рд▓рддрдо рд░реВрдк рдореЗрдВ, рдпрд╣ рдХрд╛рд░реНрдп рдПрдХ рдкрд╛рда рдореЗрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЦреЛрдЬрдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ; рд╣рдо рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред рдЖрдзреБрдирд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЗрдВрдЬрди рдХреЗ рдЖрдзреБрдирд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдЖрдкрдиреЗ рдЗрд╕рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реИ!) рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиред


рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреА рдЖрднрд╛рд╕реА рдорд╢реАрдиреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рд╣рдо рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВрдЧреЗред


рдПрдХ рдШрдЯрдирд╛ рдореЗрдВ рдПрдХ рдШрдЯрдирд╛ рдкреНрд░рдХрд╛рд░, рд╕рдордп, рд╕рдВрджрд░реНрдн рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред


рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдирд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рдВрджрд░реНрдн рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реВрдЪрд┐рдпреЛрдВ рд╕реЗ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рддреЛ рд╕рдВрджрд░реНрдн рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░реАрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬрд┐рд╕ рдкрд░ рджреА рдЧрдИ рдШрдЯрдирд╛ рд╣реБрдИ рд╣реИред


рдПрдХ рдИрд╡реЗрдВрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдХ рдордирдорд╛рдирд╛ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рдИрд╡реЗрдВрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдШрдЯрдирд╛ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдпрд╛ рдХрдИ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред


рдПрдХ рд╕рддреНрд░ рд╕рдордп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрд░рдордмрджреНрдз рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИред


рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдЕрдВрдд рдореЗрдВ рд╡реНрдпрд╛рдкрд╛рд░ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЛред рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдЪрд░реНрдЪрд╛, рдердо рдЧрдпрд╛, рдФрд░ рдореИрдВ рдордВрдЪ рдкрд░ рдмрд╛рд╣рд░ рдЪрд▓рд╛ рдЧрдпрд╛ред


рдХрд╛рдЧрдЬ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдкрд░ рддреБрд▓рдирд╛ рдХрд░реЗрдВ



рдЗрд╕ рдЖрднрд╛рд╕реА рдорд╢реАрди рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЗрдирдкреБрдЯ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рд╣реИред рд╣рдо рдкреВрд░реЗ рд╕рддреНрд░ рдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рдирд╣реАрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЖрднрд╛рд╕реА рдорд╢реАрди рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдШрдЯрдирд╛ рд╕реЗ рдШрдЯрдирд╛ рддрдХ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рд╕рддреНрд░ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореЗрдВ рдлреАрдб рдХрд░реЗрдВрдЧреЗред


рдЖрдЗрдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:


matcher *matcher_create(uint8_t *bytecode); match_result matcher_accept(matcher *m, uint32_t event); void matcher_destroy(matcher *matcher); 

рдпрджрд┐ рд╕рдм рдХреБрдЫ matcher_create рдФрд░ matcher_destroy рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рд╣реИ, рддреЛ matcher_accept рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред Matcher_accept рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдФрд░ рдЕрдЧрд▓реА рдШрдЯрдирд╛ (32 рдмрд┐рдЯреНрд╕, рдЬрд╣рд╛рдВ рдШрдЯрдирд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП 16 рдмрд┐рдЯреНрд╕ рдФрд░ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП 16 рдмрд┐рдЯреНрд╕) рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдХреЛрдб рджреЗрддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рд╕рдордЭрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдХреЛ рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:


 typedef enum match_result { //       MATCH_NEXT, //    ,      MATCH_OK, //       ,      MATCH_FAIL, //     MATCH_ERROR, } match_result; 

рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди opcodes:


 typedef enum matcher_opcode { //  ,      OP_ABORT, //      ( -  ) OP_NAME, //     ( -  ) OP_SCREEN, //    OP_NEXT, //    OP_MATCH, } matcher_opcode; 

рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдХрд╛ рдореБрдЦреНрдп рд▓реВрдк:


 match_result matcher_accept(matcher *m, uint32_t next_event) { #define NEXT_OP() \ (*m->ip++) #define NEXT_ARG() \ ((void)(m->ip += 2), (m->ip[-2] << 8) + m->ip[-1]) for (;;) { uint8_t instruction = NEXT_OP(); switch (instruction) { case OP_ABORT:{ return MATCH_ERROR; } case OP_NAME:{ uint16_t name = NEXT_ARG(); if (event_name(next_event) != name) return MATCH_FAIL; break; } case OP_SCREEN:{ uint16_t screen = NEXT_ARG(); if (event_screen(next_event) != screen) return MATCH_FAIL; break; } case OP_NEXT:{ return MATCH_NEXT; } case OP_MATCH:{ return MATCH_OK; } default:{ return MATCH_ERROR; } } } #undef NEXT_OP #undef NEXT_ARG } 

рдЗрд╕ рд╕рд░рд▓ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд╣рдорд╛рд░реА рдЖрднрд╛рд╕реА рдорд╢реАрди рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрд╛рдпрдЯреЗрдХреЛрдб рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдкреИрдЯрд░реНрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдЬреИрд╕реЗ, рдпрд╣ рдХреЗрд╡рд▓ рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╕рдВрдХреНрд╖рд┐рдкреНрдд рддреБрд▓рдирд╛ рдирд╣реАрдВ рд╣реИ: рд╡рд╛рдВрдЫрд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдФрд░ рдЗрдирдкреБрдЯ рд▓рд╛рдЗрдиред


рдЙрдкрд╕рд░реНрдЧ рдЙрдкрд╕рд░реНрдЧ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рди рдХреЗрд╡рд▓ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдкреИрдЯрд░реНрди рдвреВрдВрдврдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╕рддреНрд░ рдореЗрдВ рдПрдХ рдордирдорд╛рдирд╛ рд╕реНрдерд╛рди рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВред рднреЛрд▓реЗ рд╕рдорд╛рдзрд╛рди рдкреНрд░рддреНрдпреЗрдХ рд╕рддреНрд░ рдШрдЯрдирд╛ рд╕реЗ рдорд┐рд▓рд╛рди рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рдкреНрд░рддреНрдпреЗрдХ рдИрд╡реЗрдВрдЯ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдЕрд▓реНрдЧреЛрд░рд┐рдердорд┐рдХ рдмреЗрдмреАрдЬрд╝ рдЦрд╛рдиреЗ рд╕реЗ рд╣реИред


рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд▓реЗрдЦ рд╕реЗ рдЙрджрд╛рд╣рд░рдг , рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ, рд░реЛрд▓рдмреИрдХ (рдЕрдВрдЧреНрд░реЗрдЬреА рдмреИрдХрдЯреНрд░реИрдХрд┐рдВрдЧ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдореИрдЪ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреЛрдб, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реНрд▓рд┐рдорд░ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рджреВрд░ рдирд╣реАрдВ рд╣реБрдИ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдирд╛ рдХреЛ рдХрдИ рдмрд╛рд░ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ред


рдЖрдк рдРрд╕реЗ рдирд╣реАрдВ рд░рд╣ рд╕рдХрддреЗ


рдореБрдЭреЗ, рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рдФрд░ рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ



рдЖрдЗрдП рд╣рдо рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддреЗ рд╣реИрдВ: рд╣рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдирд╛ рд╕реЗ рдПрдХ рдирдИ рддреБрд▓рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ред рддреЛ рд╣рдо рдРрд╕рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ? рдЖрднрд╛рд╕реА рдорд╢реАрди рдХреЛ рдХрдИ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдкрд░ рдЪрд▓рдиреЗ рджреЗрдВ!


рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдирдИ рдЗрдХрд╛рдИ - рдПрдХ рдзрд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдПрдХрд▓ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИ - рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢ рдХреЛ:


 typedef struct matcher_thread { uint8_t *ip; } matcher_thread; 

рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЕрдм рдЖрднрд╛рд╕реА рдорд╢реАрди рдореЗрдВ рд╣рдо рд╕реНрдкрд╖реНрдЯ рд╕реВрдЪрдХ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдереНрд░реЗрдбреНрд╕ рдХреА рджреЛ рд╕реВрдЪрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдиреАрдЪреЗ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ):


 typedef struct matcher { uint8_t *bytecode; /* Threads to be processed using the current event */ matcher_thread current_threads[MAX_THREAD_NUM]; uint8_t current_thread_num; /* Threads to be processed using the event to follow */ matcher_thread next_threads[MAX_THREAD_NUM]; uint8_t next_thread_num; } matcher; 

рдФрд░ рдпрд╣рд╛рдБ рдЕрджреНрдпрддрди рдореБрдЦреНрдп рд▓реВрдк рд╣реИ:


 match_result matcher_accept(matcher *m, uint32_t next_event) { #define NEXT_OP(thread) \ (*(thread).ip++) #define NEXT_ARG(thread) \ ((void)((thread).ip += 2), ((thread).ip[-2] << 8) + (thread).ip[-1]) /*         - */ add_current_thread(m, initial_thread(m)); //         for (size_t thread_i = 0; thread_i < m->current_thread_num; thread_i++ ) { matcher_thread current_thread = m->current_threads[thread_i]; bool thread_done = false; while (!thread_done) { uint8_t instruction = NEXT_OP(current_thread); switch (instruction) { case OP_ABORT:{ return MATCH_ERROR; } case OP_NAME:{ uint16_t name = NEXT_ARG(current_thread); //  ,      ,    //     next_threads,    if (event_name(next_event) != name) thread_done = true; break; } case OP_SCREEN:{ uint16_t screen = NEXT_ARG(current_thread); if (event_screen(next_event) != screen) thread_done = true; break; } case OP_NEXT:{ //    , ..      // next_threads add_next_thread(m, current_thread); thread_done = true; break; } case OP_MATCH:{ return MATCH_OK; } default:{ return MATCH_ERROR; } } } } /*      ,    */ swap_current_and_next(m); return MATCH_NEXT; #undef NEXT_OP #undef NEXT_ARG } 

рдкреНрд░рд╛рдкреНрдд рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдирд╛ рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ current_threads рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдирдпрд╛ рдереНрд░реЗрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реБрдП current_threads рд╕реВрдЪреА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред


рдпрджрд┐ рдХреЛрдИ рдЕрдЧрд▓рд╛ рдирд┐рд░реНрджреЗрд╢ рд╕рд╛рдордиреЗ рдЖрдпрд╛ рд╣реИ, рддреЛ рдереНрд░реЗрдб рдХреЛ рдЕрдЧрд▓реА_рд╢рд░реНрддреЛрдВ рдореЗрдВ рд╕реВрдЪреА рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЕрдЧрд▓реА рдШрдЯрдирд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред


рдпрджрд┐ рдереНрд░реЗрдб рдкреИрдЯрд░реНрди рдкреНрд░рд╛рдкреНрдд рдИрд╡реЗрдВрдЯ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдРрд╕реЗ рдереНрд░реЗрдб рдХреЛ рдмрд╕ рдиреЗрдХреНрд╕реНрдЯ_рдереНрд░реЗрдбреНрд╕ рд╕реВрдЪреА рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред


MATCH рдирд┐рд░реНрджреЗрд╢ рддреБрд░рдВрдд рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ, рд░рд┐рдЯрд░реНрди рдХреЛрдб рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреИрдЯрд░реНрди рд╕рддреНрд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред


рдзрд╛рдЧреЗ рдХреА рд╕реВрдЪреА рдХреЗ рдХреНрд░реЙрд▓ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рд╡рд░реНрддрдорд╛рди рдФрд░ рдЕрдЧрд▓реА рд╕реВрдЪрд┐рдпреЛрдВ рдХреА рдЕрджрд▓рд╛-рдмрджрд▓реА рдХреА рдЬрд╛рддреА рд╣реИред


рджрд░рдЕрд╕рд▓, рдмрд╕ рдЗрддрдирд╛ рд╣реАред рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рд╡рд╕реНрддреБрддрдГ рд╡рд╣реА рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗ: рдЙрд╕реА рд╕рдордп рд╣рдо рдХрдИ рдЯреЗрдореНрдкрд▓реЗрдЯреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╕рддреНрд░ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдорд┐рд▓рд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред


рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ рдкрд╣рдЪрд╛рди рдФрд░ рд╢рд╛рдЦрд╛рдПрдБ



рдШрдЯрдирд╛рдУрдВ рдХреЗ рдПрдХ рд░реИрдЦрд┐рдХ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░рдирд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдкреВрд░реНрдг рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдФрд░ рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рд╣рдордиреЗ рдЬреЛ рдкреНрд░рд╡рд╛рд╣ рдмрдирд╛рдП, рд╡реЗ рдпрд╣рд╛рдВ рднреА рдЙрдкрдпреЛрдЧреА рд╣реИрдВред


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рджреЛ рдпрд╛ рддреАрди рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рдвреВрдВрдврдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХреА рддрд░реНрдЬ рдкрд░ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐: "рдП! рдмреАрд╕реА"ред рдЗрд╕ рдХреНрд░рдо рдореЗрдВ, рдкреНрд░рддреАрдХ "a" рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рдЗрд╕реЗ рдмрд╛рдЗрдЯрдХреЛрдб рдореЗрдВ рдХреИрд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░реЗрдВ? рдЖрд░рд╛рдо рд╕реЗ!


рд╣рдо рджреЛ рдзрд╛рдЧреЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП: рдкреНрд░рддреАрдХ "рдП" рдФрд░ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрджреЗрд╢ (рдПрд╕рдкреАрдПрд▓рдЖрдИрдЯреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдбреАрдЖрд░ 1, рдПрдбреАрдЖрд░ 2) рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрддреЗ рд╕реЗ рджреЛ рдзрд╛рдЧреЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред SPLIT рдХреЗ рдЕрд▓рд╛рд╡рд╛, JUMP рднреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЬреЛ рд╕реАрдзреЗ рд╕реАрдзреЗ рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрди рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ:


 typedef enum matcher_opcode { OP_ABORT, OP_NAME, OP_SCREEN, OP_NEXT, //     OP_JUMP, //         OP_SPLIT, OP_MATCH, //     OP_NUMBER_OF_OPS, } matcher_opcode; 

рд▓реВрдк рдЦреБрдж рдФрд░ рдмрд╛рдХреА рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рдмрджрд▓рддреЗ - рд╣рдо рд╕рд┐рд░реНрдл рджреЛ рдирдП рд╣реИрдВрдбрд▓рд░ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ:


 // ... case OP_JUMP:{ /*   ,      */ uint16_t offset = NEXT_ARG(current_thread); add_current_thread(m, create_thread(m, offset)); break; } case OP_SPLIT:{ /*        */ uint16_t left_offset = NEXT_ARG(current_thread); uint16_t right_offset = NEXT_ARG(current_thread); add_current_thread(m, create_thread(m, left_offset)); add_current_thread(m, create_thread(m, right_offset)); break; } // ... 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдирд┐рд░реНрджреЗрд╢ рд╡рд░реНрддрдорд╛рди рд╕реВрдЪреА рдореЗрдВ рдереНрд░реЗрдбреНрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рд╡реЗ рд╡рд░реНрддрдорд╛рди рдШрдЯрдирд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдЬрд┐рд╕ рдзрд╛рдЧреЗ рдХреЗ рднреАрддрд░ рд╢рд╛рдЦрд╛ рд╣реЛрддреА рд╣реИ рд╡рд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдзрд╛рдЧреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред


рдЗрд╕ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЖрднрд╛рд╕реА рдорд╢реАрди рдореЗрдВ рд╕рдмрд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдзрд╛рдЧреЗ рдФрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рдпрд╣ рдЬреЛрдбрд╝реА рд▓рдЧрднрдЧ рд╕рднреА рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╕рдордп рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред


рдШрдЯрдирд╛рдУрдВ рдкрд░ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐


рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреБрдХреНрдд рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдФрд░ рдЙрдкрдХрд░рдг рд╣реИрдВ, рддреЛ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреЗ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╕реЗ рдирд┐рдкрдЯ рд╕рдХрддреЗ рд╣реИрдВред


рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдСрдкрдХреЛрдб рдХреА рдореИрдиреНрдпреБрдЕрд▓ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдЬрд▓реНрджреА рд╕реЗ рдердХ рдЬрд╛рддреА рд╣реИред рдкрд┐рдЫрд▓реА рдмрд╛рд░, рдореИрдВрдиреЗ рдПрдХ рдкреВрд░реНрдг рдкрд╛рд░реНрд╕рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рдЪ-рдЧреНрд░реВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкрд┐рдЧрд▓реЗрдЯреЗрдХ рдорд┐рдиреА-рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд░реЗрдбреНрд╕рд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рджрд┐рдЦрд╛рдпрд╛ред рдореИрдВ рдХреЛрдб рдХреА рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рд╕реЗ рдЗрддрдирд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдерд╛ рдХрд┐ рдореИрдВрдиреЗ рд░реЗрдбреНрд╕рд▓ рдХреА рдорджрдж рд╕реЗ рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рд╕реМ рдпрд╛ рджреЛ рд╕реМ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрдХрд▓рдХ рд▓рд┐рдЦрд╛ред рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рдХ рдФрд░ рдирд┐рд░реНрджреЗрд╢ GitHub рдкрд░ рд╣реИрдВред рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖рд╛ рдореЗрдВ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рджреЛ рдлрд╛рдЗрд▓реЛрдВ (рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рд╕рддреНрд░ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА) рдХреЛ рдкрдврд╝рддрд╛ рд╣реИред


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЦреБрдж рдХреЛ рдШрдЯрдирд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рдВрджрд░реНрдн рддрдХ рд╕реАрдорд┐рдд рд░рдЦрддреЗ рд╣реИрдВред рдШрдЯрдирд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдПрдХ рд╣реА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рд╕рдВрджрд░реНрдн рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдПрдХ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг:


 > python regexp/regexp.py "13" # ,     13 NEXT NAME 13 MATCH 

рдЕрдм рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 python regexp/regexp.py "13:12" #  13,  12 NEXT NAME 13 SCREEN 12 MATCH 

рдХреНрд░рдорд┐рдХ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рджреНрд╡рд╛рд░рд╛):


 > python regexp/regexp.py "13 11 10:9" 08:40:52 NEXT NAME 13 NEXT NAME 11 NEXT NAME 10 SCREEN 9 MATCH 

рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдЯреЗрдореНрдкрд▓реЗрдЯ:


 > python regexp/regexp.py "12|13" SPLIT L0 L1 L0: NEXT NAME 12 JUMP L2 L1: NEXT NAME 13 L2: MATCH 

рдПрдХ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд░реЗрдЦрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдпреЗ рдЯреИрдЧ рд╣реИрдВред SPLIT рдЕрдиреБрджреЗрд╢ рджреЛ рдереНрд░реЗрдб рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рд▓реЗрдмрд▓ L0 рдФрд░ L1 рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ, рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдкрд╣рд▓реА рд╢рд╛рдЦрд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ JUMP рдмрд╕ рд╢рд╛рдЦрд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИред


рдХреЛрд╖реНрдардХ рдореЗрдВ рдЕрдиреБрд╡рд░реНрддреА рд╕рдореВрд╣реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЖрдк рднрд╛рд╡реЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╣реА рдорд╛рдпрдиреЗ рдореЗрдВ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ:


 > python regexp/regexp.py "(1 2 3)|4" SPLIT L0 L1 L0: NEXT NAME 1 NEXT NAME 2 NEXT NAME 3 JUMP L2 L1: NEXT NAME 4 L2: MATCH 

рдПрдХ рдордирдорд╛рдиреЗ рдШрдЯрдирд╛ рдХреЛ рдПрдХ рдмрд┐рдВрджреБ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:


 > python regexp/regexp.py ". 1" NEXT NEXT NAME 1 MATCH 

рдпрджрд┐ рд╣рдо рдпрд╣ рджрд░реНрд╢рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкрд░рд╡рд░реНрддреА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рдж рдПрдХ рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди рд▓рдЧрд╛рддреЗ рд╣реИрдВ:


 > python regexp/regexp.py "1 2 3? 4" NEXT NAME 1 NEXT NAME 2 SPLIT L0 L1 L0: NEXT NAME 3 L1: NEXT NAME 4 MATCH 

рдмреЗрд╢рдХ, рдХрдИ рдирд┐рдпрдорд┐рдд рджреЛрд╣рд░рд╛рд╡ (рдкреНрд▓рд╕ рдпрд╛ рддрд╛рд░рд╛рдВрдХрди) рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рднреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВ:


 > python regexp/regexp.py "1+ 2" L0: NEXT NAME 1 SPLIT L0 L1 L1: NEXT NAME 2 MATCH 

рдпрд╣рд╛рдВ рд╣рдо рдмрд╕ рдкреНрд░рддреНрдпреЗрдХ рдЪрдХреНрд░ рдкрд░ рдирдП рдереНрд░реЗрдб рд╢реБрд░реВ рдХрд░рддреЗ рд╣реБрдП, рдХрдИ рдмрд╛рд░ SPLIT рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред


рдЗрд╕реА рддрд░рд╣ рдПрдХ рддрд╛рд░рд╛рдВрдХрди рдХреЗ рд╕рд╛рде:


 > python regexp/regexp.py "1* 2" L0: SPLIT L1 L2 L1: NEXT NAME 1 JUMP L0 L2: NEXT NAME 2 MATCH 


рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп


рд╡рд░реНрдгрд┐рдд рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рдЕрдиреНрдп рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛рдо рдореЗрдВ рдЖ рд╕рдХрддреЗ рд╣реИрдВред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдИрд╡реЗрдВрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдХреЗ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "1: 2 {3: 4, 5:> 3}" рдЬреИрд╕реЗ рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ: рдШрдЯрдирд╛ 1 рдХрд╛ рд╕рдВрджрд░реНрдн 2 рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ 3 рдХреЗ рд╕рд╛рде рдорд╛рди 4 рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди 5 рд╕реЗ рдЕрдзрд┐рдХ 3 рд╣реИред рдпрд╣рд╛рдБ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЖрдк рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ matcher_accept рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рд░рдгреА рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдпрджрд┐ рдЖрдк matcher_accept рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рднреА рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЯреЗрдореНрдкрд▓реЗрдЯ рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдордп рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: "1 рдорд╛рдЗрдВрдбреЗрд▓реНрдЯрд╛ (120) 2", рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реЛрдЧрд╛: рдШрдЯрдирд╛ 1, рдлрд┐рд░ рдХрдо рд╕реЗ рдХрдо 120 рд╕реЗрдХрдВрдб рдХреА рдЕрд╡рдзрд┐, рдЗрд╡реЗрдВрдЯ 2 рдПрдХ рдмрд╛рдж рдХреЗ рд╕рдВрд░рдХреНрд╖рдг рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд, рдпрд╣ рдЖрдкрдХреЛ рдШрдЯрдирд╛рдУрдВ рдХреЗ рджреЛ рдмрд╛рдж рдХреЗ рдмреАрдЪ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рдЬреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд╡реЗ рд╣реИрдВ: рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рдВрд░рдХреНрд╖рдг, рд▓рд╛рд▓рдЪреА рдФрд░ рд╕рд╛рдзрд╛рд░рдг рддрд╛рд░рд╛рдВрдХрди рдФрд░ рдкреНрд▓рд╕ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдСрдЯреЛрдореЗрдЯрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╣рдорд╛рд░реА рдЖрднрд╛рд╕реА рдорд╢реАрди рдПрдХ рдиреЙрдирдбреЗрдЯрд░реНрдорд┐рдирд┐рд╕реНрдЯрд┐рдХ рдкрд░рд┐рдорд┐рдд рдСрдЯреЛрдореЛрдЯрди рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред


рдирд┐рд╖реНрдХрд░реНрд╖


рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рддреЗрдЬ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рддреНрд░ рднрдВрдбрд╛рд░рдг рдЗрдВрдЬрди рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рд╣реИ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рднреА рд╕рддреНрд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИред рд╕рддреНрд░реЛрдВ рдореЗрдВ рдЯреВрдЯрдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдПрдХрд▓ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реЗрдХрдВрдб рдореЗрдВ рдкреИрдЯрд░реНрди рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдпрджрд┐ рдЧрддрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рдЗрддрдиреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рд╕рдорд╛рди рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╛ рд╡рд┐рддрд░рд┐рдд рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреА рддрд░рд╣ рдХреБрдЫ рдФрд░ рдорд╛рдирдХ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рдг рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рд╡реИрд╕реЗ, SQL рдорд╛рдирдХ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЖрд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдПрдХ рдХреЗ рд╕рдорд╛рди рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдХрдЯ рд╣реБрдИ рд╣реИ, рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛рдмреЗрд╕ ( рдУрд░реЗрдХрд▓ рдФрд░ рд╡рд░реНрдЯрд┐рдХрд╛ ) рдкрд╣рд▓реЗ рд╣реА рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред Yandex ClickHouse, рдмрджрд▓реЗ рдореЗрдВ, рдЕрдкрдиреА SQL рдЬреИрд╕реА рднрд╛рд╖рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдп рднреА рд╣реЛрддреЗ рд╣реИрдВ ред


рдШрдЯрдирд╛рдУрдВ рдФрд░ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛрддреЗ рд╣реБрдП, рдореИрдВ рдпрд╣ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЛрдВ рдХреА рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд╣реИред рдпрд╣ рддрдХрдиреАрдХ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдФрд░ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИ рдЬрдм рд╕рд┐рд╕реНрдЯрдо рдЗрдВрдЬрди рдХреЛ рд╕рдордЭрдиреЗ рд╡рд╛рд▓реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдФрд░ "рд╕рд╛рдордиреЗ" рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмреАрдЪ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдбреАрдПрд╕рдПрд▓ рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ред


рдпрд╣ рдмрд╛рдЗрдЯрдХреЛрдб рд╡реНрдпрд╛рдЦреНрдпрд╛рддрд╛рдУрдВ рдФрд░ рдЖрднрд╛рд╕реА рдорд╢реАрдиреЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧреЛрдВ рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рд╕рдорд╛рдкрди рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╣реЗрдмрд░ рдХреЗ рдкрд╛рдардХреЛрдВ рдиреЗ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдкрд╕рдВрдж рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред


рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд╕рдиреНрджрд░реНрдн


рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯрдХреЛрдб рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛рд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╖рдп рд╣реИрдВ, рдФрд░ рдЙрди рдкрд░ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рд╕рд╛рд╣рд┐рддреНрдп рд╣реИред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдЗрдпрд╛рди рдХреНрд░реЗрдЧ рдХреА рдкреБрд╕реНрддрдХ, рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд╕рдВрдж рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛рд░реЛрдВ рдХреЗ рдЕрдореВрд░реНрдд рдорд╢реАрдиреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЗрддрдирд╛ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рд╣реИ - рдЧрдгрд┐рддреАрдп рдореЙрдбрд▓ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддреЗ рд╣реИрдВред


рд╡реНрдпрд╛рдкрдХ рдЕрд░реНрдереЛрдВ рдореЗрдВ, рдПрдХ рдЕрдиреНрдп рдкреБрд╕реНрддрдХ рдЖрднрд╛рд╕реА рдорд╢реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ - "рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди: рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд▓рдЪреАрд▓реЗ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдо" ("рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди: рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдореБрдЦреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдо")ред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рднрд╛рд╖рд╛рдУрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдХрдВрдкреНрдпреВрдЯрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рдХреЛ рдХрд╡рд░ рдХрд░рддреЗ рд╣реБрдП рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рд╣реИред


рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рдВрдХрд▓рдХ рд╕рд╛рд╣рд┐рддреНрдп рдореЗрдВ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЗрдВрдЬрди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд╣рд▓реБрдУрдВ рдкрд░ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдкрд┐рдЧ рдореИрдЪ рдФрд░ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдХреЗ рдЙрджрд╛рд╣рд░рдг, Google RE2 рдЗрдВрдЬрди рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ, рд░реЗрдЬрд╝ рдХреЙрдХреНрд╕ рдХреЗ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рдЕрджреНрднреБрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред


рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рдВрдХрд▓рдХ рдкрд░ рд╕рднреА рдЕрдХрд╛рджрдорд┐рдХ рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХреЛрдВ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдкреНрд░рд╕рд┐рджреНрдз "рдбреНрд░реИрдЧрди рдмреБрдХ" рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдерд╛рдЧрдд рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдКрдкрд░ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред


рдЗрд╕ рд▓реЗрдЦ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдкрд╛рдпрдерди рд░реЗрдбреНрд╕рд▓ рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдХреЗ рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рдЪ-рдЧреНрд░реВ (рдзрдиреНрдпрд╡рд╛рдж, рдкреАрдЯрд░!) рдХреА рдХрд▓рдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рднрд╛рд╖рд╛ рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛рдиреЗ рдпрд╛ рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рдбреАрдПрд╕рдПрд▓ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рдо рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

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


All Articles