{"id":280519,"date":"2016-11-07T00:05:03","date_gmt":"2016-11-06T21:05:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=280519"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=280519","title":{"rendered":"\u041a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043f\u0430\u0440\u0441\u0435\u0440 Python, \u0438 \u043a\u0430\u043a \u0432\u0442\u0440\u043e\u0435 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0438\u043c \u043f\u0430\u043c\u044f\u0442\u0438"},"content":{"rendered":"<p>\u041b\u044e\u0431\u043e\u0439, \u043a\u0442\u043e \u0438\u0437\u0443\u0447\u0430\u043b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442, \u043a\u0430\u043a \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442: \u043f\u0430\u0440\u0441\u0435\u0440 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u043e\u0439 \u042f\u041f \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u044d\u0442\u0430\u043f\u044b (\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u0434\u0430).<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/6fa\/0cc\/67e\/6fa0cc67e4e1575067be71f4dfe10d6d.jpg\" width=\"450\" alt=\"\u041a\u0414\u041f\u0412\" title=\"In the Harry Potter books and movies, Harry is a parseltongue, which means he can speak to snakes.\"\/><\/p>\n<p>  \u0412 Python \u0432\u0441\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435: \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 \u0434\u0432\u0430. \u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0440\u0441\u0435\u0440 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0443\u0435\u0442\u0441\u044f \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u043e\u0439, \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0432 \u0444\u0430\u0439\u043b\u0435 <code><a href=\"https:\/\/hg.python.org\/cpython\/file\/default\/Grammar\/Grammar\">Grammar\/Grammar<\/a><\/code> \u0432 \u0432\u0438\u0434\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (\u0441 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c). \u041f\u043e \u044d\u0442\u043e\u0439 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>Parser\/pgen<\/code> \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 <code>python<\/code> \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B9_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82\"><i>\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u0432<\/i><\/a>, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u044e\u0449\u0438\u0445 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u2014 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u041a\u0410 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430. \u0424\u043e\u0440\u043c\u0430\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u043d\u0430\u0431\u043e\u0440\u0430 \u041a\u0410 \u043e\u043f\u0438\u0441\u0430\u043d \u0432 <code><a href=\"https:\/\/hg.python.org\/cpython\/file\/default\/Include\/grammar.h\">Include\/grammar.h<\/a><\/code>, \u0430 \u0441\u0430\u043c\u0438 \u041a\u0410 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0432 <code><a href=\"https:\/\/hg.python.org\/cpython\/file\/default\/Python\/graminit.c\">Python\/graminit.c<\/a><\/code>, \u0432 \u0432\u0438\u0434\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>_PyParser_Grammar<\/code>. \u0422\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0432 <code><a href=\"https:\/\/hg.python.org\/cpython\/file\/default\/Include\/token.h\">Include\/token.h<\/a><\/code>, \u0438 \u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043d\u043e\u043c\u0435\u0440\u0430 0..56; \u043d\u043e\u043c\u0435\u0440\u0430 \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u043e\u0432 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441 256.<\/p>\n<p>  \u041f\u0440\u043e\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u043f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435.<br \/>  \u041f\u0443\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 <code>if 42: print(&quot;Hello world&quot;)<\/code><a name=\"habracut\"><\/a><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u043e\u0442 \u0447\u0430\u0441\u0442\u044c \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u0443 \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre> single_input:       NEWLINE | simple_stmt | compound_stmt NEWLINE compound_stmt:      if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmt if_stmt:            'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] suite:              simple_stmt | NEWLINE INDENT stmt+ DEDENT simple_stmt:        small_stmt (';' small_stmt)* [';'] NEWLINE small_stmt:         expr_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | nonlocal_stmt | assert_stmt expr_stmt:          testlist_star_expr (annassign | augassign (yield_expr|testlist) | ('=' (yield_expr|testlist_star_expr))*) testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] test:               or_test ['if' or_test 'else' test] | lambdef or_test:            and_test ('or' and_test)* and_test:           not_test ('and' not_test)* not_test:           'not' not_test | comparison comparison:         expr (comp_op expr)* expr:               xor_expr ('|' xor_expr)* xor_expr:           and_expr ('^' and_expr)* and_expr:           shift_expr ('&' shift_expr)* shift_expr:         arith_expr (('&lt;&lt;'|'&gt;&gt;') arith_expr)* arith_expr:         term (('+'|'-') term)* term:               factor (('*'|'@'|'\/'|'%'|'\/\/') factor)* factor:             ('+'|'-'|'~') factor | power power:              atom_expr ['**' factor] atom_expr:          [AWAIT] atom trailer* atom:               '(' [yield_expr|testlist_comp] ')' | '[' [testlist_comp] ']' | '{' [dictorsetmaker] '}' |                     NAME | NUMBER | STRING+ | '...' | 'None' | 'True' | 'False' trailer:            '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME arglist:            argument (',' argument)*  [','] argument:           test [comp_for] | test '=' test | '**' test | '*' test <\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043d\u0430\u043c \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b _PyParser_Grammar \u0432 Python\/graminit.c<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>static arc arcs_0_0[3] = {     {2, 1},     {3, 1},     {4, 2}, }; static arc arcs_0_1[1] = {     {0, 1}, }; static arc arcs_0_2[1] = {     {2, 1}, }; static state states_0[3] = {     {3, arcs_0_0},     {1, arcs_0_1},     {1, arcs_0_2}, };  \/\/...  static arc arcs_39_0[9] = {     {91, 1},     {92, 1},     {93, 1},     {94, 1},     {95, 1},     {19, 1},     {18, 1},     {17, 1},     {96, 1}, }; static arc arcs_39_1[1] = {     {0, 1}, }; static state states_39[2] = {     {9, arcs_39_0},     {1, arcs_39_1}, };  \/\/...  static arc arcs_41_0[1] = {     {97, 1}, }; static arc arcs_41_1[1] = {     {26, 2}, }; static arc arcs_41_2[1] = {     {27, 3}, }; static arc arcs_41_3[1] = {     {28, 4}, }; static arc arcs_41_4[3] = {     {98, 1},     {99, 5},     {0, 4}, }; static arc arcs_41_5[1] = {     {27, 6}, }; static arc arcs_41_6[1] = {     {28, 7}, }; static arc arcs_41_7[1] = {     {0, 7}, }; static state states_41[8] = {     {1, arcs_41_0},     {1, arcs_41_1},     {1, arcs_41_2},     {1, arcs_41_3},     {3, arcs_41_4},     {1, arcs_41_5},     {1, arcs_41_6},     {1, arcs_41_7}, };  \/\/...  static dfa dfas[85] = {    {256, &quot;single_input&quot;, 0, 3, states_0,      &quot;\\004\\050\\340\\000\\002\\000\\000\\000\\012\\076\\011\\007\\262\\004\\020\\002\\000\\300\\220\\050\\037\\102&quot;},  \/\/...     {270, &quot;simple_stmt&quot;, 0, 4, states_14,      &quot;\\000\\040\\200\\000\\002\\000\\000\\000\\012\\076\\011\\007\\000\\000\\020\\002\\000\\300\\220\\050\\037\\100&quot;},  \/\/...     {295, &quot;compound_stmt&quot;, 0, 2, states_39,      &quot;\\000\\010\\140\\000\\000\\000\\000\\000\\000\\000\\000\\000\\262\\004\\000\\000\\000\\000\\000\\000\\000\\002&quot;},    {296, &quot;async_stmt&quot;, 0, 3, states_40,      &quot;\\000\\000\\040\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000&quot;},    {297, &quot;if_stmt&quot;, 0, 8, states_41,      &quot;\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\002\\000\\000\\000\\000\\000\\000\\000\\000\\000&quot;}, \/\/                                                     ^^^  \/\/...  }; static label labels[176] = {     {0, &quot;EMPTY&quot;},     {256, 0},     {4, 0},     \/\/ \u21162     {270, 0},   \/\/ \u21163     {295, 0},   \/\/ \u21164  \/\/...      {305, 0},   \/\/ \u211626     {11, 0},    \/\/ \u211627  \/\/...      {297, 0},   \/\/ \u211691     {298, 0},     {299, 0},     {300, 0},     {301, 0},     {296, 0},     {1, &quot;if&quot;},  \/\/ \u211697  \/\/...  }; grammar _PyParser_Grammar = {     86,     dfas,     {176, labels},     256 }; <\/code><\/pre>\n<\/div>\n<\/div>\n<p> (\u0417\u0430 \u043d\u0438\u0436\u0435\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0443\u0434\u043e\u0431\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0443 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442\u043a\u0440\u044b\u0432 \u0435\u0433\u043e \u0432 \u0441\u043e\u0441\u0435\u0434\u043d\u0435\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435.)<\/p>\n<p>  \u041f\u0430\u0440\u0441\u0435\u0440 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0437\u0431\u043e\u0440 \u0441 \u041a\u0410 \u0434\u043b\u044f <code>single_input<\/code>; \u044d\u0442\u043e\u0442 \u041a\u0410 \u0437\u0430\u0434\u0430\u043d \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c <code>states_0<\/code> \u0438\u0437 \u0442\u0440\u0451\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439. \u0418\u0437 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432\u044b\u0445\u043e\u0434\u044f\u0442 \u0442\u0440\u0438 \u0434\u0443\u0433\u0438 (<code>arcs_0_0<\/code>), \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c <code>NEWLINE<\/code> (\u043c\u0435\u0442\u043a\u0430 \u21162, \u0441\u0438\u043c\u0432\u043e\u043b \u21164), <code>simple_stmt<\/code> (\u043c\u0435\u0442\u043a\u0430 \u21163, \u0441\u0438\u043c\u0432\u043e\u043b \u2116270) \u0438 <code>compound_stmt<\/code> (\u043c\u0435\u0442\u043a\u0430 \u21164, \u0441\u0438\u043c\u0432\u043e\u043b \u2116295). \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b <code>&quot;if&quot;<\/code> (\u0441\u0438\u043c\u0432\u043e\u043b \u21161, \u043c\u0435\u0442\u043a\u0430 \u211697) \u0432\u0445\u043e\u0434\u0438\u0442 \u0432\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e <code>d_first<\/code> \u0434\u043b\u044f <code>compound_stmt<\/code>, \u043d\u043e \u043d\u0435 \u0434\u043b\u044f <code>simple_stmt<\/code> \u2014 \u0435\u043c\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u0438\u0442 \\002 \u0432 13-\u0442\u043e\u043c \u0431\u0430\u0439\u0442\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430. (\u0415\u0441\u043b\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0432\u0445\u043e\u0434\u0438\u0442 \u0432\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 <code>d_first<\/code> \u0441\u0440\u0430\u0437\u0443 \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0434\u0443\u0433, \u0442\u043e \u043f\u0430\u0440\u0441\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0430 \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u0430, \u0438 \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0440\u0430\u0437\u0431\u043e\u0440.) \u0418\u0442\u0430\u043a, \u043f\u0430\u0440\u0441\u0435\u0440 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0434\u0443\u0433\u0435 <code>{4, 2}<\/code> \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u21162, \u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u041a\u0410 <code>compound_stmt<\/code>, \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c <code>states_39<\/code>. \u0412 \u044d\u0442\u043e\u043c \u041a\u0410 \u0438\u0437 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432\u044b\u0445\u043e\u0434\u044f\u0442 \u0441\u0440\u0430\u0437\u0443 \u0434\u0435\u0432\u044f\u0442\u044c \u0434\u0443\u0433 (<code>arcs_39_0<\/code>); \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 \u0434\u0443\u0433\u0443 <code>{91, 1}<\/code>, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0432\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u0443 <code>if_stmt<\/code> (\u2116297). \u041f\u0430\u0440\u0441\u0435\u0440 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u21161 \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u041a\u0410 <code>if_stmt<\/code>, \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c <code>states_41<\/code>. <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/0a3\/625\/d57\/0a3625d572034923be735749fcb203c1.png\" align=\"right\" width=\"445\"\/> \u0418\u0437 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u041a\u0410 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u043d\u0430 \u0434\u0443\u0433\u0430 <code><nobr>{97, 1}<\/nobr><\/code>, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u00ad\u0449\u0430\u044f \u043d\u0430\u0448\u0435\u043c\u0443 \u0432\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0443 <code>&quot;if&quot;<\/code>. \u041f\u043e \u043d\u0435\u0439 \u043f\u0430\u0440\u0441\u0435\u0440 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u21161, \u043e\u0442\u043a\u0443\u0434\u0430 \u043e\u043f\u044f\u0442\u044c \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0434\u0443\u0433\u0430 <code>{26, 2}<\/code>, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u00ad\u043d\u0430\u043b\u0443 <code>test<\/code> (\u2116305). \u041f\u043e \u044d\u0442\u043e\u0439 \u0434\u0443\u0433\u0435 \u043f\u0430\u0440\u0441\u0435\u0440 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u21162 \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u00ad\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u041a\u0410 <code>test<\/code>, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u043b\u0433\u043e\u0433\u043e-\u043f\u0440\u0435\u0434\u043e\u043b\u0433\u043e\u0433\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u043b\u0430 <code>42<\/code> \u0432 \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b <code>test<\/code>, \u043f\u0430\u0440\u0441\u0435\u0440 \u0432\u0435\u0440\u043d\u0451\u0442\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u21162, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0434\u0443\u0433\u0430 <code>{27, 3}<\/code>, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u00ad\u044e\u0449\u0430\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0443 <code>COLON<\/code> (\u0441\u0438\u043c\u0432\u043e\u043b \u211611), \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0440\u0430\u0437\u0431\u043e\u0440 \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 <code>if_stmt<\/code>. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0435\u0433\u043e \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u043f\u0430\u0440\u0441\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0443\u0437\u0435\u043b <i>\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430<\/i> (\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code><a href=\"https:\/\/hg.python.org\/cpython\/file\/default\/Include\/node.h\">node<\/a><\/code>), \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u0438\u043f \u0443\u0437\u043b\u0430 \u2116297, \u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0435\u0431\u0451\u043d\u043a\u0430 \u2014 \u0442\u0438\u043f\u043e\u0432 \u21161 (<code>NAME<\/code>), \u2116305 (<code>test<\/code>), \u211611 (<code>COLON<\/code>) \u0438 \u2116304 (<code>suite<\/code>). \u0412 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u21164 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 \u0434\u043b\u044f <code>if_stmt<\/code> \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f, \u043f\u0430\u0440\u0441\u0435\u0440 \u0432\u0435\u0440\u043d\u0451\u0442\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u21161 \u041a\u0410 <code>compound_stmt<\/code>, \u0438 \u0432\u043d\u043e\u0432\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u0434\u043b\u044f <code>if_stmt<\/code> \u0441\u0442\u0430\u043d\u0435\u0442 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0431\u0451\u043d\u043a\u043e\u043c \u0443\u0437\u043b\u0430, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e <code>compound_stmt<\/code>. \u0426\u0435\u043b\u0438\u043a\u043e\u043c \u041a\u0421\u0414 \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0441\u043f\u0440\u0430\u0432\u0430. \u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u043a\u0430\u043a \u043a\u043e\u0440\u043e\u0442\u043a\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438\u0437 \u0441\u0435\u043c\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u043e\u0432 <\/p>\n<pre><code class=\"dos\">NAME NUMBER COLON NAME LPAR STRING RPAR<\/code><\/pre>\n<p> \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0430\u0441\u044c \u0432 \u00ab\u0431\u0430\u043c\u0431\u0443\u043a\u00bb \u2014 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435, \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0432\u0435\u0442\u0432\u044f\u0449\u0435\u0435\u0441\u044f \u0434\u0435\u0440\u0435\u0432\u043e \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0438\u0437 \u0430\u0436 64 \u0443\u0437\u043b\u043e\u0432! \u0415\u0441\u043b\u0438 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0431\u0430\u0439\u0442\u0430\u0445, \u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 27 \u0431\u0430\u0439\u0442, \u0430 \u0435\u0451 \u041a\u0421\u0414 \u2014 \u043d\u0430 \u0434\u0432\u0430 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u0435: \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u0430 \u043d\u0430 32-\u0431\u0438\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0438 \u0442\u0440\u0438 \u2014 \u043d\u0430 64-\u0431\u0438\u0442\u043d\u043e\u0439! (64 \u0443\u0437\u043b\u0430 \u043f\u043e 24 \u043b\u0438\u0431\u043e 48 \u0431\u0430\u0439\u0442\u043e\u0432 \u043a\u0430\u0436\u0434\u044b\u0439). \u0418\u043c\u0435\u043d\u043d\u043e \u0438\u0437-\u0437\u0430 \u0431\u0435\u0437\u0443\u0434\u0435\u0440\u0436\u043d\u043e \u0440\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u041a\u0421\u0414 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <code>python<\/code> \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432\u0441\u0435\u0433\u043e \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u0444\u0430\u0442\u0430\u043b\u044c\u043d\u043e\u0439 <code>MemoryError<\/code>.<\/p>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u041a\u0421\u0414 \u0432 Python \u0435\u0441\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c <code><a href=\"https:\/\/docs.python.org\/3.7\/library\/parser.html\">parser<\/a><\/code>:  <\/p>\n<pre><code class=\"xml\">$ python  Python 3.7.0a0 (default:98c078fca8e0, Oct 31 2016, 08:33:23)  [GCC 4.7.3] on linux Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information. &gt;&gt;&gt; import parser &gt;&gt;&gt; parser.suite('if 42: print(&quot;Hello world&quot;)').tolist() [257, [269, [295, [297, [1, 'if'], [305, [309, [310, [311, [312, [315, [316, [317, [318, [319, [320, [321, [322, [323, [324, [2, '42']]]]]]]]]]]]]]]], [11, ':'], [304, [270, [271, [272, [274, [305, [309, [310, [311, [312, [315, [316, [317, [318, [319, [320, [321, [322, [323, [324, [1, 'print']], [326, [7, '('], [334, [335, [305, [309, [310, [311, [312, [315, [316, [317, [318, [319, [320, [321, [322, [323, [324, [3, '&quot;Hello world&quot;']]]]]]]]]]]]]]]]]], [8, ')']]]]]]]]]]]]]]]]]]], [4, '']]]]]], [4, ''], [0, '']] &gt;&gt;&gt;  <\/code><\/pre>\n<p>  \u0412 \u0435\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 (<code><a href=\"https:\/\/hg.python.org\/cpython\/file\/80d1faa9735d\/Modules\/parsermodule.c\">Modules\/parsermodule.c<\/a><\/code>) \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u041a\u0421\u0414 \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435 Python \u0431\u044b\u043b\u0438 &gt;2000 \u0440\u0443\u043a\u043e\u043f\u0438\u0441\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:  <\/p>\n<pre><code>\/\/...  \/*  simple_stmt | compound_stmt  *  *\/ static int validate_stmt(node *tree) {     int res = (validate_ntype(tree, stmt)                && validate_numnodes(tree, 1, &quot;stmt&quot;));      if (res) {         tree = CHILD(tree, 0);          if (TYPE(tree) == simple_stmt)             res = validate_simple_stmt(tree);         else             res = validate_compound_stmt(tree);     }     return (res); }  static int validate_small_stmt(node *tree) {     int nch = NCH(tree);     int res = validate_numnodes(tree, 1, &quot;small_stmt&quot;);      if (res) {         int ntype = TYPE(CHILD(tree, 0));          if (  (ntype == expr_stmt)               || (ntype == del_stmt)               || (ntype == pass_stmt)               || (ntype == flow_stmt)               || (ntype == import_stmt)               || (ntype == global_stmt)               || (ntype == nonlocal_stmt)               || (ntype == assert_stmt))             res = validate_node(CHILD(tree, 0));         else {             res = 0;             err_string(&quot;illegal small_stmt child type&quot;);         }     }     else if (nch == 1) {         res = 0;         PyErr_Format(parser_error,                      &quot;Unrecognized child node of small_stmt: %d.&quot;,                      TYPE(CHILD(tree, 0)));     }     return (res); }  \/*  compound_stmt:  *      if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated  *\/ static int validate_compound_stmt(node *tree) {     int res = (validate_ntype(tree, compound_stmt)                && validate_numnodes(tree, 1, &quot;compound_stmt&quot;));     int ntype;      if (!res)         return (0);      tree = CHILD(tree, 0);     ntype = TYPE(tree);     if (  (ntype == if_stmt)           || (ntype == while_stmt)           || (ntype == for_stmt)           || (ntype == try_stmt)           || (ntype == with_stmt)           || (ntype == funcdef)           || (ntype == async_stmt)           || (ntype == classdef)           || (ntype == decorated))         res = validate_node(tree);     else {         res = 0;         PyErr_Format(parser_error,                      &quot;Illegal compound statement type: %d.&quot;, TYPE(tree));     }     return (res); }  \/\/... <\/code><\/pre>\n<p>  \u041b\u0435\u0433\u043a\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043e\u0434\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435. \u041d\u0435\u043c\u043d\u043e\u0433\u0438\u043c \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 <b>\u0443\u0436\u0435<\/b> \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u043c! \u0412\u044b\u0448\u0435 \u044f \u0437\u0430\u0442\u0435\u043c \u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u044f\u0445 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u043b \u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u044f\u0441\u043d\u0438\u0442\u044c, \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u044f \u0432 \u043c\u0430\u0440\u0442\u0435 \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0434\u0430 <a href=\"http:\/\/bugs.python.org\/issue26526\">\u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b<\/a> \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u043d\u0438 \u0440\u0443\u043a\u043e\u043f\u0438\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0430, \u2014 \u043d\u0430 \u043f\u0440\u043e\u0433\u043e\u043d \u0432\u0441\u0435\u0445 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u041a\u0410, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0430\u043c \u043f\u0430\u0440\u0441\u0435\u0440. \u042d\u0442\u043e \u043a <a href=\"https:\/\/habrahabr.ru\/post\/279093\/#comment_8803929\">\u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430\u043c<\/a> \u043e \u0442\u043e\u043c, \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430\u043c \u0437\u043d\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b.<\/p>\n<p>  \u0412 \u0438\u044e\u043d\u0435 \u043c\u043e\u0439 \u043f\u0430\u0442\u0447 \u0431\u044b\u043b \u043f\u0440\u0438\u043d\u044f\u0442, \u0442\u0430\u043a \u0447\u0442\u043e \u0432 Python 3.6+ \u0432\u044b\u0448\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u043d\u0435\u0439 \u0432 <code>Modules\/parsermodule.c<\/code> \u0443\u0436\u0435 \u043d\u0435\u0442, \u0430 \u0437\u0430\u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0441\u0442\u0440\u043e\u043a \u043c\u043e\u0435\u0433\u043e \u043a\u043e\u0434\u0430. <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/415\/03c\/9a4\/41503c9a41ae28060355a9674eb5ccbb.gif\" width=\"20\"\/><\/p>\n<hr\/>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/4c0\/a77\/57a\/4c0a7757a1214834a006b525fba40178.png\" align=\"right\"\/> \u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0442\u0430\u043a\u0438\u043c \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u0438\u043c \u0438 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u043c \u041a\u0421\u0414, \u043a\u0430\u043a \u0431\u044b\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u044b\u0448\u0435, \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e; \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u0430\u0440\u0441\u0435\u0440 (<code><a href=\"https:\/\/hg.python.org\/cpython\/file\/default\/Python\/ast.c\">Python\/ast.c<\/a><\/code>), \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u041a\u0421\u0414 \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u043e \u043d\u0435\u043c\u0443 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%82%D0%BD%D0%BE%D0%B5_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE\"><i>\u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e<\/i><\/a>. \u0413\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0430 \u0410\u0421\u0414 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <code><a href=\"https:\/\/hg.python.org\/cpython\/file\/default\/Parser\/Python.asdl\">Parser\/Python.asdl<\/a><\/code>; \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0410\u0421\u0414 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u0438\u043c, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0441\u043f\u0440\u0430\u0432\u0430.<\/p>\n<p>  \u0412\u043c\u0435\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u041a\u0421\u0414 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043c\u043e\u0434\u0443\u043b\u044f <code>parser<\/code>, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0441\u043e\u0432\u0435\u0442\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c <code><a href=\"https:\/\/docs.python.org\/3.7\/library\/ast.html\">ast<\/a><\/code> \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u043c \u0434\u0435\u0440\u0435\u0432\u043e\u043c:<br clear=\"right\"\/>  <\/p>\n<pre><code class=\"xml\">$ python Python 3.7.0a0 (default:98c078fca8e0, Oct 31 2016, 08:33:23)  [GCC 4.7.3] on linux Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information. &gt;&gt;&gt; import ast &gt;&gt;&gt; ast.dump(ast.parse('if 42: print(&quot;Hello world&quot;)')) &quot;Module(body=[If(test=Num(n=42), body=[Expr(value=Call(func=Name(id='print', ctx=Load()), args=[Str(s='Hello world')], keywords=[]))], orelse=[])])&quot; &gt;&gt;&gt;  <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0410\u0421\u0414 \u0441\u043e\u0437\u0434\u0430\u043d\u043e \u2014 \u041a\u0421\u0414 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0437\u0430\u0447\u0435\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u0438 \u0432\u0441\u044f \u0437\u0430\u043d\u044f\u0442\u0430\u044f \u0438\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f; \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u00ab\u0434\u043e\u043b\u0433\u043e\u0438\u0433\u0440\u0430\u044e\u0449\u0435\u0439\u00bb \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 Python \u043d\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u043e \u041a\u0421\u0414. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445, \u043d\u043e \u00ab\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0440\u0435\u043b\u044c\u043d\u044b\u0445\u00bb \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0438\u0441\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u043c <code>dict<\/code>-\u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0435) \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u041a\u0421\u0414 \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c. \u0412\u0441\u0451 \u044d\u0442\u043e \u0432\u043f\u0440\u0438\u0434\u0430\u0447\u0443 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u041a\u0421\u0414 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u0445\u0432\u0430\u0442\u0438\u0442 \u043b\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443.<\/p>\n<p>  \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0445\u043e\u0434\u0430 \u043f\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u043c \u00ab\u0431\u0430\u043c\u0431\u0443\u043a\u043e\u0432\u044b\u043c \u0432\u0435\u0442\u0432\u044f\u043c\u00bb \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043e\u0434 <code>Python\/ast.c<\/code> \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c:  <\/p>\n<pre><code>static expr_ty ast_for_expr(struct compiling *c, const node *n) {  \/\/...   loop:     switch (TYPE(n)) {         case test:         case test_nocond:             if (TYPE(CHILD(n, 0)) == lambdef ||                 TYPE(CHILD(n, 0)) == lambdef_nocond)                 return ast_for_lambdef(c, CHILD(n, 0));             else if (NCH(n) &gt; 1)                 return ast_for_ifexpr(c, n);             \/* Fallthrough *\/         case or_test:         case and_test:             if (NCH(n) == 1) {                 n = CHILD(n, 0);                 goto loop;             }             \/\/ \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0431\u0443\u043b\u0435\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439          case not_test:             if (NCH(n) == 1) {                 n = CHILD(n, 0);                 goto loop;             }             \/\/ \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 not_test          case comparison:             if (NCH(n) == 1) {                 n = CHILD(n, 0);                 goto loop;             }             \/\/ \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 comparison          case star_expr:             return ast_for_starred(c, n);         \/* The next five cases all handle BinOps.  The main body of code            is the same in each case, but the switch turned inside out to            reuse the code for each type of operator.          *\/         case expr:         case xor_expr:         case and_expr:         case shift_expr:         case arith_expr:         case term:             if (NCH(n) == 1) {                 n = CHILD(n, 0);                 goto loop;             }             return ast_for_binop(c, n);          \/\/ case yield_expr: \u0438 \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430          case factor:             if (NCH(n) == 1) {                 n = CHILD(n, 0);                 goto loop;             }             return ast_for_factor(c, n);         case power:             return ast_for_power(c, n);         default:             PyErr_Format(PyExc_SystemError, &quot;unhandled expr: %d&quot;, TYPE(n));             return NULL;     }     \/* should never get here unless if error is set *\/     return NULL; } <\/code><\/pre>\n<p>  \u041c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u0432\u0441\u0451\u043c \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0430\u0440\u0441\u0435\u0440\u0430 <code>if (NCH(n) == 1) n = CHILD(n, 0);<\/code> \u2014 \u0438\u043d\u043e\u0433\u0434\u0430, \u043a\u0430\u043a \u0432 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0432\u043d\u0443\u0442\u0440\u0438 \u0446\u0438\u043a\u043b\u0430 \u2014 \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u00ab\u0435\u0441\u043b\u0438 \u0443 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0443\u0437\u043b\u0430 \u041a\u0421\u0414 \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0440\u0435\u0431\u0451\u043d\u043e\u043a, \u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0443\u0437\u043b\u0430 \u043d\u0430\u0434\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0435\u0431\u0451\u043d\u043a\u0430\u00bb.<\/p>\n<p>  \u041d\u043e \u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e-\u0442\u043e \u043c\u0435\u0448\u0430\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u041a\u0421\u0414 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u00ab\u043e\u0434\u043d\u043e\u0434\u0435\u0442\u043d\u044b\u0435\u00bb \u0443\u0437\u043b\u044b, \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0438\u0445 \u0438\u0445 \u0434\u0435\u0442\u0435\u0439? \u0412\u0435\u0434\u044c \u044d\u0442\u043e \u0438 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u043a\u0443\u0447\u0443 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u0430\u0440\u0441\u0435\u0440, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f <code>goto loop;<\/code> \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043a\u043e\u0434\u0443, \u043e\u0442 \u0432\u0438\u0434\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e <a href=\"http:\/\/hosting.vspu.ac.ru\/~chul\/dijkstra\/goto\/goto.htm\">\u0414\u0435\u0439\u043a\u0441\u0442\u0440\u0430<\/a> \u0437\u0430\u0432\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u0431\u044b \u0432\u043e\u043b\u0447\u043a\u043e\u043c \u0432 \u0441\u0432\u043e\u0451\u043c \u0433\u0440\u043e\u0431\u0443!<\/p>\n<p>  \u0412 \u043c\u0430\u0440\u0442\u0435, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0432\u044b\u0448\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u043c \u043f\u0430\u0442\u0447\u0435\u043c \u0434\u043b\u044f <code>Modules\/parsermodule.c<\/code>, \u044f \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b <a href=\"http:\/\/bugs.python.org\/issue26415\">\u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043f\u0430\u0442\u0447<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439: <\/p>\n<ol>\n<li>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0440\u0441\u0435\u0440 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u00ab\u0441\u0436\u0430\u0442\u0438\u0435\u00bb \u043d\u0435\u0432\u0435\u0442\u0432\u044f\u0449\u0438\u0445\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u2014 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 <i>\u0441\u0432\u0451\u0440\u0442\u043a\u0438<\/i> (\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0443\u0437\u043b\u0430 \u041a\u0421\u0414 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u041a\u0410 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439) \u00ab\u043e\u0434\u043d\u043e\u0434\u0435\u0442\u043d\u044b\u0439\u00bb \u0443\u0437\u0435\u043b \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0442\u0438\u043f\u0430 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u0435\u0431\u0451\u043d\u043a\u0430:\n<pre><code class=\"diff\">diff -r ffc915a55a72 Parser\/parser.c --- a\/Parser\/parser.c\tMon Sep 05 00:01:47 2016 -0400 +++ b\/Parser\/parser.c\tMon Sep 05 08:30:19 2016 +0100 @@ -52,16 +52,16 @@  #ifdef Py_DEBUG    static void  s_pop(stack *s)  {      if (s_empty(s))          Py_FatalError(&quot;s_pop: parser stack underflow -- FATAL&quot;); -    s-&gt;s_top++; +    PyNode_Compress(s-&gt;s_top++-&gt;s_parent);  }    #else \/* !Py_DEBUG *\/   -#define s_pop(s) (s)-&gt;s_top++ +#define s_pop(s) PyNode_Compress((s)-&gt;s_top++-&gt;s_parent)    #endif   diff -r ffc915a55a72 Python\/ast.c --- a\/Python\/ast.c\tMon Sep 05 00:01:47 2016 -0400 +++ b\/Python\/ast.c\tMon Sep 05 08:30:19 2016 +0100 @@ -5070,3 +5056,24 @@      FstringParser_Dealloc(&state);      return NULL;  } + +void PyNode_Compress(node* n) { +    if (NCH(n) == 1) { +        node* ch; +        switch (TYPE(n)) { +        case suite:       case comp_op:      case subscript:   case atom_expr: +        case power:       case factor:       case expr:        case xor_expr: +        case and_expr:    case shift_expr:   case arith_expr:  case term: +        case comparison:  case testlist_star_expr:             case testlist: +        case test:        case test_nocond:  case or_test:     case and_test: +        case not_test:    case stmt:         case dotted_as_name: +            if (STR(n) != NULL) +                PyObject_FREE(STR(n)); +            ch = CHILD(n, 0); +            *n = *ch; +            \/\/ All grandchildren are now adopted; don't need to free them, +            \/\/ so no need for PyNode_Free +            PyObject_FREE(ch); +        } +    } +} <\/code><\/pre>\n<\/li>\n<li>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u0430\u0440\u0441\u0435\u0440, \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044f \u0438\u0437 \u043d\u0435\u0433\u043e \u043e\u0431\u0445\u043e\u0434 \u00ab\u0431\u0430\u043c\u0431\u0443\u043a\u043e\u0432\u044b\u0445 \u0432\u0435\u0442\u0432\u0435\u0439\u00bb: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b\u0448\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>ast_for_expr<\/code> \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430\n<pre><code>static expr_ty ast_for_expr(struct compiling *c, const node *n) {  \/\/...      switch (TYPE(n)) {         case lambdef:         case lambdef_nocond:             return ast_for_lambdef(c, n);         case test:         case test_nocond:             assert(NCH(n) &gt; 1);             return ast_for_ifexpr(c, n);         case or_test:         case and_test:             assert(NCH(n) &gt; 1);             \/\/ \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0431\u0443\u043b\u0435\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439          case not_test:             assert(NCH(n) &gt; 1);             \/\/ \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 not_test          case comparison:             assert(NCH(n) &gt; 1);             \/\/ \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 comparison          case star_expr:             return ast_for_starred(c, n);         \/* The next five cases all handle BinOps.  The main body of code            is the same in each case, but the switch turned inside out to            reuse the code for each type of operator.          *\/         case expr:         case xor_expr:         case and_expr:         case shift_expr:         case arith_expr:         case term:             assert(NCH(n) &gt; 1);             return ast_for_binop(c, n);          \/\/ case yield_expr: \u0438 \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430          case factor:             assert(NCH(n) &gt; 1);             return ast_for_factor(c, n);         case power:             return ast_for_power(c, n);         case atom:             return ast_for_atom(c, n);         case atom_expr:             return ast_for_atom_expr(c, n);         default:             PyErr_Format(PyExc_SystemError, &quot;unhandled expr: %d&quot;, TYPE(n));             return NULL;     }     \/* should never get here unless if error is set *\/     return NULL; } <\/code><\/pre>\n<p> \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0443 \u043c\u043d\u043e\u0433\u0438\u0445 \u0443\u0437\u043b\u043e\u0432 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u00ab\u0441\u0436\u0430\u0442\u0438\u044f \u0432\u0435\u0442\u0432\u0435\u0439\u00bb \u0434\u0435\u0442\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u043e\u0432\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f.<\/p>\n<\/li>\n<li>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u00ab\u0441\u0436\u0430\u0442\u043e\u0435 \u041a\u0421\u0414\u00bb \u0443\u0436\u0435 \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435 Python, \u0442\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0435\u0433\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u0432 <code>Modules\/parsermodule.c<\/code> \u0432\u043c\u0435\u0441\u0442\u043e \u00ab\u0441\u044b\u0440\u043e\u0439\u00bb <code>_PyParser_Grammar<\/code> \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u044b, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u00ab\u0442\u0440\u0430\u043d\u0437\u0438\u0442\u0438\u0432\u043d\u043e\u043c\u0443 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044e\u00bb \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u043f\u0430\u0440\u044b \u043f\u0440\u043e\u0434\u0443\u043a\u0446\u0438\u0439<br \/>\n<blockquote>\n<pre> or_test ::= and_test test ::= or_test 'if' or_test 'else' test <\/pre>\n<\/blockquote>\n<p>\u2014\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u00ab\u0442\u0440\u0430\u043d\u0437\u0438\u0442\u0438\u0432\u043d\u044b\u0435\u00bb \u043f\u0440\u043e\u0434\u0443\u043a\u0446\u0438\u0438:  <\/p>\n<blockquote>\n<pre> test ::= or_test 'if' and_test 'else' test test ::= and_test 'if' or_test 'else' test test ::= and_test 'if' and_test 'else' test <\/pre>\n<\/blockquote>\n<p>  \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044f <code>parser<\/code>, \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>Init_ValidationGrammar<\/code> \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u0430\u0432\u0442\u043e\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u041a\u0410 \u0432 <code>_PyParser_Grammar<\/code>, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u00ab\u0442\u0440\u0430\u043d\u0437\u0438\u0442\u0438\u0432\u043d\u043e \u0437\u0430\u043c\u043a\u043d\u0443\u0442\u044b\u0435\u00bb \u041a\u0410, \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438\u0445 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <code>ValidationGrammar<\/code>. \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u041a\u0421\u0414 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e <code>ValidationGrammar<\/code>.<\/li>\n<\/ol>\n<p>  \u0421\u0436\u0430\u0442\u043e\u0435 \u041a\u0421\u0414 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043a\u043e\u0434\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435\u0433\u043e 21 \u0443\u0437\u0435\u043b:  <\/p>\n<pre><code class=\"xml\">$ python  Python 3.7.0a0 (default:98c078fca8e0+, Oct 31 2016, 09:00:27)  [GCC 4.7.3] on linux Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information. &gt;&gt;&gt; import parser &gt;&gt;&gt; parser.suite('if 42: print(&quot;Hello world&quot;)').tolist() [257, [295, [297, [1, 'if'], [324, [2, '42']], [11, ':'], [270, [271, [272, [323, [324, [1, 'print']], [326, [7, '('], [334, [335, [324, [3, '&quot;Hello world&quot;']]]], [8, ')']]]]], [4, '']]]], [4, ''], [0, '']] &gt;&gt;&gt;  <\/code><\/pre>\n<p>  <a name=\"plea\"><\/a><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/afe\/6bb\/b37\/afe6bbb37aaa4ab2a9233d788c167feb.png\" width=\"450\" align=\"right\"\/> \u0421 \u043c\u043e\u0438\u043c \u043f\u0430\u0442\u0447\u0435\u043c <a href=\"https:\/\/hg.python.org\/benchmarks\">\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432<\/a> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 <b>\u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c <code>python<\/code> \u0434\u043e 30%<\/b>, \u043f\u0440\u0438 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0435\u043c\u0441\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u044b. \u041d\u0430 \u0432\u044b\u0440\u043e\u0436\u0434\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e <b>\u0442\u0440\u0451\u0445\u043a\u0440\u0430\u0442\u043d\u043e\u0433\u043e<\/b>!<\/p>\n<p>  \u041d\u043e \u0443\u0432\u044b, \u0437\u0430 \u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440, \u043a\u0430\u043a \u044f \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u0441\u0432\u043e\u0439 \u043f\u0430\u0442\u0447, \u043d\u0438\u043a\u0442\u043e \u0438\u0437 \u043c\u0435\u0439\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0442\u0430\u043a \u0438 \u043d\u0435 \u043e\u0442\u0432\u0430\u0436\u0438\u043b\u0441\u044f \u0435\u0433\u043e \u043e\u0442\u0440\u0435\u0432\u044c\u044e\u0438\u0442\u044c \u2014 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0438 \u0441\u0442\u0440\u0430\u0448\u043d\u044b\u0439. \u0412 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u0435 \u0436\u0435 <a href=\"https:\/\/mail.python.org\/pipermail\/python-dev\/2016-September\/146503.html\">\u043c\u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b<\/a> \u0441\u0430\u043c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%92%D0%B0%D0%BD_%D0%A0%D0%BE%D1%81%D1%81%D1%83%D0%BC,_%D0%93%D0%B2%D0%B8%D0%B4%D0%BE\">\u0413\u0432\u0438\u0434\u043e \u0432\u0430\u043d \u0420\u043e\u0441\u0441\u0443\u043c<\/a>: <i>\u00ab\u0420\u0430\u0437 \u0437\u0430 \u0432\u0441\u0451 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0438\u043a\u0442\u043e \u043a \u043f\u0430\u0442\u0447\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u043d\u0435 \u043f\u0440\u043e\u044f\u0432\u0438\u043b, \u2014 \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0438\u043a\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u043c \u043d\u0435 \u0437\u0430\u0431\u043e\u0442\u0438\u0442. \u0417\u043d\u0430\u0447\u0438\u0442, \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043c\u0435\u0439\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043d\u0430 \u0435\u0433\u043e \u0440\u0435\u0432\u044c\u044e.\u00bb<\/i><\/p>\n<p>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442, \u043f\u043e\u0447\u0435\u043c\u0443 \u043c\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0438 \u0441\u0442\u0440\u0430\u0448\u043d\u044b\u0439 \u043f\u0430\u0442\u0447 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0443\u0436\u043d\u044b\u0439 \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439; \u0438 \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u0443 Python-\u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u0434\u043e\u0439\u0434\u0443\u0442 \u0440\u0443\u043a\u0438 \u0435\u0433\u043e \u043e\u0442\u0440\u0435\u0432\u044c\u044e\u0438\u0442\u044c.<br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/314062\/\"> https:\/\/habrahabr.ru\/post\/314062\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041b\u044e\u0431\u043e\u0439, \u043a\u0442\u043e \u0438\u0437\u0443\u0447\u0430\u043b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442, \u043a\u0430\u043a \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442: \u043f\u0430\u0440\u0441\u0435\u0440 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u043e\u0439 \u042f\u041f \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u044d\u0442\u0430\u043f\u044b (\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u0434\u0430).<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/6fa\/0cc\/67e\/6fa0cc67e4e1575067be71f4dfe10d6d.jpg\" width=\"450\" alt=\"\u041a\u0414\u041f\u0412\" title=\"In the Harry Potter books and movies, Harry is a parseltongue, which means he can speak to snakes.\"\/><\/p>\n<p>  \u0412 Python \u0432\u0441\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435: \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 \u0434\u0432\u0430. \u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0440\u0441\u0435\u0440 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0443\u0435\u0442\u0441\u044f \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u043e\u0439, \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0432 \u0444\u0430\u0439\u043b\u0435 <code><a href=\"https:\/\/hg.python.org\/cpython\/file\/default\/Grammar\/Grammar\">Grammar\/Grammar<\/a><\/code> \u0432 \u0432\u0438\u0434\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (\u0441 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c). \u041f\u043e \u044d\u0442\u043e\u0439 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>Parser\/pgen<\/code> \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 <code>python<\/code> \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B9_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82\"><i>\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u0432<\/i><\/a>, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u044e\u0449\u0438\u0445 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u2014 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u041a\u0410 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430. \u0424\u043e\u0440\u043c\u0430\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u043d\u0430\u0431\u043e\u0440\u0430 \u041a\u0410 \u043e\u043f\u0438\u0441\u0430\u043d \u0432 <code><a href=\"https:\/\/hg.python.org\/cpython\/file\/default\/Include\/grammar.h\">Include\/grammar.h<\/a><\/code>, \u0430 \u0441\u0430\u043c\u0438 \u041a\u0410 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0432 <code><a href=\"https:\/\/hg.python.org\/cpython\/file\/default\/Python\/graminit.c\">Python\/graminit.c<\/a><\/code>, \u0432 \u0432\u0438\u0434\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>_PyParser_Grammar<\/code>. \u0422\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0432 <code><a href=\"https:\/\/hg.python.org\/cpython\/file\/default\/Include\/token.h\">Include\/token.h<\/a><\/code>, \u0438 \u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043d\u043e\u043c\u0435\u0440\u0430 0..56; \u043d\u043e\u043c\u0435\u0440\u0430 \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u043e\u0432 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441 256.<\/p>\n<p>  \u041f\u0440\u043e\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u043f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435.<br \/>  \u041f\u0443\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 <code>if 42: print(&quot;Hello world&quot;)<\/code><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-280519","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/280519","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=280519"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/280519\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=280519"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=280519"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=280519"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}