{"id":201194,"date":"2013-11-07T07:15:03","date_gmt":"2013-11-07T03:15:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=201194"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=201194","title":{"rendered":"<span class=\"post_title\">(\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e) \u041f\u0435\u0440\u0432\u044b\u0439 \u0432 \u043c\u0438\u0440\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0445, \u0445\u043e\u0442\u044c \u0438 \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0445, \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 \u043d\u0430 JS<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u0415\u0441\u043b\u0438 \u0442\u044b \u043c\u0435\u043d\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u043e\u043c\u043d\u0438\u0448\u044c, \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u2014 \u0442\u043e, \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430, \u043f\u043e\u043c\u043d\u0438\u0448\u044c \u0438 \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0438 \u043f\u043e\u0441\u0442\u044b \u0432 \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0440\u0430\u0437\u043e\u0447\u0430\u0440\u0443\u044e\u0449\u0435 \u0434\u043b\u0438\u043d\u043d\u044b \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e-\u0442\u0430\u043a\u0438 \u0447\u0430\u0441\u0442\u043e \u0438\u043c \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u044f. \u0417\u0430\u0432\u0435\u0440\u044f\u044e \u0442\u0435\u0431\u044f, \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u043e\u0442\u043d\u044e\u0434\u044c \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u2014 \u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u043e\u043c\u0430\u043d, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u0435\u0435, \u0430 \u0442\u043e \u0435\u0449\u0451 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043a\u0430\u043b\u0451\u043d\u043d\u044b\u0439.<\/p>\n<p>  \u041f\u043e \u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430\u043c, \u043c\u0430\u043b\u043e \u0447\u0442\u043e \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u0442\u0435\u0445 \u043f\u043e\u0441\u0442\u0430\u0445 \u0431\u044b\u043b\u043e \u0434\u043e\u0432\u0435\u0434\u0435\u043d\u043e \u0434\u043e \u0443\u043c\u0430 \u0438 \u043e\u043d\u0438, \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b\u0438 \u043b\u0438\u0448\u044c \u043e\u0431\u0449\u0438\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u043a \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f\u043c. \u0418 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u0443\u043d\u043a\u0442\u0443 \u044f \u0442\u0430\u043a \u0436\u0435 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0432\u0435\u0440\u0435\u043d \u0442\u0435\u0431\u0435 \u0438 \u0441\u0435\u0439\u0447\u0430\u0441, \u0434\u043e\u0440\u043e\u0433\u043e\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c.<\/p>\n<p>  \u041a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0432 \u043f\u043e\u0441\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0433\u0438\u043f\u0435\u0440\u0441\u0441\u044b\u043b\u043e\u043a \u0438 \u043a\u043e\u0434\u0430. \u0410 \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u2014 \u043a\u0438\u0440\u0438\u043b\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0431\u0443\u043a\u0432.<\/p>\n<p>  \u0412\u0441\u0451 \u043a\u0430\u043a \u0432 \u0441\u0442\u0430\u0440\u044b\u0435 \u0434\u043e\u0431\u0440\u044b\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0430. \u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c, \u0434\u0440\u0443\u0433.<\/p>\n<p>  <a name=\"habracut\"><\/a><\/p>\n<h2>\u041e\u0431\u0448\u0438\u0440\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u044f<\/h2>\n<p>  \u041d\u0435 \u0437\u043d\u0430\u044e, \u0447\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0443\u0434\u0430\u0440\u0438\u043b\u043e \u043c\u043d\u0435 \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 \u0433\u043e\u0434\u0430 \u044d\u0434\u0430\u043a \u0434\u0432\u0430 \u043d\u0430\u0437\u0430\u0434, \u043d\u043e \u043c\u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0430\u0440\u0441\u0435\u0440\u044b Markdown, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 JS. \u0422\u044b \u0443\u0434\u0438\u0432\u043b\u0451\u043d, \u043d\u0435 \u0442\u0430\u043a \u043b\u0438?<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u043d\u0438 \u043d\u0435 \u0443\u043c\u0435\u043b\u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438 \u043a\u043e\u0434\u0430 \u0432 \u0441\u0443\u0431\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430\u0434\u0441\u043f\u0438\u0441\u043a\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0447\u0442\u043e-\u0442\u043e \u0438\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0440\u043a\u0434\u0430\u0443\u043d-\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430, \u0447\u0442\u043e \u043b\u0438\u0448\u044c \u043c\u043d\u0435 \u0438 \u0431\u044b\u043b\u043e \u043d\u0443\u0436\u043d\u043e. \u0418 \u0435\u0449\u0451, \u0432\u043e\u043e\u0431\u0449\u0435 \u0443\u0436\u0435 \u043d\u0435 \u043f\u043e\u043c\u043d\u044e \u0437\u0430\u0447\u0435\u043c, \u044f \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0442\u0435\u043b \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0439 JS-\u043a\u043e\u0434 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0430\u043a\u0446\u0438\u0439 \u043d\u0430 \u0443\u0434\u0430\u0447\u043d\u044b\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438.<\/p>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044f \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438, \u044f \u043d\u0430\u0448\u0451\u043b \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 JS-\u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 <a href=\"http:\/\/pegjs.majda.cz\/\">PEG.js<\/a>, \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u0448\u0451\u043b <a href=\"http:\/\/hasseg.org\/peg-markdown-highlight\/\">GUI-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043f\u043e \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0435 markdown-\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u043d\u0430 C++<\/a> (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u043c, \u0441\u0442\u0438\u043b\u044c\u043d\u043e\u043c \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u043c Mac-OS-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Markdown, \u043d\u0435 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043d\u0435 \u043a\u0440\u0430\u0442\u043a\u043e \u0438\u043c\u0435\u043d\u0443\u044e\u0449\u0435\u043c \u0441\u0435\u0431\u044f <a href=\"http:\/\/mouapp.com\/\">Mou<\/a>), \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f \u0432\u044b\u0434\u0440\u0430\u043b <a href=\"https:\/\/github.com\/ali-rantakari\/peg-markdown-highlight\/blob\/master\/pmh_grammar.leg\">LEG-\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0443 Markdown<\/a> (\u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0431\u044b\u043b\u0430 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0438\u0437 <a href=\"https:\/\/github.com\/jgm\/peg-markdown\/blob\/master\/markdown_parser.leg\">\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438 \u0414\u0436\u043e\u043d\u0430 \u041c\u0430\u043a\u0424\u0435\u0440\u043b\u0435\u0439\u043d\u0430<\/a>) \u0438 \u043d\u0430\u0447\u0430\u043b \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u044d\u0442\u0443 \u043f\u043e\u0440\u0442\u044f\u043d\u043a\u0443 \u043f\u043e\u0434 PEG.js, \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0435\u0451 \u0443\u043b\u0443\u0447\u0448\u0430\u044f.<\/p>\n<p>  \u0427\u0435\u043c <a href=\"https:\/\/github.com\/shamansir\/mdown-parse-pegjs\">\u0432\u0441\u0451 \u044d\u0442\u043e<\/a> \u043a\u043e\u043d\u0447\u0438\u043b\u043e\u0441\u044c? \u041b\u0438\u0448\u044c \u0442\u0435\u043c, \u0447\u0442\u043e \u044f \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u043b \u0438\u043c\u044f <em>Ali Rantakari<\/em>, \u0430\u0432\u0442\u043e\u0440\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430, \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043d\u0430 \u0434\u0432\u0430 \u0433\u043e\u0434\u0430 \u0441 \u0445\u0432\u043e\u0441\u0442\u0438\u043a\u043e\u043c. \u041d\u0435 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u0432 \u0447\u0451\u043c-\u043b\u0438\u0431\u043e \u0432\u0438\u043d\u043e\u0432\u0430\u0442, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0442 \u0442\u0430\u043a \u0432\u043e\u0442 \u0432\u044b\u0448\u043b\u043e.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0437\u044f\u0442\u044c \u0433\u043b\u0443\u0431\u0436\u0435, \u0432\u0441\u0451 \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0437\u0430\u0448\u043b\u043e \u0432 \u0441\u0432\u043e\u0439 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0443\u043f\u0438\u043a \u0432 \u0442\u043e\u0442 \u0431\u0435\u0437\u0440\u0430\u0434\u043e\u0441\u0442\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u044f \u0443\u0432\u0438\u0434\u0435\u043b \u0447\u0442\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u0441\u0435\u0440 \u0437\u0430\u043d\u0438\u043c\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0443\u0432\u0430\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u043b\u044f \u043c\u0435\u043d\u044f 6\u041c\u0411 (\u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u044d\u0442\u0430 \u0446\u0438\u0444\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0430 \u043d\u0435\u0442\u043e\u0447\u043d\u043e, \u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u0442\u0440\u0430\u0433\u0435\u0434\u0438\u0438, \u044f \u0434\u0443\u043c\u0430\u044e, \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043d\u0430\u0433\u043b\u044f\u0434\u0435\u043d; \u0434\u0430 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435, \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u0443 \u043c\u0435\u043d\u044f \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u0446\u0438\u0444\u0440\u0430 <strong>24<\/strong>) \u043d\u0435\u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e JavaScript-\u043a\u043e\u0434\u0430. \u041c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u2014 \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435. \u0414\u0430-\u0434\u0430, \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c, \u0442\u044b \u043d\u0435 \u043e\u0448\u0438\u0431\u0441\u044f, \u043f\u0430\u0440\u0441\u0435\u0440 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e (<em>TODO:<\/em> \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u043a\u0440\u0430\u0441\u043d\u044b\u043c) \u0432\u0448\u0438\u0432\u0435\u043d\u044c\u043a\u043e\u0433\u043e \u043c\u0430\u0440\u043a\u0434\u0430\u0443\u043d\u0430, \u0438 <strong>6\u041c\u0411<\/strong> \u2014 \u044d\u0442\u043e \u043d\u0438 \u0432 \u043a\u0430\u043a\u0438\u0435 \u0432\u043e\u0440\u043e\u0442\u0430.<\/p>\n<p>  \u0422\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438, \u0447\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u0442\u0430\u043a\u0438\u043c \u0433\u0440\u0435\u0448\u0430\u0442 \u0438 \u043a\u043e\u0434 \u0432 \u043d\u0438\u0445 \u043e\u0442\u043d\u044e\u0434\u044c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d \u0431\u044b\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c, \u0430 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u044f\u0432\u043b\u044f\u0451\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043f\u043e\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043d\u043e\u0439 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0438 \u043f\u0440\u0430\u0432\u0438\u043b. \u0418 \u0447\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u0435\u043d \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430, \u0434\u0430\u0436\u0435 \u0442\u0430\u043a\u0438\u043c \u0432\u043e\u0442 \u0442\u0440\u0443\u0434\u043d\u043e\u043f\u043e\u0434\u044a\u0451\u043c\u043d\u044b\u043c \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u043c. \u0412\u0435\u0440\u043d\u0435\u0435, \u043c\u043e\u0436\u0435\u0442 \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438, \u043d\u043e, \u043f\u0440\u0438\u0437\u043d\u0430\u0439\u0441\u044f \u043c\u043d\u0435, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0432\u0435\u0441\u0451\u043b\u043e\u0433\u043e \u0432 \u0436\u0438\u0437\u043d\u0438, \u0447\u0435\u043c \u0433\u043d\u0443\u0442\u044c \u0441\u0432\u043e\u044e \u043b\u0438\u043d\u0438\u044e.<\/p>\n<p>  \u0418, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u043d\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438, \u044f \u043e\u0447\u0435\u043d\u044c \u0432\u043e\u0437\u043c\u0443\u0442\u0438\u043b\u0441\u044f \u2014 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0431\u044b\u043b\u043e \u043d\u0435\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445, \u0441 \u0442\u043e\u0447\u043a\u0438 JS-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430, \u043a\u0443\u0441\u043a\u043e\u0432 \u043a\u043e\u0434\u0430 \u0432 \u044d\u0442\u043e\u043c \u043f\u0430\u0440\u0441\u0435\u0440\u0435, \u0430 \u0435\u0449\u0451 \u0434\u0430\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0437\u0434\u0440\u0430\u0436\u0430\u043b\u0438 Java-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043a\u043e\u0434\u0435. \u0412\u043e\u0442 \u043f\u0440\u044f\u043c \u043d\u0435\u0442 \u0441\u0438\u043b \u0442\u0435\u0440\u043f\u0435\u0442\u044c. \u042f \u0434\u0430\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u043f\u0440\u043e\u0448\u0443 \u043f\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043c\u043d\u0435 \u043d\u0430 \u0441\u043b\u043e\u0432\u043e (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 <a href=\"https:\/\/gist.github.com\/shamansir\/7275004#file-markdown-parser-js\">\u0432\u043e\u0442<\/a> \u043e\u0442\u0440\u0435\u0441\u0442\u0430\u0432\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 PegJS \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u0432\u0443\u0445\u0433\u043e\u0434\u0438\u0447\u043d\u043e\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0432 \u0448\u0435\u0441\u0442\u044c \u0440\u0430\u0437 \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u043d\u043d\u044f\u044f \ud83d\ude09 ). \u0410 <a href=\"https:\/\/gist.github.com\/shamansir\/7348144\">\u0432\u043e\u0442<\/a> \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e PegJS \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0418 \u044f \u0435\u0449\u0451 \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u0437\u0430\u0434\u0430\u0447\u0443 \u2014 \u0443\u0431\u0435\u0434\u0438\u043b \u0441\u0435\u0431\u044f, \u0447\u0442\u043e \u043d\u0435 \u043c\u043e\u0433\u0443 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u043d\u0435 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0441\u0435\u0440 \u0432 \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0438\u0434. \u0427\u0442\u043e\u0431\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a\u043e\u0435 \u0432\u043e\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u043e:<\/p>\n<pre><code class=\"haskell\">shakespeare = (&quot;To&quot; \/ &quot;2&quot;) space &quot;b&quot; &quot;e&quot;? space               (&quot;or&quot; \/ &quot;|&quot;) space (&quot;not&quot; \/ &quot;!&quot;) space                (&quot;to&quot; \/ &quot;2&quot;) space &quot;b&quot; &quot;e&quot;? <\/code><\/pre>\n<p>  \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u043e \u0442\u0430\u043a\u043e\u0439 \u0432\u043e\u0442 \u043f\u0430\u0440\u0441\u0435\u0440:<\/p>\n<pre><code class=\"javascript\">rules.shakespeare = function() {   return (     seqnc(       choice(match(&quot;To&quot;), match(&quot;2&quot;)),       ref(rules.space),       match(&quot;b&quot;), maybe(match(&quot;e&quot;)),       ref(rules.space),             choice(match(&quot;or&quot;), match(&quot;|&quot;)),       ref(rules.space),       choice(match(&quot;not&quot;), match(&quot;!&quot;)),       ref(rules.space),       choice(match(&quot;to&quot;), match(&quot;2&quot;)),       ref(rules.space),       match(&quot;b&quot;), maybe(match(&quot;e&quot;))     )   ()); }<\/code><\/pre>\n<p>  \u0418\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0435:<\/p>\n<pre><code class=\"haskell\">foo = &quot;x&quot;+ a:(&quot;-&quot; c:some_rule { return c; })? { return a; }<\/code><\/pre>\n<p>  \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u043e \u0442\u0430\u043a\u043e\u0439:<\/p>\n<pre><code class=\"javascript\">rules.foo = function() {   return (     action(       seqnc(                             some(                              match(&quot;x&quot;)                     ),         label(&quot;a&quot;,           maybe(             action(               seqnc(                 match(&quot;-&quot;),                 label(&quot;c&quot;,                   ref(rules.some_rule)                 )               ),               function() { return c; }             )           )         )       ),       { return a; }     )   ()); }<\/code><\/pre>\n<p>  \u041d\u0430 \u043c\u043e\u0439 \u0434\u0432\u0443\u0433\u043b\u0430\u0437\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u044e\u0431\u043e\u0439 \u043b\u0438\u0441\u043f\u0435\u0440 \u043f\u043e\u0439\u043c\u0451\u0442, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u0435\u0441\u043b\u0438 \u0434\u0430\u0436\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043e\u0434\u0438\u043d \u043b\u0438\u0448\u044c \u0442\u0440\u0435\u0442\u0438\u0439 \u0433\u043b\u0430\u0437. \u0418 \u0437\u0430\u043a\u0440\u043e\u0435\u0442 \u043e\u0431\u0430 \u043c\u043e\u0438\u0445.<\/p>\n<p>  \u0422\u0430\u043a\u043e\u0432\u0430 \u0431\u044b\u043b\u0430 \u0446\u0435\u043b\u044c, \u0438, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0442\u044b \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u0448\u044c\u0441\u044f, \u043a\u0430\u043a \u0438\u0434\u0435\u044f \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u0430.<\/p>\n<p>  \u2026 \u0418 \u0432\u043f\u043e\u043b\u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u043c\u0430. \u0421\u043f\u0443\u0441\u0442\u044f \u0430\u0436 \u0434\u0436\u0432\u0430 \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u0433\u043e\u0434\u0430, \u0435\u0451 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0443 \u043c\u0435\u043d\u044f <em>\u0442\u0430\u043a\u0438 <strong>\u0432\u044b\u0448\u043b\u0430<\/strong><\/em>! \u041d\u0435 \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u044f \u043f\u0440\u044f\u043c\u043e \u0442\u0430\u043a \u0443\u0436 \u0441\u0438\u043b\u044c\u043d\u043e \u0442\u043e\u0440\u043e\u043f\u0438\u043b\u0441\u044f, \u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0437\u0430\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043b \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0438 \u043f\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u043b\u0441\u044f \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435, \u043d\u0435\u043c\u043d\u043e\u0433\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435, \u0430 \u0442\u043e \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0443\u0445\u043e\u0434\u0438\u043b \u0432 \u0437\u0430\u043f\u043e\u0439. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0434\u0432\u0430 \u0433\u043e\u0434\u0430, \u0432\u0435\u0447\u0435\u0440\u0430\u043c\u0438, \u044f \u043f\u043e \u043a\u0440\u0443\u043f\u0438\u043d\u043a\u0435 \u043a\u043e\u0432\u044b\u0440\u044f\u043b \u043a\u043e\u0434 \u0438 \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0434\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0447\u0435\u043c-\u0442\u043e \u0441\u0435\u0431\u044f \u0437\u0430\u043d\u044f\u0442\u044c. \u041f\u0440\u043e\u0434\u0443\u043c\u044b\u0432\u0430\u043b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u00ab\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b\u00bb \u0432 \u043d\u0435\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445, \u0432 \u043d\u0435\u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043e\u0431\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\u0445, \u0432 \u043d\u0435\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u2014 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a, \u043a\u0430\u043a \u0434\u0435\u043b\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u0439 \u0443\u0432\u0430\u0436\u0430\u044e\u0449\u0438\u0439 \u0441\u0435\u0431\u044f \u043d\u0435\u0440\u0434.<\/p>\n<p>  \u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438. \u041d\u043e, \u043a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430, \u043d\u0430\u0448\u043b\u0438\u0441\u044c \u0438 \u043f\u043b\u043e\u0445\u0438\u0435. \u0418, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u0433\u0440\u0443\u0441\u0442\u043d\u044b\u0435. \u041f\u0440\u0438\u0432\u0435\u0434\u0443 <a href=\"https:\/\/gist.github.com\/shamansir\/7346436\">\u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443<\/a> (\u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e gist \u0432\u044b\u0434\u0435\u0440\u0436\u0430\u043b \u044d\u0442\u0438 \u043a\u0438\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u044b?):<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/dmajda\/pegjs\/blob\/master\/examples\/css.pegjs\">css.pegjs<\/a> \u2014 \u0438\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0430\n<ul>\n<li><em>\u0440\u0430\u0437\u043c\u0435\u0440:<\/em> 13.4\u043a\u0411<\/li>\n<li><em>\u0441\u0442\u0440\u043e\u043a:<\/em> 552 \u00b1 15 \u043d\u0430 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438<\/li>\n<\/ul>\n<p>  <\/li>\n<li><a href=\"https:\/\/gist.github.com\/shamansir\/7274681#file-css-old_pegjs-parser-js\">css.old_pegjs.parser.js<\/a> \u2014 \u043f\u0430\u0440\u0441\u0435\u0440, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 PEG.js \u0434\u0432\u0443\u0445\u0433\u043e\u0434\u0438\u0447\u043d\u043e\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u043c\u043c\u0438\u0442 <code>4f86fca3d7<\/code>\n<ul>\n<li><em>\u0440\u0430\u0437\u043c\u0435\u0440:<\/em> <strong>367\u043a\u0411<\/strong><\/li>\n<li><em>\u0441\u0442\u0440\u043e\u043a:<\/em> 11,378 \u00b1 15 \u043d\u0430 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438,<\/li>\n<li><em>\u043f\u0430\u0440\u0441\u0438\u043d\u0433 <a href=\"https:\/\/github.com\/dmajda\/pegjs\/blob\/master\/benchmark\/css\/blueprint\/min\/screen.css\">\u0444\u0430\u0439\u043b\u0430<\/a> \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 11.8\u043a\u0411 x 10 \u0440\u0430\u0437:<\/em> <strong>11.60\u043c\u0441<\/strong><\/li>\n<\/ul>\n<p>  <\/li>\n<li><a href=\"https:\/\/gist.github.com\/shamansir\/7274681#file-css-cur_pegjs-parser-js\">css.cur_pegjs.parser.js<\/a> \u2014 \u043f\u0430\u0440\u0441\u0435\u0440, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 PEG.js,\n<ul>\n<li><em>\u0440\u0430\u0437\u043c\u0435\u0440:<\/em> <strong>334\u043a\u0411<\/strong>,<\/li>\n<li><em>\u0441\u0442\u0440\u043e\u043a:<\/em> 11,225 \u00b1 15 \u043d\u0430 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438,<\/li>\n<li><em>\u043f\u0430\u0440\u0441\u0438\u043d\u0433 <a href=\"https:\/\/github.com\/dmajda\/pegjs\/blob\/master\/benchmark\/css\/blueprint\/min\/screen.css\">\u0444\u0430\u0439\u043b\u0430<\/a> \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 11.8\u043a\u0411 x 10 \u0440\u0430\u0437:<\/em> <strong>19.40\u043c\u0441<\/strong><\/li>\n<\/ul>\n<p>  <\/li>\n<li><a href=\"https:\/\/gist.github.com\/shamansir\/7274681#file-css-cur_pegjs_fn-parser-js\">css.pegjs_fn.parser.js<\/a> \u2014 \u043f\u0430\u0440\u0441\u0435\u0440, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u0435\u0439 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 PEG.js-FN,\n<ul>\n<li><em>\u0440\u0430\u0437\u043c\u0435\u0440:<\/em> <strong>107\u043a\u0411<\/strong>,<\/li>\n<li><em>\u0441\u0442\u0440\u043e\u043a:<\/em> 4,452 \u00b1 200 \u043d\u0430 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 (\u0443 \u043c\u0435\u043d\u044f \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u0438 \u0442\u0430\u043c \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u0441\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043c\u043e\u0436\u043d\u043e),<\/li>\n<li><em>\u043f\u0430\u0440\u0441\u0438\u043d\u0433 <a href=\"https:\/\/github.com\/dmajda\/pegjs\/blob\/master\/benchmark\/css\/blueprint\/min\/screen.css\">\u0444\u0430\u0439\u043b\u0430<\/a> \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 11.8\u043a\u0411 x 10 \u0440\u0430\u0437:<\/em> <strong>561.60\u043c\u0441<\/strong><\/li>\n<\/ul>\n<p>  <\/li>\n<\/ul>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0438 \u043d\u0435-\u043e\u0441\u043e\u0431\u043e-\u0441\u0438\u043b\u044c\u043d\u043e\u0439 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u0435, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b\u0430\u0441\u044c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e, \u0430 \u043a\u0430\u0442\u0430\u0441\u0442\u0440\u043e\u0444\u0438\u0447\u0435\u0441\u043a\u0438 (\u0432 30 \u0440\u0430\u0437 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438). \u041c\u043e\u0436\u043d\u043e \u0441\u0432\u0430\u043b\u0438\u0442\u044c \u043d\u0430 \u0447\u0430\u0441\u0442\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u043f\u0430\u0440\u0441\u0435\u0440\u0430, JSON-\u043f\u0430\u0440\u0441\u0435\u0440 \u043f\u0430\u0440\u0441\u0438\u0442 <em>\u0432\u0441\u0435\u0433\u043e<\/em> \u0432 5-20 \u0440\u0430\u0437 \u0434\u043e\u043b\u044c\u0448\u0435 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430, \u043d\u043e \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043f\u0430\u0440\u0441\u044f\u0449\u0435\u0433\u043e\u0441\u044f \u0444\u0430\u0439\u043b\u0430 (\u043a\u0430\u043a \u0442\u044b \u0434\u0443\u043c\u0430\u0435\u0448\u044c, \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c, \u043c\u043e\u0436\u0435\u0442 \u044d\u0442\u043e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430?).<\/p>\n<p>  \u041d\u043e \u044f \u043f\u043e\u043a\u0430 \u0435\u0449\u0451 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b. \u0412\u043e\u043e\u0431\u0449\u0435. \u0414\u0430\u0436\u0435 \u043d\u0435 \u0431\u0440\u0430\u043b\u0441\u044f.<\/p>\n<p>  \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0431\u0435\u0434\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u0440 PEG.js, <a href=\"http:\/\/majda.cz\/\">David Majda<\/a>, \u043f\u043e\u043a\u0430 \u044f \u043a\u043e\u0432\u044b\u0440\u044f\u043b\u0441\u044f \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439, \u043f\u0435\u0440\u0435\u0432\u0451\u043b \u0432\u0441\u0451 \u0441\u0432\u043e\u0451 \u0445\u043e\u0437\u044f\u0439\u0441\u0442\u0432\u043e \u043d\u0430 \u043f\u0441\u0435\u0432\u0434\u043e-\u0431\u0430\u0439\u0442\u043a\u043e\u0434 (\u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0432\u044b\u0448\u0435, \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0441 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439). \u041d\u0435\u0442, \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u044f \u0441\u043b\u0435\u0434\u0438\u043b \u0437\u0430 \u0442\u0435\u043c, \u0447\u0442\u043e \u0442\u0430\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u043b \u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u043d\u043e\u0432\u044b\u0435. \u041d\u043e \u044f \u0445\u043e\u0442\u0435\u043b \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0441 \u0447\u0435\u043c \u0431\u044b\u043b\u043e \u0434\u0430\u0436\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0435\u0439 \u0438\u0434\u0435\u044f. \u041a\u0441\u0442\u0430\u0442\u0438, 469 \u0442\u0435\u0441\u0442\u043e\u0432, \u044d\u0442\u043e \u0432\u0430\u043c \u043d\u0435 \u0445\u0443\u0445\u0440\u044b-\u043c\u0443\u0445\u0440\u044b. \u041e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u044f\u0442\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043e\u043d\u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0433\u0434\u0430 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0431\u044b\u0432\u0430\u043b\u043e \u0442\u0430\u043a\u043e\u0435, \u0447\u0442\u043e \u0432 \u0434\u0435\u0441\u044f\u0442\u044b\u0439 \u0440\u0430\u0437 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0448\u044c \u0442\u0440\u0438 \u0442\u0435\u0441\u0442\u0430 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0432\u0430\u043b\u0438\u0442\u044c\u0441\u044f \u043f\u044f\u0442\u044c\u0434\u0435\u0441\u044f\u0442. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0442\u0435\u0431\u044f \u0442\u0430\u043a\u0438\u043c \u043d\u0435 \u0443\u0434\u0438\u0432\u0438\u0442\u044c.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e, \u043a\u0430\u043a \u0432\u0438\u0434\u0438\u0448\u044c, \u0434\u043e\u0440\u043e\u0433\u043e\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c, \u0432\u0441\u0435 \u043e\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u0441\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u043c\u0435\u043d\u044f \u043e\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438. \u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0435\u043c \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u043f\u0430\u0440\u0441\u0435\u0440\u0430, \u044f \u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u043b \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043d\u0430 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0432 \u0435\u0433\u043e \u0432 200 \u0440\u0430\u0437, \u0438 \u0441\u0442\u0430\u043b \u0431\u044b \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432. \u041a\u0441\u0442\u0430\u0442\u0438, <a href=\"https:\/\/twitter.com\/dudnik\">\u041d\u0438\u043a\u0438\u0442\u0430<\/a>, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044e \u0437\u0430 \u043f\u043e\u0434\u0431\u0430\u0434\u0440\u0438\u0432\u0430\u043d\u0438\u0435 \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u044d\u0442\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438.<\/p>\n<p>  \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u044f \u043d\u0430\u043c\u0435\u0442\u0438\u043b \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0438 \u0432\u044b\u0439\u0434\u0435\u0442. \u041d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0438\u043a\u0430\u043a \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u0418\u0431\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u043a\u0430\u043a \u044f \u0441\u0447\u0438\u0442\u0430\u044e, \u044f \u0438\u0437\u043e\u0431\u0440\u0451\u043b <strong><em>\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u041f\u0430\u0440\u0441\u0438\u043d\u0433\u0430<\/em><\/strong> (\u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0445 \u0435\u0449\u0451 \u043d\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b\u0438 \u0432 \u0425\u0430\u0441\u043a\u0435\u043b\u0435 \u2014 \u0438\u043d\u0430\u0447\u0435 \u044f \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u043f\u043e\u0437\u0434\u0430\u043b \u0438 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043b\u0435\u043b\u0435\u044f\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u0434\u0443 \u043d\u0430 \u0442\u0443\u043c\u0430\u043d\u043d\u044b\u0439 \u0448\u0430\u043d\u0441 \u0437\u0430\u043f\u0430\u0442\u0435\u043d\u0442\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u043d\u044b\u0439 \u0442\u0435\u0440\u043c\u0438\u043d).<\/p>\n<p>  \u041e \u043d\u0438\u0445 \u0438 \u043f\u043e\u0439\u0434\u0451\u0442 \u0440\u0435\u0447\u044c.<\/p>\n<p>  \u0410\u0445 \u0434\u0430, \u0432\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u2014 \u0432 \u043c\u043e\u0451\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 <a href=\"https:\/\/github.com\/shamansir\/pegjs-fn\">PEG.js-FN<\/a> \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435.<\/p>\n<h2>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u0440\u0441\u0435\u0440\u0430<\/h2>\n<p>  \u0412 \u043f\u0430\u0440\u0441\u0435\u0440\u0430\u0445, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 PEGjs-FN (\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435, \u043a\u0441\u0442\u0430\u0442\u0438, \u043e\u0442 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430 [\u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442]), \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u0447\u0451\u0442\u043a\u043e \u043e\u0442\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442 \u043a\u043e\u0434\u0430 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u044c\u044e \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u00ab\u0427\u0442\u043e \u0437\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u0434?\u00bb, \u2014 \u0441\u043f\u0440\u043e\u0441\u0438\u0448\u044c \u0442\u044b.<\/p>\n<p>  \u0412 PEG.js \u0435\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438 \u0432 \u0441\u043a\u043e\u0431\u043a\u0438 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0435\u043a\u0438\u0439 JS-\u043a\u043e\u0434, \u0435\u0441\u043b\u0438 \u044d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u043b\u0430 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 JS-\u043a\u043e\u0434\u0435, \u0432 \u0432\u0438\u0434\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432\u0441\u0435 \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0438\u043b\u0438 \u0432\u044b\u0448\u0435. \u042d\u0442\u0438 \u00ab\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f\u00bb \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u0441\u043e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 JS-\u043a\u043e\u0434, \u043f\u043e \u0442\u0430\u043a\u043e\u043c\u0443 \u0436\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0439 \u0432\u0441\u0451, \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0443 \u0443\u0433\u043e\u0434\u043d\u043e.<\/p>\n<p>  \u0412\u043e\u0437\u044c\u043c\u0451\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0448\u0435:<\/p>\n<pre><code class=\"haskell\">foo = &quot;x&quot;+ a:(&quot;-&quot; c:some_rule { return c; })? { return a; }<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0442\u044b \u0437\u043d\u0430\u043a\u043e\u043c \u0441 PEG-\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u043e\u0439, \u0442\u043e \u0442\u044b \u0432\u0441\u0451 \u043f\u043e\u043d\u044f\u043b. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442 \u2014 \u0442\u043e \u043d\u0435\u0442, \u043d\u043e \u043d\u0435 \u043e\u0442\u0447\u0430\u0438\u0432\u0430\u0439\u0441\u044f, \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u044e \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c.<\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code>a<\/code> \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b \u0431\u044b\u043b\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b &quot;-&quot;, \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043f\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0443 <code>some_rule<\/code> \u2014 \u043d\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f <em>\u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e<\/em> \u0438 \u043e\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <em>\u0442\u043e\u043b\u044c\u043a\u043e<\/em> \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043f\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0443 <code>some_rule<\/code>. \u0422\u0435\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0443 <code>foo<\/code> \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435 \u043d\u0430\u0431\u043e\u0440 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u00abx\u00bb, \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043f\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 <code>a<\/code> \u2014 \u0430 \u043b\u0438\u0448\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043f\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 <code>a<\/code>. \u0410 \u043c\u043e\u0433\u043b\u043e \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u0441\u043a\u0443\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0435\u0440\u043d\u0443\u043b \u0431\u044b \u043d\u043e\u0432\u0435\u0439\u0448\u0438\u0439 \u0441\u043e\u043d\u0435\u0442 \u0428\u0435\u043a\u0441\u043f\u0438\u0440\u0430.<\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, PEG.js \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438 \u0434\u0440\u0443\u0433\u0443\u044e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c: \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u043f\u0430\u0440\u0441\u0435\u0440 \u043d\u0435\u043a\u0438\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u043c (\u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0435\u0440\u0430) JS-\u043a\u043e\u0434\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432\u0441\u0435\u043c \u0442\u0430\u043a\u0438\u043c \u0431\u043b\u043e\u043a\u0430\u043c \u043a\u043e\u0434\u0430. \u0412 PEG.js \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0438\u043c\u0435\u043d\u0443\u0435\u0442\u0441\u044f <em>\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c<\/em>.<\/p>\n<p>  \u0421\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0438 \u0435\u0441\u0442\u044c <em>\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u0434<\/em> \u2014 \u043f\u043e \u0441\u0443\u0442\u0438, \u043b\u044e\u0431\u043e\u0439 JS-\u043a\u043e\u0434, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439\u0441\u044f \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430:<\/p>\n<pre><code class=\"javascript\">(function() {   \/\/ \u043e\u0431\u0449\u0438\u0435 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435  var input, ppos, pos;   \/\/ \u0432\u0435\u0441\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u0434, \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0442 \u043a\u043e\u0434\u0430 \u043f\u0430\u0440\u0441\u0435\u0440\u0430  var __user_code = function() {     \/\/ \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u043c    function offset(), function text(), ...     \/\/ \u0438\u043d\u043b\u0430\u0439\u043d-\u043a\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430    function PARSE_ME_BABY...    function SHIT_THAT_KILLED_ELVIS...     return {      \/\/ \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0431\u043b\u043e\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430       foo: [ function(ctx) { return (function(c) { return c; })(ctx.c); },             function(ctx) { return (function(a) { return a; })(ctx.a); }  ]      ...     }   };   \/\/ \u043a\u043e\u0434 \u043f\u0430\u0440\u0441\u0435\u0440\u0430, \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430  return (function() {     \/\/ \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c, \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0438 \u043f\u0430\u0440\u0441\u0435\u0440\u0443    var code, rules = {};     \/\/ \u043a\u043e\u0434 \u043f\u0440\u0430\u0432\u0438\u043b, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u0441\u0435\u0440     rules.foo = function() { var code = code.foo;                              return action(seqnc(...))(code[1]); }    rules.start = rules.foo;     \/\/ \u0432\u0441\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435\u0441\u044f \u0432 \u043f\u0430\u0440\u0441\u0435\u0440\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b     \/\/ (\u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435\u0441\u044f \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f)    function action() { ... }    function seqnc() { ... }    function match() { ... }    ...     \/\/ \u043f\u0430\u0440\u0441\u0435\u0440\u043e-\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0438 \u0445\u0435\u043b\u043f\u0435\u0440\u044b    ...     return {      ...      parse: function(_input) {         input = _input;         code = __user_code();         return rules.start();      }    }   })();  })();<\/code><\/pre>\n<p>  \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u0435 \u043f\u0440\u0430\u0432\u0434\u0430 \u043b\u0438? \ud83d\ude42<\/p>\n<h3>\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f<\/h3>\n<p>  \u041e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432 \u043f\u0430\u0440\u0441\u0435\u0440\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0447\u0435\u0440\u0435\u0437 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432 JS, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f JS-\u043e\u0431\u044a\u0435\u043a\u0442, \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u044f\u0442 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0430 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044d\u0442\u043e\u0442 \u0444\u0430\u043a\u0442 \u0442\u043e\u0436\u0435 \u043f\u0430\u0433\u0443\u0431\u043d\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c.<\/p>\n<p>  \u0412\u0441\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b \u043a\u044d\u0448\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u043e \u043a\u043b\u044e\u0447\u0443 \u00ab\u0438\u043c\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u0430 + \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435\u00bb, \u043a\u0430\u043a \u0438 \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0435.<\/p>\n<p>  \u041f\u0440\u0438 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u043c \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0435 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 <code>MatchFailed<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0447\u0435\u043d\u043e, \u0441\u043d\u0430\u0431\u0436\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439, \u0432\u0440\u043e\u0434\u0435 \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043d\u0435\u0443\u0434\u0430\u0447\u0438 (\u0441\u0442\u0440\u043e\u043a\u0430: \u0441\u0442\u043e\u043b\u0431\u0435\u0446), \u0438 \u0432\u044b\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e.<\/p>\n<h2>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b<\/h2>\n<p>  \u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u0432\u0432\u043e\u0434\u043d\u044b\u0439 \u043b\u0438\u043a\u0431\u0435\u0437 \u0434\u0430\u043d, \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u0440\u0430\u0437\u0431\u043e\u0440\u0443 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432.<\/p>\n<p>  \u0421\u0435\u043a\u0440\u0435\u0442 <em>\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430<\/em> \u2014 \u0430 \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0438\u0445 \u0438 \u043d\u0435 \u043d\u0430\u0437\u043e\u0432\u0451\u0448\u044c \u2013 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u043e\u043d\u0438 \u2014 \u0441\u0443\u0442\u044c <a href=\"http:\/\/shamansir.github.io\/blog\/ru\/articles\/the-way-of-the-asynchronous-samurai\/#%E3%83%A2%E3%83%8A%E3%83%80%E3%81%AE%E7%A9%BA%E9%81%93\">\u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/a>. \u041a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437, \u0432 \u043d\u0438\u0445 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 \u0438 \u043e\u043d\u0430 \u043d\u0430\u0434\u0451\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430, \u043a\u043e\u0433\u0434\u0430 \u0431\u044b \u043e\u043d \u043d\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0451\u043b. \u042d\u0442\u0443 \u0442\u0435\u0445\u043d\u0438\u043a\u0443 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <a href=\"http:\/\/en.wikipedia.org\/wiki\/Partial_application\">\u0447\u0430\u0441\u0442\u0438\u0447\u043d\u044b\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c<\/a>, \u0438 \u0431\u0443\u0434\u044c \u0442\u044b \u0445\u0430\u0441\u043a\u0435\u043b\u0438\u0441\u0442 \u0438\u043b\u0438 \u0441\u043a\u0430\u043b\u0438\u0441\u0442, \u043e\u043d\u0430 \u0442\u0435\u0431\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0430 \u043d\u0430 \u0432\u0441\u0435 \u0441\u0442\u043e.<\/p>\n<p>  \u0412 JavaScript \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043b\u0438\u0431\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043b\u0435\u0441\u0435\u043d\u043a\u0443 \u0438\u0437 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043b\u0438\u0431\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Function\/bind\">Function.bind<\/a>. \u042f, \u043a\u0430\u043a \u0438 \u043f\u0438\u0441\u0430\u043b \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"http:\/\/shamansir.github.io\/blog\/ru\/articles\/the-way-of-the-asynchronous-samurai\/\">\u043f\u0440\u043e \u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u0421\u0430\u043c\u0443\u0440\u0430\u044f<\/a>, \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435. \u041d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043d\u044b\u043d\u0435 \u043d\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0439 \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u0451\u043c, \u043f\u043e-\u043c\u043e\u0435\u043c\u0443 \u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u0438 \u0442\u0430\u043a \u043f\u043e\u043d\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.<\/p>\n<p>  \u0427\u0442\u043e \u044d\u0442\u043e \u0434\u0430\u0451\u0442 \u043d\u0430\u043c?<\/p>\n<p>  \u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0438 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 \u043e\u0434\u043d\u0438\u043c \u043c\u0430\u0445\u043e\u043c. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 AST-\u0434\u0435\u0440\u0435\u0432\u043e \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438 (\u0430 PEG.js \u043c\u0430\u0441\u0442\u0435\u0440\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 AST-\u0434\u0435\u0440\u0435\u0432\u044c\u044f).<\/p>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u0430 \u0434\u0440\u0443\u0433\u0438\u043c, \u043d\u043e \u0435\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u0437 \u043d\u0438\u0445 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u043b \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0432\u0432\u043e\u0434\u0430, \u043d\u0435 \u0431\u044c\u0451\u0442 \u043f\u0430\u043d\u0438\u043a\u0443, \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0438 \u0440\u0443\u0433\u0430\u044f\u0441\u044c \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f\u043c\u0438, \u0430 \u0442\u0438\u0445\u043e \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0437\u0430\u0434.<\/p>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u0435\u0441\u043b\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0431\u0440\u043e\u0441\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0435 \u0436\u0435 \u0438\u0437 \u043d\u0438\u0445 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0438 \u043f\u043e\u0434\u0430\u0432\u0438\u0442\u044c. \u0410 \u0432\u0435\u0434\u044c \u044d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u0443\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0434\u0430\u043b\u0435\u043a\u043e \u0432\u0433\u043b\u0443\u0431\u044c \u0446\u0435\u043f\u043e\u0447\u0435\u043a \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432. \u0418\u043b\u0438 \u0441\u0430\u043c \u0431\u044b\u0442\u044c \u0433\u0434\u0435-\u0442\u043e \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0435 \u044d\u0442\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0438. \u0414\u0430\u043b\u0435\u043a\u043e\u0439-\u0434\u0430\u043b\u0435\u043a\u043e\u0439 \u0433\u043b\u0443\u0431\u0438\u043d\u0435. \u041d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439.<\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0432 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 (<em>TODO:<\/em> \u0443\u0431\u0440\u0430\u0442\u044c \u0442\u0430\u0432\u0442\u043e\u043b\u043e\u0433\u0438\u044e) \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u043c\u044b, \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435, \u00ab\u0437\u0430\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u00bb \u0441\u043b\u0435\u043f\u043a\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u0435 \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435, \u043f\u0440\u0438\u043d\u0443\u0436\u0434\u0430\u044f \u0438\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0441\u0432\u043e\u0438\u0445 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u0445. \u0417\u0430\u0442\u0435\u043c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043c\u044b \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u2014 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 \u0438 \u0434\u0430\u043b\u0435\u0435 \u0432\u0433\u043b\u0443\u0431\u044c. \u042d\u0442\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430\u0448 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u00ab\u0437\u0430\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u0435\u0442\u00bb \u0432\u0441\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u0441\u0435\u0431\u044f \u043b\u044e\u0431\u0438\u043c\u043e\u0433\u043e.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0434 <code>sequence(match(&quot;foo&quot;), or(match('bar'), ch()))<\/code>, \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442 \u043b\u0438\u0448\u044c (\u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>sequence<\/code>), \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439 <code>&quot;foo&quot;<\/code>, \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u0448\u0443\u044e\u0441\u044f \u0447\u0430\u0441\u0442\u044c c <code>&quot;bar&quot;<\/code>, \u0430 \u0435\u0441\u043b\u0438 \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442 \u2014 \u043e\u0442\u043a\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0447\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c \u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0437\u0430 <code>&quot;foo&quot;<\/code> \u0438\u0434\u0451\u0442 \u043d\u0435\u043a\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b (\u0442\u0430\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>ch()<\/code>). \u041d\u043e \u043e\u043d \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u044d\u0442\u0438\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0430 \u00ab\u043f\u0440\u0438\u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u00bb \u0438\u0445 \u0434\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 <code>sequence<\/code>.<\/p>\n<p>  \u0418 \u043e\u0434\u0438\u043d \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0442\u043e\u043b\u0447\u043e\u043a \u2014 \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u044b\u0437\u043e\u0432 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043c\u043e\u0449\u043d\u044b\u0439 \u0438\u043c\u043f\u0443\u043b\u044c\u0441 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0438 \u2014 \u0441\u043b\u043e\u0432\u043d\u043e \u0434\u043e\u043c\u0438\u043d\u043e\u0448\u043a\u0438, \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0444\u043e\u0440\u043c\u0435 \u0434\u0435\u0440\u0435\u0432\u0430, \u043e\u043d\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0437\u0430\u0434\u0435\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430, \u043f\u0440\u0438\u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044f \u0441\u0432\u043e\u0438\u043c \u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u0432\u043f\u0430\u0432\u0448\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b JS-\u043a\u043e\u0434\u0430, \u043f\u043e\u043a\u0430 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u0438\u043c\u043f\u0443\u043b\u044c\u0441 \u043d\u0435 \u0434\u043e\u0439\u0434\u0451\u0442 \u0434\u043e \u043a\u043e\u043d\u0447\u0438\u043a\u0430 \u0441\u0430\u043c\u043e\u0439 \u0434\u043b\u0438\u043d\u043d\u043e\u0439 \u0432\u0435\u0442\u043a\u0438. (<em>FIXME:<\/em> \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0430\u043b\u043b\u0435\u0433\u043e\u0440\u0438\u044f).<\/p>\n<p>  \u0418\u043b\u0438 \u043d\u0435 \u0434\u043e\u0439\u0434\u0451\u0442, \u0435\u0441\u043b\u0438 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0438\u0437 \u043d\u0435\u0443\u0434\u0430\u0447 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043d\u0435 \u0431\u044b\u043b\u0430 \u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u0430 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0438 \u043f\u0440\u043e\u0441\u043e\u0447\u0438\u043b\u0430\u0441\u044c \u043d\u0430\u0440\u0443\u0436\u0443.<\/p>\n<p>  \u0421\u043e\u0431\u0440\u0430\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u043c\u0435\u0441\u0442\u0435, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u044d\u0442\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0418 \u0433\u0440\u0443\u043f\u043f\u044b \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u043d \u0432\u0445\u043e\u0434\u0438\u0442. \u0422\u0430\u043a\u0438\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u043f\u0440\u0438\u0434\u0430\u0432\u0430\u044f \u0438\u043c\u043f\u0443\u043b\u044c\u0441 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0438\u0445. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u2014 \u0442\u0435 \u0436\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430, \u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0438\u0445 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u2014 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u2014 \u0432\u0435\u0440\u043d\u0435\u0435, \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0441\u0430\u043c\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c. \u041d\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0438\u0445 \u00ab\u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u044f\u00bb \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u0435\u043d \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u00ab\u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u044f\u00bb \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432. \u0418 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u0442\u0435\u043a\u0441\u0442 \u043c\u044b \u0441 \u0442\u043e\u0433\u043e \u0436\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430 \u2014 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438\u0441\u043a\u0440\u0443 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u2014 \u0438 \u0432\u0436\u0438\u0445!<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0443 \u0438 \u043a\u043e\u0434 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0441\u0435\u0440\u0430 <a href=\"https:\/\/gist.github.com\/shamansir\/7249136\">\u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435<\/a> (\u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0432\u044b\u0434\u0435\u0440\u0436\u043a\u0430 \u0438\u0437 \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u0441\u0435\u0440 \u0446\u0435\u043b\u0438\u043a\u043e\u043c).<\/p>\n<p>  \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u0441\u0442\u0430\u0442\u0438, \u0435\u0441\u043b\u0438 \u0438 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442 \u043a\u043e\u0434 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432\u043e\u043e\u0431\u0449\u0435, \u0442\u043e \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u2014 \u0432 \u043f\u043b\u0430\u043d\u0435 \u0441\u043c\u0435\u043d\u044b \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 \u0432\u044b\u0437\u043e\u0432\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u0430\u0440\u0441\u0435\u0440\u0430, \u0447\u0442\u043e \u043d\u0438\u043a\u043e\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u0442 \u0438\u0445 \u043b\u043e\u0433\u0438\u043a\u0438.<\/p>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u0440\u043e\u0439\u0434\u0451\u043c\u0441\u044f \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435. \u041a\u043e\u0434 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0438\u0437 \u043d\u0438\u0445 \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 \u0434\u0435\u0441\u044f\u0442\u0438 \u0441\u0442\u0440\u043e\u043a, \u043d\u043e \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0443\u043d\u044b\u043b\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u2014 \u043f\u043e\u0434\u043e\u0431\u043d\u043e \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u0432 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430\u0445. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0441\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435 \u0432 \u043d\u0438\u0436\u0435\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u043e\u0434 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0438\u0431\u043e \u043e\u043d \u043f\u043e\u0434\u043e\u0431\u0435\u043d \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430\u043c \u2014 \u0430 \u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0443 \u043d\u0430\u0434\u0435\u044f\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043e\u043d \u043f\u043e\u043d\u044f\u0442\u0435\u043d \u0431\u0435\u0437 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0439: \u0434\u0430\u0436\u0435 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 \u0446\u0435\u043b\u044f\u0445 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u043c\u0435\u0441\u0442\u0430 \u0438 \u043d\u0435\u0437\u0430\u043c\u0443\u0442\u043d\u0451\u043d\u043d\u043e\u0441\u0442\u0438 \u0442\u0432\u043e\u0435\u0433\u043e \u0432\u0437\u043e\u0440\u0430 \u044f \u043e\u043f\u0443\u0441\u0442\u0438\u043b \u043a\u043e\u0434 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0432\u0440\u043e\u0434\u0435 <code>safe<\/code>, <code>failed<\/code> \u0438 <code>inctx<\/code> (\u0438\u0445 \u043a\u043e\u0434, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0430\u0431\u0437\u0430\u0446\u0430 (<a href=\"https:\/\/gist.github.com\/shamansir\/7249136#file-arithmetics-parser-full-js\">\u043f\u043e\u0432\u0442\u043e\u0440\u044e \u0435\u0451<\/a>, \u0447\u0442\u043e\u0431\u044b \u0442\u044b \u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u043d\u0435 \u0431\u0435\u0433\u0430\u043b \u0433\u043b\u0430\u0437\u0430\u043c\u0438)).<\/p>\n<h3>1. <code>ch<\/code><\/h3>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong>: \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043b\u0438 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043a\u0430\u043a\u043e\u0439 \u0431\u044b \u0442\u043e \u043d\u0438 \u0431\u044b\u043b\u043e \u0441\u0438\u043c\u0432\u043e\u043b \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0435\u0433\u043e. \u041a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0432\u043e\u0434\u0430 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0440\u0430\u0441\u0446\u0435\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430.<\/p>\n<p>  <strong>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435<\/strong>: <code>.<\/code><\/p>\n<p>  <strong>\u041a\u043e\u0434<\/strong>:<\/p>\n<pre><code class=\"javascript\">function ch() {    if (pos &gt;= ilen) failed(ANY, EOI);   return input[pos++];  }<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u0430 \u0434\u043b\u0438\u043d\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u043d\u0435 \u0443\u0434\u0430\u043b\u0441\u044f, \u0438 \u043f\u0440\u0438 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u043b\u0441\u044f \u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u043c\u0432\u043e\u043b (\u043c\u0430\u0440\u043a\u0435\u0440 <code>ANY<\/code>), \u0431\u044b\u043b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u043a\u043e\u043d\u0435\u0446 \u0432\u0432\u043e\u0434\u0430 (\u043c\u0430\u0440\u043a\u0435\u0440 <code>EOI<\/code> \u2014 <em>End of Input<\/em>): \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>failed<\/code> \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u0443\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 <code>MatchFailed<\/code> \u0438 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u043d\u0430\u0440\u0443\u0436\u0443.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0434\u043b\u0438\u043d\u044b \u0441\u0442\u0440\u043e\u043a\u0438 \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b, \u0437\u0430\u0442\u0435\u043c \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430.<\/p>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong>:<\/p>\n<pre><code class=\"javascript\">var input = 'foo'; \/\/ PEG: start = . . . seqnc(ch(), ch(), ch())(); \/\/ == [ 'f', 'o', 'o' ]<\/code><\/pre>\n<p>  <\/p>\n<h3>2. <code>match<\/code><\/h3>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong>: \u0421\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0439, \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u0432 \u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438;<\/p>\n<p>  <strong>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435<\/strong>: <code>&quot;&lt;\u0441\u0442\u0440\u043e\u043a\u0430&gt;&quot;<\/code>, <code>'\u0441\u0442\u0440\u043e\u043a\u0430'<\/code><\/p>\n<p>  <strong>\u041a\u043e\u0434<\/strong>:<\/p>\n<pre><code class=\"javascript\">function match(str) {    var slen = str.length;   if ((pos + slen) &gt; ilen) { failed(str, EOI); }   if (input.substr(pos, slen) === str) {     pos += slen; return str;   }   failed(str, cc()); }<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0441\u0443\u043c\u043c\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0438 \u0434\u043b\u0438\u043d\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u043b\u0438\u043d\u044b \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e \u043d\u0435\u0443\u0434\u0430\u0447\u0435 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430, \u043f\u043e\u044f\u0441\u043d\u0438\u0432, \u0447\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u043b\u0430\u0441\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430, \u0430 \u0431\u044b\u043b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u043a\u043e\u043d\u0435\u0446 \u0432\u0432\u043e\u0434\u0430 (\u043c\u0430\u0440\u043a\u0435\u0440 <code>EOI<\/code> \u2014 <em>End of Input<\/em>).<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u0432\u0432\u043e\u0434\u0430, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0438 \u0440\u0430\u0432\u043d\u044b\u0439 \u043f\u043e \u0434\u043b\u0438\u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u0435\u043d \u043f\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043d\u0430 \u0434\u043b\u0438\u043d\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0435\u0451.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043d\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u0435\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435, \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438, \u043f\u043e\u044f\u0441\u043d\u0438\u0432, \u0447\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u043b\u0430\u0441\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430, \u0430 \u0431\u044b\u043b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0438\u043c\u0432\u043e\u043b: \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>cc()<\/code> (\u043d\u0435 \u043f\u0443\u0442\u0430\u0442\u044c \u0441 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c <code>ch<\/code>) \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0438\u043b\u0438 \u043c\u0430\u0440\u043a\u0435\u0440 <code>EOI<\/code>, \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0432\u043e\u0434\u0430.<\/p>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong>:<\/p>\n<pre><code class=\"javascript\">var input = 'foo'; \/\/ PEG: start = . 'oo' seqnc(ch(), match(&quot;oo&quot;))(); \/\/ == [ 'f', 'oo' ]<\/code><\/pre>\n<p>  <\/p>\n<h3>3. <code>re<\/code><\/h3>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong>: \u0421\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u043c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432 PEG.js \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u044b \u0432\u0441\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u0440\u043e\u043c\u0435 \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u0432\u0438\u0434\u0435 <code>[...]<\/code> \u0438 <code>[^...]<\/code> (\u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0438\u043c\u0435\u043b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 PEG \u00ab\u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438\u00bb \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u043c\u0438). \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0438 \u0432\u043d\u0443\u0442\u0440\u044c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0432\u0440\u0430\u0433 \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0451\u0442, \u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0440\u0435\u0437\u0430\u043d \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f AST-\u0434\u0435\u0440\u0435\u0432\u0430. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0432 \u044d\u0442\u043e\u0442 \u0436\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 <code>match<\/code> \u0441 ignore-case \u0444\u043b\u0430\u0433\u043e\u043c.<\/p>\n<p>  <strong>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435<\/strong>: <code>[&lt;\u0441\u0438\u043c\u0432\u043e\u043b\u044b&gt;]<\/code>, <code>[^&lt;\u0441\u0438\u043c\u0432\u043e\u043b\u044b&gt;]<\/code>, <code>[&lt;\u0441\u0438\u043c\u0432\u043e\u043b1&gt;-&lt;\u0441\u0438\u043c\u0432\u043e\u043bn&gt;]<\/code>, <code>[^&lt;\u0441\u0438\u043c\u0432\u043e\u043b1&gt;-&lt;\u0441\u0438\u043c\u0432\u043e\u043bn&gt;]<\/code>, <code>&quot;\u0441\u0442\u0440\u043e\u043a\u0430&quot;i<\/code>, <code>'&lt;\u0441\u0442\u0440\u043e\u043a\u0430&gt;'i<\/code><\/p>\n<p>  <strong>\u041a\u043e\u0434<\/strong>:<\/p>\n<pre><code class=\"javascript\">function re(rx, desc) {   var res, desc = desc || rx.source;   if (res = rx.exec(input.substr(pos))) {     if (res.index !== 0) failed(desc, cc());     pos += res[0].length; return res[0];   } else failed(desc, cc()); }<\/code><\/pre>\n<p>  \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <code>rx<\/code> \u0438 \u0435\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 <code>desc<\/code>. \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 <code>rx<\/code>, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0446\u0438\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>failed()<\/code> \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 <code>MatchFailed<\/code> \u0441 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435\u043c, \u0447\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0432 <code>desc<\/code>, \u0430 \u0431\u044b\u043b \u043d\u0430\u0439\u0434\u0435\u043d \u0441\u0438\u043c\u0432\u043e\u043b \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>cc()<\/code> (\u043d\u0435 \u043f\u0443\u0442\u0430\u0442\u044c \u0441 <code>ch<\/code>).<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u2014 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043d\u0430 \u0434\u043b\u0438\u043d\u0443 \u0441\u043e\u0432\u043f\u0430\u0432\u0448\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e.<\/p>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong>:<\/p>\n<pre><code class=\"javascript\">var input = 'foo'; \/\/ PEG: start = [^f-o]+ some(re(\/[^p-v]\/))(); \/\/ == [ 'f', 'o', 'o' ]<\/code><\/pre>\n<p>  <\/p>\n<h3>4. <code>text<\/code><\/h3>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong>: \u0412\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0439 \u0442\u0435\u043a\u0441\u0442. \u0418\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>seqnc<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u00ab\u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u00bb \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432.<\/p>\n<p>  <strong>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435<\/strong>: <code>$&lt;\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435&gt;<\/code><\/p>\n<p>  <strong>\u041a\u043e\u0434<\/strong>:<\/p>\n<pre><code class=\"javascript\">function text(f) {   var p_pos = pos;   f(); return input.substr(p_pos, pos-p_pos);  }<\/code><\/pre>\n<p>  \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c <em>\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e<\/em> \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>f<\/code> \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0451\u043d\u043d\u043e\u0433\u043e \u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0442\u0440\u0435\u0437\u043e\u043a \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0438 \u043d\u043e\u0432\u043e\u0439 (\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044e). \u0415\u0441\u043b\u0438 \u0431\u044b\u043b\u043e \u0432\u044b\u0431\u0440\u043e\u0448\u0435\u043d\u043e \u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0447\u0435\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong>:<\/p>\n<pre><code class=\"javascript\">var input = 'foo'; \/\/ PEG: start = $(. . .) text(seqnc(ch(), ch(), ch()))(); \/\/ == [ 'foo' ], \u0430 \u043d\u0435 [ 'f', 'o', 'o' ]<\/code><\/pre>\n<p>  <\/p>\n<h3>5. <code>maybe<\/code><\/h3>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong>: \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 \u0434\u0430\u043d\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0438 \u0435\u0441\u043b\u0438 \u0434\u0430 \u2014 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043d\u0430 \u043a\u043e\u043d\u0435\u0446 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0430 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u2014 \u043d\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e.<\/p>\n<p>  <strong>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435<\/strong>: <code>&lt;\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435&gt;?<\/code><\/p>\n<p>  <strong>\u041a\u043e\u0434<\/strong>:<\/p>\n<pre><code class=\"javascript\">function maybe(f) {   var missed = 0,       res = safe(f, function() { missed = 1; });   if (missed) return '';   return res; }<\/code><\/pre>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>f<\/code> \u0432 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>safe<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u0443\u044e \u0432\u0442\u043e\u0440\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0444\u043b\u0430\u0433 <code>missed<\/code> \u0432 \u0435\u0434\u0438\u043d\u0438\u0446\u0443. \u0415\u0441\u043b\u0438 \u0444\u043b\u0430\u0433 <code>missed<\/code> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u0438\u043d\u0430\u0447\u0435 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430.<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043b\u043e \u043c\u0435\u0441\u0442\u043e, \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c <code>f<\/code> \u0438\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442.<\/p>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong>:<\/p>\n<pre><code class=\"javascript\">var input = 'foo'; \/\/ PEG: start = 'f'? (. .)? seqnc(maybe(match('f')), maybe(seqnc(ch(), ch())))(); \/\/ == [ 'f', [ 'o', 'o' ] ]<\/code><\/pre>\n<p>  <\/p>\n<h3>6. <code>some<\/code><\/h3>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong>: \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 \u0434\u0430\u043d\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043d\u0430 \u043a\u043e\u043d\u0435\u0446 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439.<\/p>\n<p>  <strong>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435<\/strong>: <code>&lt;\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435&gt;+<\/code><\/p>\n<p>  <strong>\u041a\u043e\u0434<\/strong>:<\/p>\n<pre><code class=\"javascript\">function some(f) {   return [f()].concat(any(f)()); }<\/code><\/pre>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>f<\/code> \u0432 \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0431\u0440\u043e\u0448\u0435\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>some<\/code> \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e, \u0438 \u0437\u0430\u0442\u0435\u043c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>any<\/code> (\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430 \u043d\u043e\u043b\u044c \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0438\u0445), \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0438\u0436\u0435, \u0441 \u0442\u0435\u043c\u0438 \u0436\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438.<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u043b\u0438 \u043c\u0435\u0441\u0442\u043e, \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c <code>f<\/code> \u0438\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442.<\/p>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong>:<\/p>\n<pre><code class=\"javascript\">var input = 'foo'; \/\/ PEG: start = 'f'? .+ seqnc(maybe(match('f')), some(ch()))(); \/\/ == [ 'f', [ 'o', 'o' ] ]<\/code><\/pre>\n<p>  <\/p>\n<h3>7. <code>any<\/code><\/h3>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong>: \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c. \u0415\u0441\u043b\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u2014 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043d\u0430 \u043a\u043e\u043d\u0435\u0446 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439 \u043d\u0435 \u0431\u044b\u043b\u043e \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c.<\/p>\n<p>  <strong>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435<\/strong>: <code>&lt;\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435&gt;*<\/code><\/p>\n<p>  <strong>\u041a\u043e\u0434<\/strong>:<\/p>\n<pre><code class=\"javascript\">function any(f) {   var s = [],       missed = 0,       on_miss = function() { missed = 1; }   while (!missed) {     s.push(safe(f, on_miss));   }   if (missed) s.splice(-1);   return s; }<\/code><\/pre>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>f<\/code> \u0432 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>safe<\/code> \u043f\u043e\u043a\u0430 \u0444\u043b\u0430\u0433 <code>missed<\/code> \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 (\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c). \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>safe<\/code> \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>on_miss<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0444\u043b\u0430\u0433 <code>missed<\/code>. \u0412\u0441\u0435 \u0443\u0434\u0430\u0447\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 <code>s<\/code>.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0444\u043b\u0430\u0433 <code>missed<\/code> \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u0443\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 (\u0441\u043e\u0440\u0432\u0430\u0432\u0448\u0438\u0439\u0441\u044f) \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <code>s<\/code> \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0435\u0433\u043e; \u0438\u043d\u0430\u0447\u0435 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u043c\u0438 <code>s<\/code> \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043b\u043e \u043c\u0435\u0441\u0442\u043e, \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c <code>f<\/code> \u0438\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442.<\/p>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong>:<\/p>\n<pre><code class=\"javascript\">var input = 'foo'; \/\/ PEG: start = 'f'+ 'o'* seqnc(some(match('f')), any(match('o')))(); \/\/ == [ [ 'f' ], [ 'o', 'o' ] ]<\/code><\/pre>\n<p>  <\/p>\n<h3>8. <code>and<\/code><\/h3>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong>: \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0438\u043c\u0435\u043b\u043e \u043c\u0435\u0441\u0442\u043e, \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438 <em>\u043d\u0435<\/em> \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430. \u0415\u0441\u043b\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e, \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430.<\/p>\n<p>  <strong>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435<\/strong>: <code>&amp;&lt;\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435&gt;<\/code><\/p>\n<p>  <strong>\u041a\u043e\u0434<\/strong>:<\/p>\n<pre><code class=\"javascript\">function and(f) {   var p_pos = pos, missed = 0;   nr = 1; safe(f, function() {     missed = 1;   }); nr = 0;   pos = p_pos;   if (missed) failed(EOI, cc());   return ''; }<\/code><\/pre>\n<p>  \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e <em>\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e<\/em> \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>f<\/code> \u0432 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>safe<\/code>. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>safe<\/code> \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u0432 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0444\u043b\u0430\u0433 <code>missed<\/code>.<\/p>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>f<\/code> \u0432\u0441\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0438\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0444\u043b\u0430\u0433\u043e\u043c <code>nr<\/code> (<em>not report<\/em>), \u043f\u0430\u0440\u0441\u0435\u0440 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u044d\u0442\u043e\u0442 \u0444\u043b\u0430\u0433 \u043f\u0440\u0438 \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f\u0445 \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, <em>\u043d\u0435<\/em> \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0435\u0434\u0448\u0435\u043c (\u0438\u043d\u0430\u0447\u0435 \u0434\u0430\u0436\u0435 \u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f\u0445 \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044f\u0442 \u0435\u0451 \u0432 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430). \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0444\u043b\u0430\u0433\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043b\u043e\u0436\u044c.<\/p>\n<p>  \u0417\u0430\u0442\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e (\u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u0438\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f) \u0438 \u0435\u0441\u043b\u0438 \u0438\u043c\u0435\u043b\u043e \u043c\u0435\u0441\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0441 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435\u043c, \u0447\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u043b\u0441\u044f \u043a\u043e\u043d\u0435\u0446 \u0432\u0432\u043e\u0434\u0430 (\u043c\u0430\u0440\u043a\u0435\u0440 <code>EOI<\/code>, <em>End of Input<\/em>), \u0430 \u0431\u044b\u043b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b; \u0435\u0441\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u043d\u0435 \u0431\u044b\u043b\u043e, \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443.<\/p>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong>:<\/p>\n<pre><code class=\"javascript\">var input = 'foo'; \/\/ PEG: start = &amp;'f' 'foo' seqnc(and(match('f')), match('foo'))(); \/\/ == [ '', 'foo' ]<\/code><\/pre>\n<p>  <\/p>\n<h3>9. <code>not<\/code><\/h3>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong>: \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d\u043e <em>\u043d\u0435<\/em> \u0438\u043c\u0435\u043b\u043e \u043c\u0435\u0441\u0442\u0430, \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438 <em>\u043d\u0435<\/em> \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430. \u0415\u0441\u043b\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e, \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430.<\/p>\n<p>  <strong>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435<\/strong>: <code>!&lt;\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435&gt;<\/code><\/p>\n<p>  <strong>\u041a\u043e\u0434<\/strong>:<\/p>\n<pre><code class=\"javascript\">function not(f) {   var p_pos = pos, missed = 0;   nr = 1; safe(f, function() {     missed = 1;   }); nr = 0;   pos = p_pos;   if (missed) return '';   failed(EOI, cc()); }<\/code><\/pre>\n<p>  \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e <em>\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e<\/em> \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>f<\/code> \u0432 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>safe<\/code>. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>safe<\/code> \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u0432 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0444\u043b\u0430\u0433 <code>missed<\/code>.<\/p>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>f<\/code> \u0432\u0441\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0438\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0444\u043b\u0430\u0433\u043e\u043c <code>nr<\/code> (<em>not report<\/em>), \u043f\u0430\u0440\u0441\u0435\u0440 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u044d\u0442\u043e\u0442 \u0444\u043b\u0430\u0433 \u043f\u0440\u0438 \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f\u0445 \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, <em>\u043d\u0435<\/em> \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0435\u0434\u0448\u0435\u043c (\u0438\u043d\u0430\u0447\u0435 \u0434\u0430\u0436\u0435 \u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f\u0445 \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044f\u0442 \u0435\u0451 \u0432 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430). \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0444\u043b\u0430\u0433\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043b\u043e\u0436\u044c.<\/p>\n<p>  \u0417\u0430\u0442\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e (\u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u0438\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f) \u0438 \u0435\u0441\u043b\u0438 \u0438\u043c\u0435\u043b\u043e \u043c\u0435\u0441\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443; \u0435\u0441\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u043d\u0435 \u0431\u044b\u043b\u043e, \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0441 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435\u043c, \u0447\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u043b\u0441\u044f \u043a\u043e\u043d\u0435\u0446 \u0432\u0432\u043e\u0434\u0430 (\u043c\u0430\u0440\u043a\u0435\u0440 <code>EOI<\/code>, <em>End of Input<\/em>), \u0430 \u0431\u044b\u043b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b.<\/p>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong>:<\/p>\n<pre><code class=\"javascript\">var input = 'foo'; \/\/ PEG: start = !'g' 'foo' seqnc(not(match('f')), match('foo'))(); \/\/ == [ '', 'foo' ]<\/code><\/pre>\n<p>  <\/p>\n<h3>10. <code>seqnc<\/code><\/h3>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong>: \u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0438\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u0451\u0440\u043d\u0443\u0442\u044b\u043c\u0438 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432.<\/p>\n<p>  <strong>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435<\/strong>: <code>&lt;\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u04351&gt; &lt;\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u04352&gt; ...<\/code><\/p>\n<p>  <strong>\u041a\u043e\u0434<\/strong>:<\/p>\n<pre><code class=\"javascript\">function seqnc(\/*f...*\/) {    var ppos = pos;   var fs = arguments,       s = [],       on_miss = function(e) {                   pos = ppos; throw e; };   for (var fi = 0; fl = fs.length;         fi &lt; fl; fi++) {       s.push(safe(fs[fi], on_miss));   }   return s; }<\/code><\/pre>\n<p>  \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 (\u0438\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e <code>arguments<\/code>) \u2014 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>fs<\/code>. \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 <em>\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e<\/em> \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>ppos<\/code>. <code>s<\/code> \u2014 \u043c\u0430\u0441\u0441\u0438\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432.<\/p>\n<p>  \u0418\u0442\u0435\u0440\u0438\u0440\u0443\u044f\u0441\u044c \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>safe<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u043f\u0435\u0440\u0432\u043e\u0435 \u0436\u0435 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0447\u0435\u043d\u043d\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>on_miss<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043c\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043d\u0430\u0437\u0430\u0434, \u0430 \u043f\u043e\u0442\u043e\u043c \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 (\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044e).<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u0439\u043c\u0430\u043d\u043e \u043d\u0435 \u0431\u044b\u043b\u043e, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432.<\/p>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong>:<\/p>\n<pre><code class=\"javascript\">var input = 'foo'; \/\/ PEG: start = . 'oo' seqnc(ch(), match('oo'))(); \/\/ == [ 'f', 'oo' ]<\/code><\/pre>\n<p>  <\/p>\n<h3>11. <code>choice<\/code><\/h3>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong>: \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u043b\u0438 \u0432\u0445\u043e\u0434\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0415\u0441\u043b\u0438 \u0434\u0430 \u2014 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u2014 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e \u043d\u0435\u0443\u0434\u0430\u0447\u0435 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430.<\/p>\n<p>  <strong>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435<\/strong>: <code>&lt;\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u04351&gt; \/ &lt;\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u04352&gt; \/ ...<\/code><\/p>\n<p>  <strong>\u041a\u043e\u0434<\/strong>:<\/p>\n<pre><code class=\"javascript\">function choice(\/*f...*\/) {    var fs = arguments,       missed = 0,       my_e = null,       on_miss = function(e) { my_e = e; missed = 1; };   for (var fi = 0, fl = fs.length;        fi &lt; fl; fi++) {     var res = safe(fs[fi], on_miss);     if (!missed) return res;     missed = 0;   }   throw my_e; }<\/code><\/pre>\n<p>  \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 (\u0438\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e <code>arguments<\/code>) \u2014 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>fs<\/code>. \u041f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>on_miss<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0444\u043b\u0430\u0433 <code>missed<\/code> \u0432 \u0435\u0434\u0438\u043d\u0438\u0446\u0443.<\/p>\n<p>  \u0418\u0442\u0435\u0440\u0438\u0440\u0443\u044f\u0441\u044c \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>safe<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u043f\u0435\u0440\u0432\u043e\u0435 \u0436\u0435 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0447\u0435\u043d\u043d\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>on_miss<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0444\u043b\u0430\u0433 <code>missed<\/code> \u0432 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e \u0432\u044b\u0431\u0440\u043e\u0448\u0435\u043d\u043e (<code>missed<\/code> \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e), \u0437\u043d\u0430\u0447\u0438\u0442 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0421\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0444\u043b\u0430\u0433 <code>missed<\/code> \u0432 \u043d\u043e\u043b\u044c \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0446\u0438\u043a\u043b\u0430.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0438 \u043e\u0434\u0438\u043d \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0441\u044f \u0443\u0434\u0430\u0447\u043d\u043e, \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 (\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u043f\u0430\u0440\u0441\u0435\u0440\u0430, \u043d\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u043c\u0438 \u0437\u0434\u0435\u0441\u044c (\u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>failed<\/code>), \u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u044b \u0432\u0441\u0435 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0432\u0448\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b).<\/p>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong>:<\/p>\n<pre><code class=\"javascript\">var input = 'foo'; \/\/ PEG: start = . ('aa' \/ 'oo' \/ 'ee') . seqnc(choice(ch(), match('aa'), match('oo'), match('ee')))(); \/\/ == [ 'f', 'oo' ]<\/code><\/pre>\n<p>  <\/p>\n<h3>12. <code>action<\/code><\/h3>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong>: \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u043d\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f JavaScript-\u043a\u043e\u0434\u0430. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u0430 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u0439 \u0438\u043b\u0438 \u043a\u043e\u0434 \u0432\u0435\u0440\u043d\u0443\u043b <code>null<\/code>, \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430.<\/p>\n<p>  <strong>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435<\/strong>: <code>&lt;\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435&gt; { &lt;javascript-\u043a\u043e\u0434&gt; }<\/code><\/p>\n<p>  <strong>\u041a\u043e\u0434<\/strong>:<\/p>\n<pre><code class=\"javascript\">function action(f, code) {    function inctx(function() {     ppos = pos; var res;     f(); res = code(cctx);     if (res === null) { pos = ppos;       failed(SOMETHING, NOTHING); }     return res;   }); }<\/code><\/pre>\n<p>  \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>f<\/code> \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 <code>code<\/code>. \u0412\u0441\u0451 \u0442\u0435\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 a.k.a. \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 (\u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0439 \u043a \u0442\u043e\u0439, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d \u0431\u044b\u043b \u0432\u044b\u0437\u0432\u0430\u043d) \u2014 \u044d\u0442\u043e\u043c\u0443 \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>inctx<\/code> (\u043e\u0442 <em>in context<\/em>).<\/p>\n<p>  \u0422\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f: \u0438\u0437 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u044e, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u044b\u043b \u043d\u0430\u0447\u0430\u0442 \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>action<\/code> (<code>offset<\/code>), \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 (<code>line<\/code>) \u0438 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 (<code>column<\/code>) \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0438\u043b\u0438 \u0441\u043e\u0432\u043f\u0430\u0432\u0448\u0438\u0439 \u043e\u0442\u0440\u0435\u0437\u043e\u043a \u0441\u0442\u0440\u043e\u043a\u0438 (<code>text<\/code>).<\/p>\n<p>  \u0417\u0430\u0442\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>f<\/code> (\u0435\u0441\u043b\u0438 \u043e\u043d \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0451 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 <code>MatchFailed<\/code>, \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f). \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0451\u043d\u043d\u043e\u0435 \u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <em>\u043d\u0435<\/em> \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f. \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u0434, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044f \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 <code>cctx<\/code> (\u0432 \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u0435\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432), \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d \u0432\u0435\u0440\u043d\u0443\u043b <code>null<\/code>, \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044e) \u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>failed<\/code> \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 <code>MatchFailed<\/code> \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c, \u0447\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u043b\u043e\u0441\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u0447\u0442\u043e-\u0442\u043e (\u043c\u0430\u0440\u043a\u0435\u0440 <code>SOMETHING<\/code>), \u0430 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u043e\u0441\u044c \u043d\u0438\u0447\u0435\u0433\u043e (\u043c\u0430\u0440\u043a\u0435\u0440 <code>NOTHING<\/code>).<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043a\u043e\u0434 \u0432\u0435\u0440\u043d\u0443\u043b \u043d\u0435\u043a\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0442\u043e\u0442 \u043c\u0438\u0440\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430.<\/p>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong>:<\/p>\n<pre><code class=\"javascript\">var input = 'foo'; \/\/ PEG: start = 'fo' (. { return offset(); }) seqnc(match('fo'), action(ch(), function() { return offset(); })(); \/\/ == [ 'fo', 2 ]<\/code><\/pre>\n<p>  <\/p>\n<h3>13. <code>pre<\/code><\/h3>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong>: \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u0435\u0441\u043b\u0438 \u043a\u043e\u0434 \u0432\u0435\u0440\u043d\u0443\u043b \u0438\u0441\u0442\u0438\u043d\u0443 (\u0438\u043b\u0438 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e, \u0447\u0442\u043e JavaScript \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0437\u0430 \u0438\u0441\u0442\u0438\u043d\u0443). \u0418\u043d\u0430\u0447\u0435 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430.<\/p>\n<p>  <strong>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435<\/strong>: <code>&amp; { &lt;javascript-\u043a\u043e\u0434&gt; }<\/code><\/p>\n<p>  <strong>\u041a\u043e\u0434<\/strong>:<\/p>\n<pre><code class=\"javascript\">function pre(code) {    ppos = pos;    return code(cctx) ? '' : failed(cc(), EOI); }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 <em>\u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e<\/em> \u043f\u0440\u0435\u0434\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u0439.<\/p>\n<p>  \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 <code>code<\/code>. \u0412 \u0432\u0438\u0434\u0443 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d \u0443\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u2014 \u043a\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043e\u0431\u0438\u043d\u044f\u043a\u043e\u0432, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 <code>cctx<\/code> (\u0432 \u044d\u0442\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u0435\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432).<\/p>\n<p>  \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0435\u0441\u043b\u0438 \u043a\u043e\u0434 \u0432\u0435\u0440\u043d\u0443\u043b \u0438\u0441\u0442\u0438\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435; \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e \u043d\u0435\u0443\u0434\u0430\u0447\u0435 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0441 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435\u043c, \u0447\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u043b\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b, \u0430 \u0431\u044b\u043b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u043a\u043e\u043d\u0435\u0446 \u0432\u0432\u043e\u0434\u0430 (\u043c\u0430\u0440\u043a\u0435\u0440 <code>EOI<\/code>, <em>End of Input<\/em>), \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043b\u043e\u0436\u043d\u044b\u043c.<\/p>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong>:<\/p>\n<pre><code class=\"javascript\">var input = 'foo'; \/\/ PEG: start = &amp;{ return true; } 'foo' seqnc(pre(function() { return true; }), match('foo'))(); \/\/ == [ '', 'foo' ]<\/code><\/pre>\n<p>  <\/p>\n<h3>14. <code>xpre<\/code><\/h3>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong>: \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u0435\u0441\u043b\u0438 \u043a\u043e\u0434 \u0432\u0435\u0440\u043d\u0443\u043b \u043b\u043e\u0436\u044c (\u0438\u043b\u0438 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e, \u0447\u0442\u043e JavaScript \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0437\u0430 \u043b\u043e\u0436\u044c). \u0418\u043d\u0430\u0447\u0435 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430.<\/p>\n<p>  <strong>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435<\/strong>: <code>! { &lt;javascript-\u043a\u043e\u0434&gt; }<\/code><\/p>\n<p>  <strong>\u041a\u043e\u0434<\/strong>:<\/p>\n<pre><code class=\"javascript\">function xpre(code) {    ppos = pos;    return code(cctx) ? failed(cc(), EOI) : ''; }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 <em>\u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e<\/em> \u043f\u0440\u0435\u0434\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u0439.<\/p>\n<p>  \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 <code>code<\/code>. \u0412 \u0432\u0438\u0434\u0443 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d \u0443\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u2014 \u043a\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043e\u0431\u0438\u043d\u044f\u043a\u043e\u0432, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 <code>cctx<\/code> (\u0432 \u044d\u0442\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u0435\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432).<\/p>\n<p>  \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0435\u0441\u043b\u0438 \u043a\u043e\u0434 \u0432\u0435\u0440\u043d\u0443\u043b \u043b\u043e\u0436\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435; \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e \u043d\u0435\u0443\u0434\u0430\u0447\u0435 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0441 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435\u043c, \u0447\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u043b\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b, \u0430 \u0431\u044b\u043b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u043a\u043e\u043d\u0435\u0446 \u0432\u0432\u043e\u0434\u0430 (\u043c\u0430\u0440\u043a\u0435\u0440 <code>EOI<\/code>, <em>End of Input<\/em>), \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0438\u0441\u0442\u0438\u043d\u043d\u044b\u043c.<\/p>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong>:<\/p>\n<pre><code class=\"javascript\">var input = 'foo'; \/\/ PEG: start = !{ return false; } 'foo' seqnc(xpre(function() { return false; }), match('foo'))(); \/\/ == [ '', 'foo' ]<\/code><\/pre>\n<p>  <\/p>\n<h3>15. <code>label<\/code><\/h3>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong>: \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043f\u043e\u0434 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c.<\/p>\n<p>  <strong>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435<\/strong>: <code>&lt;\u0438\u043c\u044f&gt;:&lt;\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435&gt;<\/code><\/p>\n<p>  <strong>\u041a\u043e\u0434<\/strong>:<\/p>\n<pre><code class=\"javascript\">function label(lbl, f) {    return cctx[lbl] = f(); }<\/code><\/pre>\n<p>  \u0412 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 <code>cctx<\/code> \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u0435\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432.<\/p>\n<p>  \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>f<\/code> \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 <code>cctx<\/code> \u043f\u043e\u0434 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c <code>lbl<\/code>.<\/p>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong>:<\/p>\n<pre><code class=\"javascript\">var input = 'foo'; \/\/ PEG: start = a:. 'oo' { return a + 'bb'; } action(seqnc(label('a', ch()), match('oo')),         function { return a + 'bb' })();      \/\/ == 'fbb' <\/code><\/pre>\n<p>  <\/p>\n<h3>16. \u041f\u0440\u0430\u0432\u0438\u043b\u043e<\/h3>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong>: \u0418\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439-\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432.<\/p>\n<p>  <strong>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435<\/strong>: <code>&lt;\u0438\u043c\u044f_\u043f\u0440\u0430\u0432\u0438\u043b\u0430&gt; = &lt;\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&gt;<\/code><\/p>\n<p>  <strong>\u041a\u043e\u0434<\/strong>:<\/p>\n<pre><code class=\"javascript\">rules.&lt;\u0438\u043c\u044f_\u043f\u0440\u0430\u0432\u0438\u043b\u0430&gt; = function() {   return (&lt;\u043a\u043e\u0434_\u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e_\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430&gt;)(); }<\/code><\/pre>\n<p>  \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0432 AST-\u0434\u0435\u0440\u0435\u0432\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 (\u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0434\u043d\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0442\u043e \u044d\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u2014 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>seqnc<\/code>). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0437\u043e\u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0435\u043d \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044e \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430.<\/p>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong>:<\/p>\n<pre><code class=\"javascript\">\/\/ PEG: space = &quot; &quot; rules.space = function() { return (match(' '))(); } \/\/ PEG: foo = . . . rules.foo = function() { return (seqnc(ch(), ch(), ch()))(); } \/\/ PEG: foo &quot;bar&quot; = . 'o'+ rules.foo = function() { return (as('bar',                                      seqnc(ch(), some(match('o')))                                    ))(); } \/\/ input = 'foo' rules.foo(); \/\/ == [ 'f', [ 'o', 'o' ] ]<\/code><\/pre>\n<p>  <\/p>\n<h3>17. <code>ref<\/code><\/h3>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong>: \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430.<\/p>\n<p>  <strong>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435<\/strong>: <code>&lt;\u0438\u043c\u044f_\u043f\u0440\u0430\u0432\u0438\u043b\u0430&gt;<\/code><\/p>\n<p>  <strong>\u041a\u043e\u0434<\/strong>:<\/p>\n<pre><code class=\"javascript\">function ref = inctx;<\/code><\/pre>\n<p>  \u042d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e \u0432\u044b\u0437\u043e\u0432\u0443 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432 \u0435\u0433\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043a\u043d\u0446\u0438\u0438 <code>inctx<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>cctx<\/code>.<\/p>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong>:<\/p>\n<pre><code class=\"javascript\">var input = 'foo'; \/\/ PEG: start = fo_rule 'o' \/\/      fo_rule = 'fo' rules.start = seqnc(ref(rules.fo_rule), match('o')); rules.fo_rule = match('fo');          rules.start(); \/\/ == [ 'fo', 'o' ];<\/code><\/pre>\n<p>  <\/p>\n<h3>18. <code>as<\/code><\/h3>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong>: \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u043e\u0434 \u0434\u0440\u0443\u0433\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c. \u0412\u043b\u0438\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0432\u044b\u0432\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430.<\/p>\n<p>  <strong>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435<\/strong>: <code>&lt;\u0438\u043c\u044f-\u043f\u0440\u0430\u0432\u0438\u043b\u0430&gt; &quot;&lt;\u0430\u043b\u0438\u0430\u0441&gt;&quot; = &lt;\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&gt;<\/code><\/p>\n<p>  <strong>\u041a\u043e\u0434<\/strong>:<\/p>\n<pre><code class=\"javascript\">function as(name, f) {    alias = name; var res = f();   alias = ''; return res; }<\/code><\/pre>\n<p>  \u041d\u0430 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>f<\/code> (\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 AST-\u0434\u0435\u0440\u0435\u0432\u0430 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u0440\u0430\u0432\u0438\u043b\u0430) \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u0435\u0442 \u0438\u043c\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 (\u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>alias<\/code>) \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0435, \u0437\u0430\u0442\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0415\u0441\u043b\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430, \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u044d\u0442\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u0430.<\/p>\n<p>  <strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong>:<\/p>\n<pre><code class=\"javascript\">var input = 'foo'; \/\/ PEG: start &quot;blah&quot; = 'bar' as('blah', match('bar'))(); \/\/ MatchFailed: Expected blah, but 'f' found<\/code><\/pre>\n<h2>\u042d\u043f\u0438\u043b\u043e\u0433<\/h2>\n<p>  \u0412\u043e\u0442 \u0438 \u043f\u043e\u0434\u043e\u0448\u043b\u043e \u043a \u043a\u043e\u043d\u0446\u0443 \u043d\u0430\u0448\u0435 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0435 \u0432 \u043c\u0438\u0440 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430, \u0434\u043e\u0440\u043e\u0433\u043e\u0439 \u0434\u0440\u0443\u0433. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043b\u0430 \u0442\u0435\u0431\u044f \u043f\u0440\u0438\u0437\u0430\u0434\u0443\u043c\u0430\u0442\u044c\u0441\u044f \u043e\u0431 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0443\u0442\u044f\u0445 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043e\u043a\u0440\u043e\u043c\u0435 \u043e\u0431\u0449\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0435\u043c \u0433\u0440\u043e\u0437\u0438\u0442 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/gist.github.com\/shamansir\/7346436\">\u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445<\/a>, \u0447\u0443\u0442\u044c \u043c\u0435\u043d\u0435\u0435 \u043d\u0435\u0434\u043e\u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c JavaScript \u0438 \u0447\u0443\u0442\u044c \u043c\u0435\u043d\u0435\u0435 \u043f\u0435\u0440\u0435\u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c \u0425\u0430\u0441\u043a\u0435\u043b\u044c. \u0421\u043f\u043e\u043a\u043e\u0439\u043d\u043e\u0439 \u043d\u043e\u0447\u0438 \u0438 \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0434\u043d\u044f \u0442\u0435\u0431\u0435, \u0434\u043e\u0440\u043e\u0433\u043e\u0439 \u0434\u0440\u0443\u0433.<\/p>\n<p>  \u041d\u0430 \u0441\u0438\u043c \u043f\u0440\u043e\u0449\u0430\u044e\u0441\u044c, \u0442\u0432\u043e\u0439 \u0448\u0430\u043c\u0430\u043d.\u0441\u044d\u0440.    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/201194\/\"> http:\/\/habrahabr.ru\/post\/201194\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u0415\u0441\u043b\u0438 \u0442\u044b \u043c\u0435\u043d\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u043e\u043c\u043d\u0438\u0448\u044c, \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u2014 \u0442\u043e, \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430, \u043f\u043e\u043c\u043d\u0438\u0448\u044c \u0438 \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0438 \u043f\u043e\u0441\u0442\u044b \u0432 \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0440\u0430\u0437\u043e\u0447\u0430\u0440\u0443\u044e\u0449\u0435 \u0434\u043b\u0438\u043d\u043d\u044b \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e-\u0442\u0430\u043a\u0438 \u0447\u0430\u0441\u0442\u043e \u0438\u043c \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u044f. \u0417\u0430\u0432\u0435\u0440\u044f\u044e \u0442\u0435\u0431\u044f, \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u043e\u0442\u043d\u044e\u0434\u044c \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u2014 \u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u043e\u043c\u0430\u043d, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u0435\u0435, \u0430 \u0442\u043e \u0435\u0449\u0451 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043a\u0430\u043b\u0451\u043d\u043d\u044b\u0439.<\/p>\n<p>  \u041f\u043e \u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430\u043c, \u043c\u0430\u043b\u043e \u0447\u0442\u043e \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u0442\u0435\u0445 \u043f\u043e\u0441\u0442\u0430\u0445 \u0431\u044b\u043b\u043e \u0434\u043e\u0432\u0435\u0434\u0435\u043d\u043e \u0434\u043e \u0443\u043c\u0430 \u0438 \u043e\u043d\u0438, \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b\u0438 \u043b\u0438\u0448\u044c \u043e\u0431\u0449\u0438\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u043a \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f\u043c. \u0418 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u0443\u043d\u043a\u0442\u0443 \u044f \u0442\u0430\u043a \u0436\u0435 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0432\u0435\u0440\u0435\u043d \u0442\u0435\u0431\u0435 \u0438 \u0441\u0435\u0439\u0447\u0430\u0441, \u0434\u043e\u0440\u043e\u0433\u043e\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c.<\/p>\n<p>  \u041a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0432 \u043f\u043e\u0441\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0433\u0438\u043f\u0435\u0440\u0441\u0441\u044b\u043b\u043e\u043a \u0438 \u043a\u043e\u0434\u0430. \u0410 \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u2014 \u043a\u0438\u0440\u0438\u043b\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0431\u0443\u043a\u0432.<\/p>\n<p>  \u0412\u0441\u0451 \u043a\u0430\u043a \u0432 \u0441\u0442\u0430\u0440\u044b\u0435 \u0434\u043e\u0431\u0440\u044b\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0430. \u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c, \u0434\u0440\u0443\u0433.<\/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-201194","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/201194","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=201194"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/201194\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=201194"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=201194"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=201194"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}