{"id":278192,"date":"2016-04-13T13:50:11","date_gmt":"2016-04-13T09:50:11","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=278192"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=278192","title":{"rendered":"\u041f\u0430\u0440\u0441\u0435\u0440 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 C# \u2014 \u043e\u043f\u044b\u0442 \u0434\u0438\u043b\u0435\u0442\u0430\u043d\u0442\u0430"},"content":{"rendered":"<br \/>\n<blockquote><p>\u041a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u2014 \u043a\u0430\u043a \u0441\u043b\u043e\u0436\u043d\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u044f\u0442\u044c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430. \u041f\u043e \u0441\u0443\u0442\u0438, \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043c\u0430\u0448\u0438\u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u0442\u044b \u043e\u0442 \u043d\u0435\u0451 \u0445\u043e\u0447\u0435\u0448\u044c \u043d\u0430 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u043c \u0435\u0439 \u044f\u0437\u044b\u043a\u0435.<\/p><\/blockquote>\n<p>  <\/p>\n<h1>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f<\/h1>\n<p>  \u041f\u043e \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435, \u0434\u0430 \u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0445\u043e\u0431\u0431\u0438, \u044f \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u043c\u0438. \u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u0431\u044b\u043b\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u041f\u041e, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438\u043c\u0435\u043b \u0431\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u0440\u0430\u0441\u0447\u0451\u0442\u0435, \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0410 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0441\u0432\u043e\u044e \u043f\u0440\u0438\u0440\u043e\u0434\u043d\u0443\u044e \u043b\u0435\u043d\u044c \u0438 \u043d\u0435\u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043a\u043e\u0434\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u0440\u0438\u0448\u043b\u0430 \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 \u043c\u044b\u0441\u043b\u044c \u2014 \u0430 \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0440\u0435\u0434\u043e\u0432\u0443\u044e \u0441\u0442\u0443\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u0434\u0435\u044e, \u0438 \u043d\u0435 \u0438\u0437\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434 \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0432\u0437\u044f\u0442\u044c\u0441\u044f \u0437\u0430 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 (\u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u0432 \u0432\u0438\u0434\u0443 \u0432\u0441\u0435\u043b\u0435\u043d\u0441\u043a\u043e\u0439 \u043b\u0435\u043d\u0438), \u0431\u044b\u043b\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u043b\u0433\u043e\u0435 \u0438\u0437\u043d\u0430\u0441\u0438\u043b\u043e\u0432\u0430\u043d\u0438\u0435 \u042f\u043d\u0434\u0435\u043a\u0441\u0430 \u0438 \u0413\u0443\u0433\u043b\u0430 \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439. \u0418 \u0438\u0445 \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043d\u0435 \u043c\u0430\u043b\u043e. \u041d\u043e \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0442\u043e\u0433\u043e, \u0447\u0435\u0433\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c. \u0410 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0431\u044b\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435:<\/p>\n<ul>\n<li>\u041f\u0430\u0440\u0441\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043f\u043e\u0434 .NET \u043d\u0435 \u0441\u0442\u0430\u0440\u0448\u0435 4.0;<\/li>\n<li>\u041e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b (+,-,*,\/,^, \u0438 \u0442.\u043f.) \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0438\u0445 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432 \u0438 \u0441\u043a\u043e\u0431\u043e\u043a \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0438\u0434\u043e\u0432;<\/li>\n<li>\u041e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0432\u0440\u043e\u0434\u0435 sin, cos), \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0441\u0432\u043e\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0449\u0438\u0445 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445);<\/li>\n<li>\u0414\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043f\u0430\u0440\u0441\u0435\u0440\u0443 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442, \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0445 \u0441 \u0441\u043f\u0438\u0441\u043e\u043a, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043f\u0440\u0438 \u0440\u0430\u0437\u0431\u043e\u0440\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f;<\/li>\n<li>\u0414\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432: \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043b\u0438\u0431\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043a\u043e\u0434 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u0430;<\/li>\n<li>\u0414\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u0432 (\u043c\u0438\u043d\u0438\u043c\u0443\u043c \u2014 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0441\u0443\u043c\u043c\u0430 \u0440\u044f\u0434\u0430 \u0438 \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435)<\/li>\n<li>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430;<\/li>\n<li>\u0421\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0434\u0435\u0440\u0435\u0432\u043e Linq.Expression \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0435\u0439 \u0435\u0433\u043e \u0432 \u0434\u0435\u043b\u0435\u0433\u0430\u0442, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0439 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0441\u0430\u043c\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b .NET.<\/li>\n<\/ul>\n<p>  <a name=\"habracut\"><\/a>  <\/p>\n<h1>\u0426\u0435\u043b\u044c \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f<\/h1>\n<p>  \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u044f \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0430 \u0431\u044b\u043b\u0430 \u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0434\u0435\u043b\u0435\u0433\u0430\u0442 \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u043c\u043e\u0438 \u0441\u043a\u0443\u0434\u043d\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u0438\u043a\u0430\u043c\u0438, \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0441\u0438\u043b \u0438 \u043b\u0435\u043d\u044c \u043d\u0435 \u0434\u0430\u043b\u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430 \u0438 \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0432 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0435 \u043f\u043e \u0433\u0440\u0430\u0431\u043b\u044f\u043c.<\/p>\n<h2>\u041c\u043e\u0434\u0435\u043b\u044c \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f<\/h2>\n<p>  \u041e\u0431\u044a\u0435\u043a\u0442\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0434\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u0430: \u043a\u043b\u0430\u0441\u0441 \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0438 \u043a\u043b\u0430\u0441\u0441 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0412\u043d\u0443\u0442\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0435\u0449\u0451 \u0442\u0440\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u0430: \u043a\u043b\u0430\u0441\u0441 \u0434\u0435\u0440\u0435\u0432\u0430 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0443\u0437\u043b\u0430 \u0434\u0435\u0440\u0435\u0432\u0430 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u043a\u043b\u0430\u0441\u0441 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u2014 \u0442\u0435\u0440\u043c\u0430. \u041a\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043a\u043b\u0430\u0441\u0441\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u0432 (\u043e\u043d\u0438 \u0432\u043b\u043e\u0436\u0435\u043d\u044b \u0432 \u043a\u043b\u0430\u0441\u0441 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f).<\/p>\n<p>  \u0418\u0434\u0435\u044f, \u043d\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u044e\u0449\u0430\u044f \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435, \u0438\u043b\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043d\u043e \u044f\u0432\u043b\u044f\u0432\u0448\u0430\u044f\u0441\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u043e\u0439 \u043f\u043e\u0434\u0441\u0442\u0443\u043f\u0438\u0442\u044c\u0441\u044f \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u0437\u0430\u0434\u0430\u0447\u0438, \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0430\u0441\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u044b \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435. \u0421\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0418 \u043d\u0430 \u0435\u0451 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u043e \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u0438\u0434\u0435\u0438 \u2014 \u00ab\u0430 \u043a\u0430\u043a \u0431\u044b \u044f \u0445\u043e\u0442\u0435\u043b, \u0447\u0442\u043e \u0431\u044b \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u043e \u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u0438 \u0447\u0442\u043e \u0431\u044b \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043b\u0435\u0433\u043a\u043e \u0438 \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c?\u00bb. \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u0430\u0440\u0441\u0435\u0440\u0430, \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u044f\u0435\u043c\u044b\u0439 \u0433\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043b\u0438\u0431\u043e \u0432 \u0431\u0438\u0437\u043d\u0435\u0441 \u043b\u043e\u0433\u0438\u043a\u0435. \u041e\u043d \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f: \u0432 \u043d\u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u0418 \u043f\u0430\u0440\u0441\u0435\u0440 \u0436\u0434\u0451\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 Parce(string).<\/p>\n<p>  \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 Parce() \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a\u0430 \u043c\u0430\u0442\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0430 \u0435\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0434\u0435\u0440\u0435\u0432\u043e \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0423 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u043d\u0451\u043c \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f. \u0414\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u044d\u0442\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0430 \u0434\u0435\u0440\u0435\u0432\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441 \u0446\u0435\u043b\u044c\u044e \u0435\u0433\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439. \u041e\u0431\u044a\u0435\u043a\u0442 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (\u043f\u0443\u0442\u0451\u043c \u043e\u0431\u0445\u043e\u0434\u0430 \u0434\u0435\u0440\u0435\u0432\u0430 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f), \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u0430\u0431\u043e\u0440 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0432\u044b\u0434\u0430\u044e\u0449\u0438\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u041e\u0431\u044a\u0435\u043a\u0442 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u0440\u0435\u0432\u0430 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 System.Linq.Expression. \u0418 \u043c\u0435\u0442\u043e\u0434, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0435\u043b\u0435\u0433\u0430\u0442 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 Linq.Expression.<\/p>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0447\u0435\u0433\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e, \u043d\u0438 \u043c\u0435\u0442\u043e\u0434\u0438\u043a, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0432 \u0442\u043e\u0439, \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u043c\u0435\u0440\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u043d\u0438 \u0433\u0434\u0435 \u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d.<\/p>\n<h1>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438<\/h1>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043b\u0430\u0441\u0441 \u041f\u0430\u0440\u0441\u0435\u0440\u0430<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/532\/9c9\/763\/5329c9763232428783a22ad1c9d3f0fe\"\/>  <\/div>\n<\/div>\n<p>  \u0416\u0438\u0437\u043d\u044c \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 (\u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f) \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 Parse.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">public MathExpression Parse(string StrExpression)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\/ &lt;summary&gt;\u0420\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/summary&gt; \/\/\/ &lt;param name=&quot;StrExpression&quot;&gt;\u0421\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/param&gt; \/\/\/ &lt;returns&gt;\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435&lt;\/returns&gt; [NotNull] public MathExpression Parse([NotNull] string StrExpression) {     Contract.Requires(!string.IsNullOrWhiteSpace(StrExpression));     Contract.Ensures(Contract.Result&lt;MathExpression&gt;() != null);     StrPreprocessing(ref StrExpression);     OnStringPreprocessing(ref StrExpression);      var expression = new MathExpression(StrExpression, this);      ProcessVariables(expression);     ProcessFunctions(expression);      return expression; } <\/code><\/pre>\n<p>  \u041e\u043f\u0443\u0441\u043a\u0430\u044f \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b, \u0441\u043c\u044b\u0441\u043b \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u0432\u044b\u0437\u043e\u0432\u0443 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0441\u0442\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.  <\/div>\n<\/div>\n<p>  \u041f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430:<\/p>\n<p>  \u041f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 StrPreprocessing, \u0443\u0434\u0430\u043b\u044f\u044e\u0449\u0438\u0439 \u043b\u0438\u0448\u043d\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">protected void StrPreprocessing(ref string Str)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\/ &lt;summary&gt;\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/summary&gt; \/\/\/ &lt;param name=&quot;Str&quot;&gt;\u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430&lt;\/param&gt; \/\/ \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0441\u0435\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u0435\u0449\u0451\u043d\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 protected virtual void StrPreprocessing([NotNull] ref string Str) {     Contract.Requires(!string.IsNullOrEmpty(Str));     Contract.Ensures(!string.IsNullOrEmpty(Contract.ValueAtReturn(out Str)));     Str = new string(Str.Where(f_ExcludeCharsSet.NotContains).ToArray()); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0438 \u043c\u0435\u0442\u043e\u0434 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0442\u0440\u043e\u043a\u0438, \u0447\u0442\u043e \u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u043c\u043e\u0433 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u043a \u0430\u043d\u0430\u043b\u0438\u0437\u0443:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">public event EventHandler&lt;EventArgs&lt;string&gt;&gt; StringPreprocessing<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\/ &lt;summary&gt;\u0421\u043e\u0431\u044b\u0442\u0438\u0435 \u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438&lt;\/summary&gt; public event EventHandler&lt;EventArgs&lt;string&gt;&gt; StringPreprocessing;  \/\/\/ &lt;summary&gt;\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438&lt;\/summary&gt; \/\/\/ &lt;param name=&quot;args&quot;&gt;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443&lt;\/param&gt; protected virtual void OnStringPreprocessing([NotNull] EventArgs&lt;string&gt; args) {     Contract.Requires(args != null);     Contract.Requires(args.Argument != null);     Contract.Requires(args.Argument != string.Empty);     Contract.Ensures(args.Argument != null);     Contract.Ensures(args.Argument != string.Empty);     StringPreprocessing?.Invoke(this, args); }  \/\/\/ &lt;summary&gt;\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438&lt;\/summary&gt; \/\/\/ &lt;param name=&quot;StrExpression&quot;&gt;\u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430&lt;\/param&gt; private void OnStringPreprocessing([NotNull] ref string StrExpression) {     Contract.Requires(!string.IsNullOrEmpty(StrExpression));     Contract.Ensures(Contract.ValueAtReturn(out StrExpression) != null);     Contract.Ensures(Contract.ValueAtReturn(out StrExpression) != string.Empty);     var args = new EventArgs&lt;string&gt;(StrExpression);     OnStringPreprocessing(args);     StrExpression = args.Argument; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u043a\u0430 \u043e\u0447\u0438\u0449\u0435\u043d\u0430 \u043e\u0442 \u043c\u0443\u0441\u043e\u0440\u0430 \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0430 \u043a \u0440\u0430\u0437\u0431\u043e\u0440\u0443, \u043e\u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0422\u0430\u043a\u0436\u0435 \u0432 \u043d\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u0430\u043c \u043f\u0430\u0440\u0441\u0435\u0440, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.<\/p>\n<p>  \u041a \u043a\u043b\u0430\u0441\u0441\u0443 \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u043c \u0435\u0449\u0451 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043c\u0435\u0440\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0439 \u0435\u0433\u043e \u0447\u043b\u0435\u043d\u043e\u0432, \u0430 \u0441\u0435\u0439\u0447\u0430\u0441\u2026 \u041a\u043b\u0430\u0441\u0441 \u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/869\/4c1\/760\/8694c1760b074b7ebca19ce7e7cb2653\"\/>  <\/div>\n<\/div>\n<p>  \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u0430 Parse:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">internal MathExpression(string StrExpression, ExpressionParser Parser)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\/ &lt;summary&gt;\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/summary&gt; \/\/\/ &lt;param name=&quot;StrExpression&quot;&gt;\u0421\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/param&gt; \/\/\/ &lt;param name=&quot;Parser&quot;&gt;\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u0430\u0440\u0441\u0435\u0440&lt;\/param&gt; internal MathExpression([NotNull] string StrExpression, [NotNull] ExpressionParser Parser)     : this() {     Contract.Requires(!string.IsNullOrEmpty(StrExpression));     Contract.Requires(Parser != null);     Contract.Ensures(Tree != null);     var terms = new BlockTerm(StrExpression);    \/\/ \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b     var root = terms.GetSubTree(Parser, this);   \/\/ \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u0440\u0435\u043d\u044c \u0434\u0435\u0440\u0435\u0432\u0430 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430     f_ExpressionTree = new ExpressionTree(root); \/\/ \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u0437 \u043a\u043e\u0440\u043d\u044f } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041e\u043f\u044f\u0442\u044c \u0436\u0435, \u043e\u043f\u0443\u0441\u043a\u0430\u044f \u0431\u043b\u043e\u043a \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0442\u0435\u0440\u043c\u043e\u0432 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0417\u0430\u0442\u0435\u043c \u0438\u0437 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0435\u0451 \u0431\u043b\u043e\u043a\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0440\u043d\u044f \u0434\u0435\u0440\u0435\u0432\u0430 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0418 \u043d\u0430 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0434\u0435\u0440\u0435\u0432\u0430.<\/p>\n<p>  \u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 (\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432) \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0431\u043b\u043e\u043a\u043e\u0432. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u043a\u0443\u0440\u0440\u0435\u043d\u0442\u043d\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u044b \u0434\u0440\u0443\u0433 \u0432 \u0434\u0440\u0443\u0433\u0430.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0442\u0435\u0440\u043c\u043e\u0432 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/be7\/a7d\/5d6\/be7a7d5d67b745249f9e6cb86aea804f\"\/>  <\/div>\n<\/div>\n<p>  \u0421\u0442\u0440\u043e\u043a\u0430 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 4 \u0432\u0438\u0434\u0430 \u0442\u0435\u0440\u043c\u043e\u0432:<\/p>\n<ul>\n<li>BlockTerm \u2014 \u0442\u0435\u0440\u043c, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0435\u0440\u043c\u043e\u0432;<\/li>\n<li>StringTerm \u2014 \u0442\u0435\u0440\u043c, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/li>\n<li>CharTerm \u2014 \u0442\u0435\u0440\u043c, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043e\u0434\u0438\u043d \u0441\u0438\u043c\u0432\u043e\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435\u043b\u044c\u0437\u044f \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438;<\/li>\n<li>NumberTerm \u2014 \u0442\u0435\u0440\u043c, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e.<\/li>\n<\/ul>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u0431\u043b\u043e\u0447\u043d\u044b\u0439 \u0442\u0435\u0440\u043c, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043b\u0435\u0436\u0430\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">public BlockTerm(string Str)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\/ &lt;summary&gt;\u041d\u043e\u0432\u044b\u0439 \u0431\u043b\u043e\u043a \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/summary&gt; \/\/\/ &lt;param name=&quot;Str&quot;&gt;\u0421\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0430&lt;\/param&gt; public BlockTerm(string Str) : this(&quot;&quot;, Str, &quot;&quot;) { }  \/\/\/ &lt;summary&gt;\u041d\u043e\u0432\u044b\u0439 \u0431\u043b\u043e\u043a \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/summary&gt; \/\/\/ &lt;param name=&quot;OpenBracket&quot;&gt;\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u0441\u043a\u043e\u0431\u043a\u0430&lt;\/param&gt; \/\/\/ &lt;param name=&quot;Str&quot;&gt;\u0421\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0430&lt;\/param&gt; \/\/\/ &lt;param name=&quot;CloseBracket&quot;&gt;\u0417\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u0441\u043a\u043e\u0431\u043a\u0430&lt;\/param&gt; public BlockTerm([NotNull] string OpenBracket, [NotNull] string Str, [NotNull] string CloseBracket)     : base(string.Format(&quot;{0}{2}{1}&quot;, OpenBracket ?? &quot;&quot;, CloseBracket ?? &quot;&quot;, Str)) {     Contract.Requires(!string.IsNullOrEmpty(Str));     f_OpenBracket = OpenBracket;     f_CloseBracket = CloseBracket;     f_Terms = GetTerms(Str); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041d\u0443 \u0438 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0442\u0435\u0440\u043c\u0430:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">abstract class Term {&#8230;}<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\/ &lt;summary&gt;\u042d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/summary&gt; abstract class Term {     \/\/\/ &lt;summary&gt;\u0421\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435&lt;\/summary&gt;     protected string f_Value;      \/\/\/ &lt;summary&gt;\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/summary&gt;     \/\/\/ &lt;param name=&quot;Value&quot;&gt;\u0421\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435&lt;\/param&gt;     protected Term(string Value) { f_Value = Value; }      \/\/\/ &lt;summary&gt;\u041c\u0435\u0442\u043e\u0434 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0430 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/summary&gt;     \/\/\/ &lt;param name=&quot;Parser&quot;&gt;\u041f\u0430\u0440\u0441\u0435\u0440 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/param&gt;     \/\/\/ &lt;param name=&quot;Expression&quot;&gt;\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435&lt;\/param&gt;     \/\/\/ &lt;returns&gt;\u0423\u0437\u0435\u043b \u0434\u0435\u0440\u0435\u0432\u0430 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e\u043c \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430&lt;\/returns&gt;     [NotNull]     public abstract ExpressionTreeNode GetSubTree([NotNull] ExpressionParser Parser, [NotNull] MathExpression Expression);      \/\/\/ &lt;summary&gt;\u0421\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/summary&gt;     \/\/\/ &lt;returns&gt;\u0421\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/returns&gt;     public override string ToString() =&gt; f_Value; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0420\u0430\u0437\u0431\u0438\u0432\u043a\u0430 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c GetTerms:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">private static Term[] GetTerms(string Str)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\/ &lt;summary&gt;\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u0438&lt;\/summary&gt; \/\/\/ &lt;param name=&quot;Str&quot;&gt;\u0421\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/param&gt; \/\/\/ &lt;returns&gt;\u041c\u0430\u0441\u0441\u0438\u0432 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/returns&gt; [CanBeNull] private static Term[] GetTerms([CanBeNull] string Str) {     if(Str == null) return null;     if(Str.Length == 0) return new Term[0];     var pos = 0;     var len = Str.Length;     var result = new List&lt;Term&gt;();     while(pos &lt; len)     {         var c = Str[pos];         if(char.IsLetter(c) || c == '\u222b')         {             Term value = new StringTerm(GetNameString(Str, ref pos));             if(pos &lt; len)                 switch(Str[pos])                 {                     case '(':                         {                             var blokStr = Str.GetBracketText(ref pos);                             var block = new BlockTerm(&quot;(&quot;, blokStr, &quot;)&quot;);                             value = new FunctionTerm((StringTerm)value, block);                         }                         break;                     case '[':                         {                             var blokStr = Str.GetBracketText(ref pos, &quot;[&quot;, &quot;]&quot;);                             var block = new BlockTerm(&quot;[&quot;, blokStr, &quot;]&quot;);                             value = new FunctionTerm((StringTerm)value, block);                         }                         break;                     case '{':                         {                             var blokStr = Str.GetBracketText(ref pos, &quot;{&quot;, &quot;}&quot;);                             var block = new BlockTerm(&quot;{&quot;, blokStr, &quot;}&quot;);                             value = new FunctionTerm((StringTerm)value, block);                         }                         break;                 }             if(pos &lt; len && Str[pos] == '{')                 value = new FunctionalTerm                 (                     (FunctionTerm)value,                     new BlockTerm(&quot;{&quot;, Str.GetBracketText(ref pos, &quot;{&quot;, &quot;}&quot;), &quot;}&quot;)                 );             result.Add(value);         }         else if(char.IsDigit(c))             result.Add(new NumberTerm(GetNumberString(Str, ref pos)));         else             switch(c)             {                 case '(':                     {                         var blokStr = Str.GetBracketText(ref pos);                         var block = new BlockTerm(&quot;(&quot;, blokStr, &quot;)&quot;);                         result.Add(block);                     }                     break;                 case '[':                     {                         var blokStr = Str.GetBracketText(ref pos, &quot;[&quot;, &quot;]&quot;);                         var block = new BlockTerm(&quot;[&quot;, blokStr, &quot;]&quot;);                         result.Add(block);                     }                     break;                 case '{':                     {                         var blokStr = Str.GetBracketText(ref pos, &quot;{&quot;, &quot;}&quot;);                         var block = new BlockTerm(&quot;{&quot;, blokStr, &quot;}&quot;);                         result.Add(block);                     }                     break;                 default:                     result.Add(new CharTerm(Str[pos++]));                     break;             }     }     return result.ToArray(); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041c\u0435\u0442\u043e\u0434 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u043d\u0430 \u043f\u0443\u0441\u0442\u043e\u0442\u0443 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u043d\u0443\u043b\u0435\u0432\u0443\u044e \u0434\u043b\u0438\u043d\u0443. \u041f\u043e\u0441\u043b\u0435 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0438 \u0435\u0451 \u0434\u043b\u0438\u043d\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432 \u0446\u0438\u043a\u043b\u0435 \u0434\u043e \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u043c\u0432\u043e\u043b \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438:<\/p>\n<p>   \u2014 \u0415\u0441\u043b\u0438 \u043e\u043d \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0443\u043a\u0432\u043e\u0439, \u0438\u043b\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b\u0430, \u0442\u043e \u0438\u0434\u0451\u0442 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u0438\u043c\u0435\u043d\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043c GetNameString.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">private static string GetNameString(string Str, ref int pos)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\/ &lt;summary&gt;\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043c\u044f \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u0438&lt;\/summary&gt; \/\/\/ &lt;param name=&quot;Str&quot;&gt;\u0418\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430&lt;\/param&gt; \/\/\/ &lt;param name=&quot;pos&quot;&gt;\u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435&lt;\/param&gt; \/\/\/ &lt;returns&gt;\u0421\u0442\u0440\u043e\u043a\u0430 \u0438\u043c\u0435\u043d\u0438&lt;\/returns&gt; private static string GetNameString([NotNull] string Str, ref int pos) {     Contract.Requires(!string.IsNullOrEmpty(Str));     Contract.Ensures(Contract.ValueAtReturn(out pos) &gt;= 0);     Contract.Ensures(Contract.ValueAtReturn(out pos) &lt; Str.Length);      var result = &quot;&quot;;     var L = Str.Length;     var i = pos;     while(i &lt; L && (char.IsLetter(Str[i]) || Str[i] == '\u222b'))         result += Str[i++];     if(i == L || !char.IsDigit(Str[i]))     {         pos = i;         return result;     }     while(i &lt; L && char.IsDigit(Str[i]))         result += Str[i++];     pos += result.Length;     return result; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0432 \u043d\u0451\u043c \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0439\u0441\u044f \u0441\u043a\u043e\u0431\u043a\u0438. \u0415\u0441\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0430 \u043e\u0434\u043d\u0430 \u0438\u0437 \u0441\u043a\u043e\u0431\u043e\u043a, \u0442\u043e \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0431\u043b\u043e\u043a, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0439\u0441\u044f \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0435\u0439 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0439\u0441\u044f \u0441\u043a\u043e\u0431\u043a\u043e\u0439. \u0421\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0431\u043b\u043e\u043a\u043e\u0432\u044b\u0439 \u0442\u0451\u0440\u043c \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0451\u0440\u043c\u0430 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u043d\u0435\u0435 \u0438\u043c\u0435\u043d\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>  \u041f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0430, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u0430\u044f \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0439\u0441\u044f \u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0439\u0441\u044f \u0441\u043a\u043e\u0431\u043a\u0430\u043c\u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043c-\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">public static string GetBracketText(this string Str, ref int Offset, string Open, string Close)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\/ &lt;summary&gt; \/\/\/ \u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \/\/\/ &lt;\/summary&gt; \/\/\/ &lt;param name=&quot;Str&quot;&gt;\u0412\u0445\u043e\u0434\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430&lt;\/param&gt; \/\/\/ &lt;param name=&quot;Offset&quot;&gt; \/\/\/ \u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 - \u0432 \u043a\u043e\u043d\u0446\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u0435\u0441\u0442\u0443 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \/\/\/ &lt;\/param&gt; \/\/\/ &lt;param name=&quot;Open&quot;&gt;\u0428\u0430\u0431\u043b\u043e\u043d \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438&lt;\/param&gt; \/\/\/ &lt;param name=&quot;Close&quot;&gt;\u0428\u0430\u0431\u043b\u043e\u043d \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438&lt;\/param&gt; \/\/\/ &lt;returns&gt;\u041f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0430, \u0437\u0430\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u0430\u044f \u043c\u0435\u0436\u0434\u0443 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c\u0438 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f&lt;\/returns&gt; \/\/\/ &lt;exception cref=&quot;FormatException&quot;&gt; \/\/\/ \u0415\u0441\u043b\u0438 \u0448\u0430\u0431\u043b\u043e\u043d \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430 \u043d\u0435\u0439\u0434\u0435\u043d, \u043b\u0438\u0431\u043e \u0435\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442  \/\/\/ \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0432\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \/\/\/ &lt;\/exception&gt; public static string GetBracketText(this string Str, ref int Offset, string Open = &quot;(&quot;, string Close = &quot;)&quot;) {     var Start = Str.IndexOf(Open, Offset, StringComparison.Ordinal);     if(Start == -1) return null;     var Stop = Str.IndexOf(Close, Start + 1, StringComparison.Ordinal);     if(Stop == -1)         throw new FormatException();     var start = Start;     do     {         start = Str.IndexOf(Open, start + 1, StringComparison.Ordinal);         if(start != -1 && start &lt; Stop)             Stop = Str.IndexOf(Close, Stop + 1, StringComparison.Ordinal);     } while(start != -1 && start &lt; Stop);     if(Stop == -1 || Stop &lt; Start)         throw new FormatException();     Offset = Stop + Close.Length;     Start += Open.Length;     return Str.Substring(Start, Stop - Start); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043f\u0435\u0440\u0432\u044b\u0445 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u043a\u043e\u043d\u0446\u0430. \u0415\u0441\u043b\u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0442\u0443. \u0415\u0441\u043b\u0438 \u043d\u0430 \u043d\u0430\u0439\u0434\u0435\u043d \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b, \u0442\u043e \u044d\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430.<\/p>\n<p>  \u0418\u0434\u0435\u044f \u043c\u0435\u0442\u043e\u0434\u0430 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u043e\u0438\u0441\u043a\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438. \u041f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b. \u0415\u0441\u043b\u0438 \u043e\u043d \u043d\u0430\u0439\u0434\u0435\u043d, \u0438 \u043e\u043d \u0441\u0442\u043e\u0438\u0442 \u0434\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e, \u0442\u043e \u043d\u0430\u0434\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430. \u0426\u0438\u043a\u043b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0435 \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439.<\/p>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u0435\u0442\u043e\u0434\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0430, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u043c\u0435\u0436\u0434\u0443 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u043c \u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0451\u0440\u043c\u0430 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u0444\u0438\u0433\u0443\u0440\u043d\u0430\u044f \u0441\u043a\u043e\u0431\u043a\u0430, \u0442\u043e \u044d\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043b\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430. \u0412\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0438\u0433\u0443\u0440\u043d\u044b\u0445 \u0441\u043a\u043e\u0431\u043e\u043a \u0432 \u0431\u043b\u043e\u043a \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0442\u0451\u0440\u043c-\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u0435\u043c\u0443 \u0442\u0451\u0440\u043c-\u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0441 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0438\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0438 \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0430 \u0442\u0435\u043b\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0431\u043b\u043e\u043a \u0432 \u0444\u0438\u0433\u0443\u0440\u043d\u044b\u0445 \u0441\u043a\u043e\u0431\u043a\u0430\u0445.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0441\u043a\u043e\u0431\u043e\u043a \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u043d\u0435 \u0431\u044b\u043b\u043e, \u0442\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u043c (\u0431\u0443\u0434\u0443\u0449\u0435\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439\u2026 \u0438\u043b\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439).<\/p>\n<p>   \u2014 \u0415\u0441\u043b\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0441\u0442\u0440\u043e\u043a\u0438 \u0431\u044b\u043b \u0446\u0438\u0444\u0440\u043e\u0439, \u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e. \u0412\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u0446\u0438\u0444\u0440\u044b.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">private static string GetNumberString(string Str, ref int pos)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\/ &lt;summary&gt;\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0446\u0438\u0444\u0440\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443&lt;\/summary&gt; \/\/\/ &lt;param name=&quot;Str&quot;&gt;\u0418\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430&lt;\/param&gt; \/\/\/ &lt;param name=&quot;pos&quot;&gt;\u0418\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u0435&lt;\/param&gt; \/\/\/ &lt;returns&gt;\u0421\u0442\u0440\u043e\u043a\u0430 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f&lt;\/returns&gt; private static string GetNumberString([NotNull] string Str, ref int pos) {     Contract.Requires(!string.IsNullOrEmpty(Str));     Contract.Ensures(Contract.ValueAtReturn(out pos) &gt;= 0);     Contract.Ensures(Contract.ValueAtReturn(out pos) &lt; Str.Length);      var p = pos;     var l = Str.Length;     while(p &lt; l && !char.IsDigit(Str, p)) p++;     if(p &gt;= l) return null;     var start = p;     while(p &lt; l && char.IsDigit(Str, p)) p++;     pos = p;     return Str.Substring(start, p - start); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u2014 \u0441\u0442\u0440\u043e\u043a\u0430 \u0441 \u0446\u0438\u0444\u0440\u0430\u043c\u0438 \u2014 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0451\u0440\u043c\u0430.<\/p>\n<p>   \u2014 \u0415\u0441\u043b\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0441\u0442\u0440\u043e\u043a\u0438 \u2014 \u044d\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u0441\u043a\u043e\u0431\u043a\u0430, \u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0431\u043b\u043e\u043a. \u0412\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0443 \u043c\u0435\u0442\u043e\u0434\u043e\u043c-\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c GetBracketText.<br \/>   \u2014 \u0415\u0441\u043b\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u2014 \u043d\u0435 \u0441\u043a\u043e\u0431\u043a\u0430, \u0442\u043e \u044d\u0442\u043e \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u0442\u0451\u0440\u043c.<\/p>\n<p>  \u0412\u0441\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0435\u0440\u043c\u044b \u0441\u043f\u0435\u0440\u0432\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0441 \u0441\u043f\u0438\u0441\u043e\u043a, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430.<\/p>\n<p>  \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0435\u0440\u043c\u043e\u0432 \u043c\u0435\u043d\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435. \u041e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043f\u043e\u043b\u044f\u0445 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0441 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0438\u043f\u043e\u0432).<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u0440\u043e\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0434\u0440\u0443\u0433 \u0432 \u0434\u0440\u0443\u0433\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u0442\u0435\u0440\u043c\u043e\u0432 \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0430. \u0418\u0437 \u044d\u0442\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u043a\u0443\u0440\u0440\u0435\u043d\u0442\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043e\u0439 \u0434\u0435\u0440\u0435\u0432\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0443\u0437\u043b\u0430 \u0434\u0435\u0440\u0435\u0432\u0430 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/2b2\/9f9\/02a\/2b29f902adfd40438a768a210eaec0e7\"\/>  <\/div>\n<\/div>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u2014 \u043a\u043b\u0430\u0441\u0441, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0443\u0437\u0435\u043b-\u043a\u043e\u0440\u0435\u043d\u044c \u043b\u0435\u0432\u043e\u0433\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0430 \u0438 \u0443\u0437\u0435\u043b-\u043a\u043e\u0440\u0435\u043d\u044c \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u0435\u0434\u043a\u0430. \u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0443\u0437\u043b\u0430 \u0434\u0435\u0440\u0435\u0432\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0443\u0437\u043b\u0430\u043c \u043f\u0440\u0435\u0434\u043a\u0430\u043c\/\u043f\u043e\u0442\u043e\u043c\u043a\u0430\u043c, \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u0431\u0445\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0442\u043e\u0440\u044b, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0443\u0437\u043b\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0442\u0435\u043a\u0443\u0449\u0438\u043c, \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0443\u0437\u043b\u0443 (\u043a\u0430\u043a \u043a\u043e\u0440\u043d\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0430) \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u0442.\u043f. \u0422\u0430\u043a\u0436\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0443\u0437\u043b\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u044f\u0434 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432: \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438 \u2014 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0443\u0437\u0435\u043b \u043b\u0435\u0432\u044b\u043c\/\u043f\u0440\u0430\u0432\u044b\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e\u043c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0443\u0437\u0435\u043b \u043a\u043e\u0440\u043d\u0435\u043c, \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043a\u043e\u0440\u0435\u043d\u044c \u0434\u0435\u0440\u0435\u0432\u0430, \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u0443\u0437\u043b\u0443 \u0438\u0437 \u043a\u043e\u0440\u043d\u044f \u0434\u0435\u0440\u0435\u0432\u0430 \u0438 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043a\u043e\u0432.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0423\u0437\u0435\u043b \u0434\u0435\u0440\u0435\u0432\u0430<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/c99\/2b2\/906\/c992b29063c9433ca42fd55662d1af0b\"\/>  <\/div>\n<\/div>\n<p>  \u041a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0434\u0435\u0440\u0435\u0432\u0430 \u0434\u043b\u044f \u0438\u0445 \u0437\u0430\u043c\u0435\u043d\u044b, \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u043e\u0431\u0445\u043e\u0434\u0430 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0437\u0430\u0439\u043c\u0451\u0442 \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\/\u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>  \u0412\u0441\u0435 \u0443\u0437\u043b\u044b \u0434\u0435\u0440\u0435\u0432\u0430 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043b\u0438\u0431\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c\u044b\u043c\u0438, \u043b\u0438\u0431\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u043c\u0438 \u043f\u0440\u0438 \u0440\u0430\u0437\u0431\u043e\u0440\u0435.<\/p>\n<p>  \u0423\u0437\u043b\u044b \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0432 \u0441\u0435\u0431\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0439 \u0443\u0437\u0435\u043b, \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u0438 \u0443\u0437\u0435\u043b \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0432 \u0434\u0435\u0440\u0435\u0432\u0435 \u0432\u0440\u043e\u0434\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0433\u0434\u0435 \u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b.<\/p>\n<p>  \u0412\u044b\u0447\u0438\u0441\u043b\u0438\u043c\u044b\u0435 \u0443\u0437\u043b\u044b \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0434\u0435\u0440\u0435\u0432\u0430. \u041e\u043d\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438.<\/p>\n<p>  \u0412 \u0438\u0445 \u0447\u0438\u0441\u043b\u043e \u0432\u0445\u043e\u0434\u0438\u0442:<\/p>\n<ul>\n<li>ComputedBracketNode \u2014 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u043b\u043e\u043a \u0441\u043a\u043e\u0431\u043e\u043a<\/li>\n<li> ValueNode \u2014 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0443\u0437\u0435\u043b-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0415\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0438:<br \/>     \u2014 ConstValueNode \u2014 \u0443\u0437\u0435\u043b \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<br \/>    \u2014 VariableValueNode \u2014 \u0443\u0437\u0435\u043b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 \u0432\u0440\u043e\u0434\u0435 pi, e, &#8230;)\n<\/li>\n<li>FunctionNode \u2014 \u0443\u0437\u0435\u043b, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442-\u0444\u0443\u043d\u043a\u0446\u0438\u044e<\/li>\n<li>FunctionalNode \u2014 \u0443\u0437\u0435\u043b, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442-\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b<\/li>\n<li> \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440Node \u2014 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0443\u0437\u043b\u0430-\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0415\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0438<br \/>     \u2014 \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0435 \u043c\u0430\u0442.\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b +,-,*,\/,^;<br \/>    \u2014 \u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b ==, !, &gt;,&lt;, &#038;&#038;, ||;<br \/>    \u2014 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0443\u0441\u043b\u043e\u0432\u0438\u044f&quot;&lt;\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442_\u0440\u0430\u0431\u043e\u0442\u044b_\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430&gt;?&quot; \u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u043d\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432\u044b\u0431\u043e\u0440\u0430 &quot;&lt;\u0432\u0430\u0440\u0438\u0430\u043d\u0442_1&gt;:&lt;\u0432\u0430\u0440\u0438\u0430\u043d\u0442_2&gt;&quot;<br \/>    \u2014 \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u043d\u0438\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0438\u043c\u0435\u043d\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.\n<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0434\u0435\u0440\u0435\u0432\u0430<\/h2>\n<p>  \u041a\u043b\u0430\u0441\u0441 \u0442\u0435\u0440\u043c\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 GetSubTree, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u043e\u0435 \u0438\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0434\u0435\u0440\u0435\u0432\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0432\u044b\u0437\u043e\u0432\u0430 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0443 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0431\u043b\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0430.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">public override ExpressionTreeNode GetSubTree(ExpressionParser Parser, MathExpression Expression)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\/ &lt;summary&gt;\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u0440\u0435\u043d\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439&lt;\/summary&gt; \/\/\/ &lt;param name=&quot;Parser&quot;&gt;\u041f\u0430\u0440\u0441\u0435\u0440 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/param&gt; \/\/\/ &lt;param name=&quot;Expression&quot;&gt;\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435&lt;\/param&gt; \/\/\/ &lt;returns&gt;\u041a\u043e\u0440\u0435\u043d\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0430&lt;\/returns&gt; public override ExpressionTreeNode GetSubTree(ExpressionParser Parser, MathExpression Expression) {     Contract.Requires(Parser != null);     Contract.Requires(Expression != null);     Contract.Ensures(Contract.Result&lt;ExpressionTreeNode&gt;() != null);     var separator = Parser.ExpressionSeparator; \/\/ \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c \u0441\u0438\u043c\u0432\u043e\u043b-\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439     \/\/ \u0420\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u044b, \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u0441\u0438\u043c\u043e\u0432\u043b\u043e\u043c-\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u043c     \/\/ \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0438\u0437 \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u043a\u043e\u0440\u0435\u043d\u044c \u0434\u0435\u0440\u0435\u0432\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0438\u0445 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432     var roots = Terms         .Split(t =&gt; t is CharTerm && ((CharTerm)t).Value == separator)         .Select(g =&gt; Parser.GetRoot(g, Expression)).ToArray();       if(roots.Length == 1) return roots[0]; \/\/ \u0415\u0441\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043a\u043e\u0440\u0435\u043d\u044c, \u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0435\u0433\u043e     \/\/ \u0418\u043d\u0430\u0447\u0435 \u043a\u043e\u0440\u043d\u0435\u0439 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043c\u043d\u043e\u0433\u043e     ExpressionTreeNode argument = null; \/\/ \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442     for(var i = 0; i &lt; roots.Length; i++) \/\/ \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c \u043f\u043e \u0432\u0441\u0435\u043c \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u043c \u043a\u043e\u0440\u043d\u044f\u043c     {         var root = roots[i];         ExpressionTreeNode arg;          \/\/ \u0415\u0441\u043b\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043a\u043e\u0440\u0435\u043d\u044c \u0434\u0435\u0440\u0435\u0432\u0430         if(root is FunctionArgumentNode) \/\/ - \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438             arg = root;                  \/\/ -- \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439         else if(root is FunctionArgumentNameNode)  \/\/ - \u0443\u0437\u0435\u043b \u0438\u043c\u0435\u043d\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430             \/\/ -- \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043d\u043e\u0432\u044b\u0439 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438             arg = new FunctionArgumentNode(root as FunctionArgumentNameNode);         else if(root is VariantOperatorNode && root.Left is VariableValueNode)             arg = new FunctionArgumentNode(((VariableValueNode)root.Left).Name, root.Right);         else \/\/ - \u0432\u043e \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445             arg = new FunctionArgumentNode(&quot;&quot;, root); \/\/ -- \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0435\u0437 \u0438\u043c\u0435\u043d\u0438         if(argument == null) argument = arg; \/\/ \u0415\u0441\u043b\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u043d\u0435 \u0431\u044b\u043b \u0443\u043a\u0430\u0437\u0430\u043d, \u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b, \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442         else                                 \/\/ \u0438\u043d\u0430\u0447\u0435             argument = argument.Right = arg; \/\/  \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u0432 \u043f\u0440\u0430\u0432\u043e\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430     }     \/\/ \u0415\u0441\u043b\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u043d\u0435 \u0431\u044b\u043b \u0432\u044b\u0434\u0435\u043b\u0435\u043d, \u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a - \u043e\u0448\u0438\u0431\u043a\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430     if(argument == null) throw new FormatException(&quot;\u041d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438&quot;);     return argument.Root; \/\/ \u0412\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u043e\u0440\u0435\u043d\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041c\u0435\u0442\u043e\u0434 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0438\u0437 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0435\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0438\u043c\u0432\u043e\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u0442 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0431\u043b\u043e\u043a\u0435. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c &#8216;;&#8217; \u2014 \u0442\u043e\u0447\u043a\u0430 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439.<\/p>\n<p>  \u0417\u0430\u0442\u0435\u043c \u0432 Linq-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u0435\u0441\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0440\u043c\u043e\u0432 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u044b \u043f\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044e \u2014 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u043c\u0443 \u0442\u0435\u0440\u043c\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u043c\u0443 \u0441\u0438\u043c\u0432\u043e\u043b-\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0417\u0430 \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434-\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 Split.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">public static T[][] Split&lt;T&gt;(this T[] array, Func&lt;T, bool&gt; Splitter)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\/ &lt;summary&gt;\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0430 \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c&lt;\/summary&gt; \/\/\/ &lt;typeparam name=&quot;T&quot;&gt;\u0422\u0438\u043f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430&lt;\/typeparam&gt; \/\/\/ &lt;param name=&quot;array&quot;&gt;\u0420\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432&lt;\/param&gt; \/\/\/ &lt;param name=&quot;Splitter&quot;&gt;\u041c\u0435\u0442\u043e\u0434, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439 \u0438\u0441\u0442\u0438\u043d\u0443, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0434\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432&lt;\/param&gt; \/\/\/ &lt;returns&gt; \/\/\/ \u041c\u0430\u0441\u0441\u0438\u0432 \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438. \/\/\/ \u0412\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435 \u0432\u0445\u043e\u0434\u044f\u0442. \/\/\/ &lt;\/returns&gt; [NotNull] public static T[][] Split&lt;T&gt;([NotNull] this T[] array, [NotNull] Func&lt;T, bool&gt; Splitter) {     Contract.Requires(array != null);     Contract.Requires(Splitter != null);     Contract.Ensures(Contract.Result&lt;T[][]&gt;() != null);      var result = new List&lt;T[]&gt;(array.Length);     var aggregator = new List&lt;T&gt;(array.Length);      for(var i = 0; i &lt; array.Length; i++)     {         var value = array[i];         if(Splitter(value) && aggregator.Count != 0)         {             result.Add(aggregator.ToArray());             aggregator.Clear();         }         else             aggregator.Add(value);     }     if(aggregator.Count != 0)         result.Add(aggregator.ToArray());      return result.ToArray(); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u0435\u0440\u043c\u043e\u0432 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 \u043f\u0430\u0440\u0441\u0435\u0440\u0430 GetRoot, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0437\u0432\u0430\u043d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u0440\u0435\u043d\u044c \u0434\u0435\u0440\u0435\u0432\u0430 \u044d\u0442\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u0442\u0435\u0440\u043c\u043e\u0432. \u0417\u0430\u0442\u0435\u043c \u0432\u0441\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u0440\u043d\u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432. <\/p>\n<p>  \u041c\u0435\u0442\u043e\u0434 GetRoot:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">internal ExpressionTreeNode GetRoot(Term[] Group, MathExpression MathExpression)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\/ &lt;summary&gt;\u041c\u0435\u0442\u043e\u0434 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0440\u043d\u044f \u0434\u0435\u0440\u0435\u0432\u0430 \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/summary&gt; \/\/\/ &lt;param name=&quot;Group&quot;&gt;\u0433\u0440\u0443\u043f\u043f\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/param&gt; \/\/\/ &lt;param name=&quot;MathExpression&quot;&gt;\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435&lt;\/param&gt; \/\/\/ &lt;returns&gt;\u041a\u043e\u0440\u0435\u043d\u044c \u0434\u0435\u0440\u0435\u0432\u0430 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/returns&gt; internal ExpressionTreeNode GetRoot([NotNull] Term[] Group, [NotNull] MathExpression MathExpression) {     Contract.Requires(Group != null);     Contract.Requires(MathExpression != null);     Contract.Ensures(Contract.Result&lt;ExpressionTreeNode&gt;() != null);      \/\/ \u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u0434\u0435\u0440\u0435\u0432\u0430     ExpressionTreeNode Last = null;     for(var i = 0; i &lt; Group.Length; i++) \/\/ \u0432 \u0446\u0438\u043a\u043b\u0435 \u043f\u043e \u0432\u0441\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u0433\u0440\u0443\u043f\u043f\u044b     {         var node = Group[i].GetSubTree(this, MathExpression); \/\/ \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0433\u0440\u0443\u043f\u043f\u044b         \/\/ \u0415\u0441\u043b\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0433\u0440\u0443\u043f\u043f\u044b...         if(Group[i] is NumberTerm) \/\/ ...\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0447\u0438\u0441\u043b\u043e, \u0442\u043e         {             \/\/...\u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0432\u043f\u0435\u0440\u0435\u0434\u0438 \u0435\u0449\u0451 \u0434\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0438 \u043f\u0440\u043e\u0448\u043b\u0430 \u0443\u0434\u0430\u0447\u043d\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0434\u0440\u043e\u0431\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0438 \u0438 \u043c\u0430\u043d\u0442\u0438\u0441\u0441\u0443               if(i + 2 &lt; Group.Length && NumberTerm.TryAddFractionPart(ref node, Group[i + 1], DecimalSeparator, Group[i + 2]))                 i += 2; \/\/...\u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u043d\u0430 \u0434\u0432\u0430.         }         else if(Group[i] is BlockTerm) \/\/...\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0431\u043b\u043e\u043a (\u0441\u043e \u0441\u043a\u043e\u0431\u043a\u0430\u043c\u0438)             node = new ComputedBracketNode( \/\/ \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0443\u0437\u0435\u043b \u0434\u0435\u0440\u0435\u0432\u0430 - \u044d\u0442\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c\u044b\u0439 \u0431\u043b\u043e\u043a                         new Bracket( \/\/\u0432\u0438\u0434 \u0441\u043a\u043e\u0431\u043e\u043a:                                     (((BlockTerm)Group[i]).OpenBracket), \/\/ \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0432\u0438\u0434 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0441\u043a\u043e\u0431\u043a\u0438                                     ((BlockTerm)Group[i]).CloseBracket),  \/\/ \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0432\u0438\u0434 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0441\u043a\u043e\u0431\u043a\u0438                         node); \/\/\u0412\u043d\u0443\u0442\u0440\u0438 \u0443\u0437\u0435\u043b \u0434\u0435\u0440\u0435\u0432\u0430          \/\/\u041f\u0440\u043e\u0432\u043e\u0434\u0438\u043c \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0443\u0437\u043b\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u0443\u0437\u043b\u043e\u043c \u0434\u0435\u0440\u0435\u0432\u0430         Combine(Last, Last = node); \/\/ \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b \u0434\u0435\u0440\u0435\u0432\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c          if(Last.IsRoot && Last is VariantOperatorNode && Last.Left is VariableValueNode)             Last = new FunctionArgumentNameNode(((VariableValueNode)Last.Left).Name);          OnNewNodeAdded(ref Last);     }      \/\/ \u0415\u0441\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0442\u043e \u044d\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430     if(Last == null) throw new FormatException();     return Last.Root; \/\/ \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u043e\u0440\u0435\u043d\u044c \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0435\u0440\u043c\u043e\u0432 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0418\u0437 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043c\u044b \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u043a\u043e\u0440\u0435\u043d\u044c \u0435\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 (\u0437\u0434\u0435\u0441\u044c \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f). \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c:<\/p>\n<p>   \u2014 \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0442\u0435\u0440\u043c \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0439 \u0438 \u043e\u043d \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0442\u0440\u0435\u0442\u0438\u0439 \u0441 \u043a\u043e\u043d\u0446\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0442\u043e \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u0443\u0437\u043b\u0443 \u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">public static bool TryAddFractionPart(ref ExpressionTreeNode node, Term SeparatorTerm, char DecimalSeparator, Term FrationPartTerm)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\/ &lt;summary&gt;\u041f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u0430&lt;\/summary&gt; \/\/\/ &lt;param name=&quot;node&quot;&gt;\u0423\u0437\u0435\u043b \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/param&gt; \/\/\/ &lt;param name=&quot;SeparatorTerm&quot;&gt;\u0411\u043b\u043e\u043a \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c&lt;\/param&gt; \/\/\/ &lt;param name=&quot;DecimalSeparator&quot;&gt;\u0411\u043b\u043e\u043a \u0441 \u0446\u0435\u043b\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0447\u0438\u0441\u043b\u0430&lt;\/param&gt; \/\/\/ &lt;param name=&quot;FrationPartTerm&quot;&gt;\u0411\u043b\u043e\u043a \u0441 \u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0447\u0438\u0441\u043b\u0430&lt;\/param&gt; \/\/\/ &lt;returns&gt;\u0418\u0441\u0442\u0438\u043d\u0430, \u0435\u0441\u043b\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e. \u041b\u043e\u0436\u044c, \u0435\u0441\u043b\u0438 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0431\u043b\u043e\u043a\u0430\u0445 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043d\u0443\u0436\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438&lt;\/returns&gt; public static bool TryAddFractionPart(ref ExpressionTreeNode node, Term SeparatorTerm, char DecimalSeparator, Term FrationPartTerm) {     var value = node as ConstValueNode;     if(value == null) throw new ArgumentException(&quot;\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0442\u0438\u043f \u0443\u0437\u043b\u0430 \u0434\u0435\u0440\u0435\u0432\u0430&quot;);     var separator = SeparatorTerm as CharTerm;     if(separator == null || separator.Value != DecimalSeparator) return false;     var fraction = FrationPartTerm as NumberTerm;     if(fraction == null) return false;      var v_value = fraction.Value;     if(v_value == 0) return true;     node = new ConstValueNode(value.Value + v_value \/ Math.Pow(10, Math.Truncate(Math.Log10(v_value)) + 1));     return true; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041c\u0435\u0442\u043e\u0434\u0443 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u043c\u0432\u043e\u043b-\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0446\u0435\u043b\u043e\u0439 \u0438 \u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u0432\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0437\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u0442\u0435\u0440\u043c\u0430. \u0415\u0441\u043b\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0442\u0435\u0440\u043c \u2014 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0438\u043c\u0432\u043e\u043b-\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c, \u0430 \u0442\u0440\u0435\u0442\u0438\u0439 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439, \u0442\u043e \u0443\u0437\u0435\u043b \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0443\u0437\u0435\u043b-\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<br \/>   \u2014 \u0412\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u2014 \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0442\u0435\u0440\u043c \u0431\u043b\u043e\u0447\u043d\u044b\u0439, \u0442\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0443\u0437\u0435\u043b-\u0431\u043b\u043e\u043a_\u0441\u043a\u043e\u0431\u043e\u043a.<\/p>\n<p>  \u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0443\u0437\u0435\u043b, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0446\u0438\u043a\u043b\u0435 \u0441 \u0442\u0435\u043a\u0443\u0449\u0438\u043c:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">public virtual void Combine(ExpressionTreeNode Last, ExpressionTreeNode Node)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\/ &lt;summary&gt;\u041a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0443\u0437\u043b\u043e\u0432 \u0434\u0435\u0440\u0435\u0432\u0430&lt;\/summary&gt; \/\/\/ &lt;param name=&quot;Last&quot;&gt;\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b \u0434\u0435\u0440\u0435\u0432\u0430 (\u0443\u0436\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 \u0434\u0435\u0440\u0435\u0432\u043e)&lt;\/param&gt; \/\/\/ &lt;param name=&quot;Node&quot;&gt;\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0434\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0434\u0435\u0440\u0435\u0432\u043e&lt;\/param&gt; \/\/ ReSharper disable once CyclomaticComplexity public virtual void Combine([CanBeNull] ExpressionTreeNode Last, [NotNull] ExpressionTreeNode Node) {     Contract.Requires(Node != null);     if(Last == null) return; \/\/ \u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b \u0434\u0435\u0440\u0435\u0432\u0430 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d, \u0432\u043e\u0437\u0432\u0440\u0430\u0442      if(Node is CharNode) \/\/ \u0415\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b - \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u0443\u0437\u0435\u043b, \u0442\u043e     {         Last.LastRightChild = Node; \/\/ \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u0430\u0432\u044b\u043c \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c         return;     }      var operator_node = Node as OperatorNode; \/\/ \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b \u0432 \u0432\u0438\u0434\u0435 \u0443\u0437\u043b\u0430-\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430     if(operator_node != null)                 \/\/ \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c...     {         \/\/\u041f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0443\u0437\u043b\u0430:         \/\/ \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b \u043a \u0442\u0438\u043f\u0443 \u0443\u0437\u043b\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430         \/\/ \u043b\u0438\u0431\u043e \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0443\u0437\u0435\u043b \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0443\u0437\u043b\u0430 \u043a \u0442\u0438\u043f\u0443 \u0443\u0437\u043b\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430         var parent_operator = Last as OperatorNode ?? Last.Parent as OperatorNode;          if(parent_operator != null) \/\/ \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b-\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 (\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c)... \u0442\u043e         {             \/\/ \u0415\u0441\u043b\u0438 \u043b\u0435\u0432\u043e\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u0443\u0441\u0442\u043e \u0438 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 - \u0442\u043e\u0436\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440             \/\/      op &lt;- \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f             \/\/      |             \/\/      op              \/\/     \/  \\             \/\/  null   ?             if(parent_operator.Left == null && parent_operator.Parent is OperatorNode)                 parent_operator = (OperatorNode)parent_operator.Parent;               if(parent_operator.Left == null)          \/\/ \u0415\u0441\u043b\u0438 \u043b\u0435\u0432\u043e\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u0443\u0441\u0442\u043e...                 operator_node.Left = parent_operator; \/\/  \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043b\u0435\u0432\u043e\u0433\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e             else if(parent_operator.Right == null)    \/\/ \u0418\u043d\u0430\u0447\u0435 \u0435\u0441\u043b\u0438 \u043f\u0440\u0430\u0432\u043e\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e \u043f\u0443\u0441\u0442\u043e                 parent_operator.Right = Node;         \/\/  \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u0440\u0430\u0432\u044b\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e             else                                      \/\/ \u0418\u043d\u0430\u0447\u0435 \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432             {                 var priority = operator_node.Priority;  \/\/ \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0443\u0437\u043b\u0430                 \/\/ \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043c\u0435\u043d\u044c\u0448\u0435, \u043b\u0438\u0431\u043e \u0440\u0430\u0432\u0435\u043d \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0443 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e                 if(priority &lt;= parent_operator.Priority)                 {                     \/\/ \u0442\u043e \u043d\u0430\u0434\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0432\u0432\u0435\u0440\u0445 \u043f\u043e\u0434 \u0434\u0435\u0440\u0435\u0432\u0443 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440                     parent_operator = (OperatorNode)parent_operator.Parents                                 \/\/ \u043f\u043e\u043a\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u043c\u044b\u0435 \u043d\u0430 \u043f\u0443\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0438\u043c\u0435\u044e\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430                                 .TakeWhile(n =&gt; n is OperatorNode && priority &lt;= ((OperatorNode)n).Priority)                                 \/\/ \u0432\u0437\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438                                 .LastOrDefault() ?? parent_operator; \/\/ \u0435\u0441\u043b\u0438 \u0432\u0435\u0440\u043d\u0443\u043b\u0430\u0441\u044c \u043f\u0443\u0441\u0442\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430, \u0442\u043e \u0432\u0437\u044f\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440                      \/\/ \u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430                      if(parent_operator.IsRoot) \/\/ \u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 - \u043a\u043e\u0440\u0435\u043d\u044c \u0434\u0435\u0440\u0435\u0432\u0430                         \/\/ \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0432 \u043a\u043e\u0440\u043d\u0435 \u0434\u0435\u0440\u0435\u0432\u0430 \u0431\u043e\u043b\u044c\u0448\u0435, \u043b\u0438\u0431\u043e \u0440\u0430\u0432\u0435\u043d \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0443 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430                         if(priority &lt;= parent_operator.Priority)                             \/\/ \u041f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043b\u0435\u0432\u043e\u043c\u0443 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0443 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439                             operator_node.Left = parent_operator;                     else \/\/ \u0418\u043d\u0430\u0447\u0435 \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0435 \u043a\u043e\u0440\u0435\u043d\u044c                     {                         var parent = parent_operator.Parent; \/\/ \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430                         parent.Right = Node;                 \/\/ \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0430                         operator_node.Left = parent_operator;\/\/ \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043b\u0435\u0432\u044b\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e                     }                 }                 else \/\/\u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e                 {                     \/\/ \u0442\u043e \u043d\u0430\u0434\u043e \u0441\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u0430\u0432\u043e\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440                     parent_operator = (OperatorNode)parent_operator.RightNodes                                 \/\/ \u043f\u043e\u043a\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u043c\u044b\u0435 \u043d\u0430 \u043f\u0443\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0438\u043c\u0435\u044e\u0442 \u043b\u0435\u0432\u044b\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u044c\u044f \u0438 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u043c\u0435\u043d\u044c\u0448\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e                                 .TakeWhile(n =&gt; n is OperatorNode && n.Left != null && ((OperatorNode)n).Priority &lt; priority)                                 \/\/ \u0432\u0437\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438                                 .LastOrDefault() ?? parent_operator;  \/\/ \u0435\u0441\u043b\u0438 \u0432\u0435\u0440\u043d\u0443\u043b\u0430\u0441\u044c \u043f\u0443\u0441\u0442\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430, \u0442\u043e \u0432\u0437\u044f\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440                      \/\/ \u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430                      var right = parent_operator.Right; \/\/ \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u043e\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430                     parent_operator.Right = Node;      \/\/ \u0432 \u043f\u0440\u0430\u0432\u043e\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439                     operator_node.Left = right;        \/\/ \u0432 \u043b\u0435\u0432\u043e\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u043e\u0435                  }             }         }         else \/\/ \u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c         {             var parent = Last.Parent;             var is_left = Last.IsLeftSubtree;             var is_right = Last.IsRightSubtree;             operator_node.Left = Last; \/\/ \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b \u043b\u0435\u0432\u044b\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e             if(is_left)                 parent.Left = operator_node;             else if(is_right)                 parent.Right = operator_node;         }         return; \/\/ \u0432\u043e\u0437\u0432\u0440\u0430\u0442     }     \/\/ \u0415\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f      if(Last is OperatorNode) \/\/ \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c     {         Last.Right = Node; \/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0432 \u043f\u0440\u0430\u0432\u043e\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e         return;            \/\/ \u0432\u043e\u0437\u0432\u0440\u0430\u0442     }     \/\/ \u0415\u0441\u043b\u0438 \u043d\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043d\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u043b\u044b \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c\u0438      \/\/\u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b \u0431\u044b\u043b \u0447\u0438\u0441\u043b\u043e\u043c, \u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b \u0431\u044b\u043b \u0441\u043a\u043e\u0431\u043a\u0430\u043c\u0438 \u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 - \u0441\u043a\u043e\u0431\u043a\u0438     if(Last is ConstValueNode || (Last is ComputedBracketNode && Node is ComputedBracketNode))     {         \/\/\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0443\u0437\u043b\u0430         var parent = Last.Parent;         if(parent != null) \/\/ \u0435\u0441\u043b\u0438 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0435\u0441\u0442\u044c             \/\/ \u0432 \u043f\u0440\u0430\u0432\u043e\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0443\u0437\u043b\u0430 \u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e             parent.Right = new MultiplicationOperatorNode(Last, Node);         else \/\/ \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b \u0431\u044b\u043b \u0443\u0437\u043b\u043e\u043c \u0434\u0435\u0440\u0435\u0432\u0430             \/\/ \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043d\u043e\u0432\u044b\u0439 \u0443\u0437\u0435\u043b-\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0443\u0437\u043b\u0430 \u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u043c \u043a\u043e\u0440\u043d\u0435\u043c \u0434\u0435\u0440\u0435\u0432\u0430             new MultiplicationOperatorNode(Last, Node);         return; \/\/ \u0432\u043e\u0437\u0432\u0440\u0430\u0442.     }      Last.Right = Node; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u042d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u041e\u043d, \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 \u0443\u0437\u043b\u044b \u043a \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0443\u0437\u043b\u044b-\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b (\u0438\u0445 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u044b). \u0411\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u043c\u0435\u0442\u043e\u0434 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043e\u0431\u044a\u0451\u043c\u043e\u0432 \u043a\u043e\u0434\u0430 \u0432 \u043d\u0451\u043c. \u041b\u043e\u0433\u0438\u043a\u0430 \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0430 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u0432 \u043a\u043e\u0434\u0435.<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0434\u0432\u0443\u0445 \u0443\u0437\u043b\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430: \u0435\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u2014 \u043a\u043e\u0440\u0435\u043d\u044c \u0434\u0435\u0440\u0435\u0432\u0430 \u0438 \u0443\u0437\u0435\u043b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0437\u043b\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0432\u044b\u0431\u043e\u0440\u0430, \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u0435\u0433\u043e \u043b\u0435\u0432\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0435 \u0443\u0437\u0435\u043b-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f &lt;\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f&gt;:&lt;\u0432\u0430\u0440\u0438\u0430\u043d\u0442_2&gt;, \u0442\u043e \u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0443\u0437\u0435\u043b \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 &lt;\u0438\u043c\u044f_\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430&gt;:&lt;\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435_\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430&gt;. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439.<\/p>\n<p>  \u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435-\u043f\u0430\u0440\u0441\u0435\u0440\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0435 NewNodeAdded, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u0434\u043b\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0443\u0437\u0435\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435, \u0442\u0430\u043a \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u044b \u0442\u0435\u0440\u043c\u043e\u0432 \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u043c \u0431\u044b\u043b\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e \u0438 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 GetSubTree \u0431\u043b\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0430 \u0432\u0441\u0435 \u043a\u043e\u0440\u043d\u0438 \u0442\u0430\u043a\u0438\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u0431\u044b\u043b\u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0432 \u043c\u0430\u0441\u0441\u0438\u0432, \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442:<\/p>\n<ul>\n<li>\u0435\u0441\u043b\u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0442\u043e \u043e\u043d \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 (\u044d\u0442\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439)<\/li>\n<li>\u0435\u0441\u043b\u0438 \u043a\u043e\u0440\u043d\u0435\u0439 \u043c\u043d\u043e\u0433\u043e, \u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0443\u0437\u0435\u043b \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 FunctionArgumentNode ( \u0432 \u0435\u0433\u043e \u043f\u0440\u0430\u0432\u043e\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e), \u0430 \u0432 \u043b\u0435\u0432\u043e\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e \u0446\u0435\u043f\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442.<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0435\u0440\u0435\u0432\u0430 \u043c\u0430\u0442\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/h3>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c:<\/p>\n<ul>\n<li>\u0423\u0437\u043b\u044b \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0441\u0432\u043e\u0438 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u044b \u0432 \u043b\u0435\u0432\u043e\u043c \u0438 \u043f\u0440\u0430\u0432\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u044c\u044f\u0445<\/li>\n<li>\u0423\u0437\u043b\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 (\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f) \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043b\u0438\u0441\u0442\u044c\u044f\u043c\u0438 \u0434\u0435\u0440\u0435\u0432\u0430 (\u043d\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)<\/li>\n<li>\u0423\u0437\u043b\u044b \u0431\u043b\u043e\u043a\u043e\u0432 \u0441\u043a\u043e\u0431\u043e\u043a \u0445\u0440\u0430\u043d\u044f\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043b\u0435\u0432\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0435<\/li>\n<li>\u0423\u0437\u043b\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u043c\u0435\u044e\u0442 \u043f\u0443\u0441\u0442\u043e\u0435 \u043b\u0435\u0432\u043e\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e. \u0412 \u043f\u0440\u0430\u0432\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0443\u0437\u0435\u043b \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430.<\/li>\n<li>\u0423\u0437\u0435\u043b \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u043b\u0435\u0432\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043b\u0438\u0431\u043e \u043a\u043e\u0440\u0435\u043d\u044c \u0434\u0435\u0440\u0435\u0432\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430, \u043b\u0438\u0431\u043e \u0443\u0437\u0435\u043b \u0438\u043c\u0435\u043d\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430. \u0412 \u043f\u0440\u0430\u0432\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438;<\/li>\n<li>\u0423\u0437\u0435\u043b \u0438\u043c\u0435\u043d\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u2014 \u0432 \u043b\u0435\u0432\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043d\u0435\u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c\u044b\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0439 \u0443\u0437\u0435\u043b \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439-\u0438\u043c\u0435\u043d\u0435\u043c, \u0430 \u043f\u0440\u0430\u0432\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043a\u043e\u0440\u0435\u043d\u044c \u0434\u0435\u0440\u0435\u0432\u0430-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430.<\/li>\n<li>\u0423\u0437\u0435\u043b \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438\u0441\u0442\u043e\u043c. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e (\u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0433\u0438\u0431\u043a\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c\u0438).<\/li>\n<\/ul>\n<p>  \u0421\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044b \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u044b \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b.<\/p>\n<p>  \u0414\u0435\u0440\u0435\u0432\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043e. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0443\u0437\u043b\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u041a\u0430\u0436\u0434\u044b\u0439 \u0442\u0430\u043a\u043e\u0439 \u0443\u0437\u0435\u043b \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0435\u043c\u0443 \u0442\u0435\u0440\u043c\u043e\u043c \u043f\u0440\u044f\u043c\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0443\u0437\u043b\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u0438\u043f\u0430:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">class StringTerm : Term {&#8230;}<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\/ &lt;summary&gt;\u0421\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/summary&gt; class StringTerm : Term {     \/\/\/ &lt;summary&gt;\u0418\u043c\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430&lt;\/summary&gt;     [NotNull]     public string Name =&gt; f_Value;      \/\/\/ &lt;summary&gt;\u041d\u043e\u0432\u044b\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442&lt;\/summary&gt;     \/\/\/ &lt;param name=&quot;Name&quot;&gt;\u0418\u043c\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430&lt;\/param&gt;     public StringTerm([NotNull] string Name) : base(Name) { Contract.Requires(!string.IsNullOrEmpty(Name)); }      \/\/\/ &lt;summary&gt;\u041f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0438\u0437 \u0443\u0437\u043b\u0430-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439&lt;\/summary&gt;     \/\/\/ &lt;param name=&quot;Parser&quot;&gt;\u041f\u0430\u0440\u0441\u0435\u0440&lt;\/param&gt;     \/\/\/ &lt;param name=&quot;Expression&quot;&gt;\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435&lt;\/param&gt;     \/\/\/ &lt;returns&gt;\u0423\u0437\u0435\u043b \u0434\u0435\u0440\u0435\u0432\u0430 \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u0438\u0437 Expression.Variable[Name]&lt;\/returns&gt;     public override ExpressionTreeNode GetSubTree(ExpressionParser Parser, MathExpression Expression)         =&gt; new VariableValueNode(Expression.Variable[Name]); }  \/\/\/ &lt;summary&gt;\u0411\u043b\u043e\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438&lt;\/summary&gt; sealed class FunctionalTerm : FunctionTerm {     \/\/\/ &lt;summary&gt;\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430&lt;\/summary&gt;     [NotNull]     public BlockTerm Parameters { get; set; }      \/\/\/ &lt;summary&gt;\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u043b\u043e\u043a\u0430 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430&lt;\/summary&gt;     \/\/\/ &lt;param name=&quot;Header&quot;&gt;\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0431\u043b\u043e\u043a\u0430&lt;\/param&gt;     \/\/\/ &lt;param name=&quot;Body&quot;&gt;\u0422\u0435\u043b\u043e \u0431\u043b\u043e\u043a\u0430&lt;\/param&gt;     public FunctionalTerm([NotNull] FunctionTerm Header, [NotNull] BlockTerm Body) : base(Header.Name, Body)     {         Contract.Requires(Header != null);         Contract.Requires(Body != null);         Parameters = Header.Block;     }      \/\/\/ &lt;summary&gt;\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430&lt;\/summary&gt;     \/\/\/ &lt;param name=&quot;Parser&quot;&gt;\u041f\u0430\u0440\u0441\u0435\u0440&lt;\/param&gt;     \/\/\/ &lt;param name=&quot;Expression&quot;&gt;\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435&lt;\/param&gt;     \/\/\/ &lt;returns&gt;\u0423\u0437\u0435\u043b \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430&lt;\/returns&gt;     public override ExpressionTreeNode GetSubTree(ExpressionParser Parser, MathExpression Expression)         =&gt; new FunctionalNode(this, Parser, Expression);      public override string ToString() =&gt; $&quot;{Name}{Parameters}{Block}&quot;; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0443\u0437\u0435\u043b \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0442 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445\/\u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0447\u0442\u043e \u0431\u044b \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0438\u0437 \u043d\u0435\u0451 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u043d\u0443\u0436\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e\/\u0444\u0443\u043d\u043a\u0446\u0438\u044e.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">internal FunctionNode(FunctionTerm Term, ExpressionParser Parser, MathExpression Expression)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\/ &lt;summary&gt;\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430&lt;\/summary&gt; \/\/\/ &lt;param name=&quot;Term&quot;&gt;\u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438&lt;\/param&gt; \/\/\/ &lt;param name=&quot;Parser&quot;&gt;\u041f\u0430\u0440\u0441\u0435\u0440 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&lt;\/param&gt; \/\/\/ &lt;param name=&quot;Expression&quot;&gt;\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435&lt;\/param&gt; internal FunctionNode(FunctionTerm Term, ExpressionParser Parser, MathExpression Expression)     : this(Term.Name) {     var arg = Term.Block.GetSubTree(Parser, Expression);     if(!(arg is FunctionArgumentNode))         if(arg is FunctionArgumentNameNode)             arg = new FunctionArgumentNode((FunctionArgumentNameNode)arg);         else if(arg is VariableValueNode)             arg = new FunctionArgumentNode(null, arg);         else if(arg is VariantOperatorNode && arg.Left is VariableValueNode)             arg = new FunctionArgumentNode(((VariableValueNode)arg.Left).Name, arg.Right);         else             arg = new FunctionArgumentNode(null, arg);     Right = arg;     \/\/\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f     Function = Expression.Functions[Name, ArgumentsNames]; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0435\u0440\u0435\u0432\u0430 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0447\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u041d\u043e \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u043f\u0443\u0441\u0442\u044b. \u0427\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043f\u0430\u0440\u0441\u0435\u0440\u0443 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b (\u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0438\u0445 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e, \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c-\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u043d\u0430\u0434\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0435 \u0438\u0445 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u044b.<\/p>\n<h3>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0435\u0440\u0435\u0432\u0430<\/h3>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u00ab\u0441\u044b\u0440\u043e\u0433\u043e\u00bb \u0434\u0435\u0440\u0435\u0432\u0430 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u041c\u0435\u0442\u043e\u0434 Parse \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 ProcessVariables \u0438 ProcessFunctions \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u0432 \u043d\u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0435 \u00ab\u0441\u044b\u0440\u043e\u0435\u00bb \u0434\u0435\u0440\u0435\u0432\u043e.<\/p>\n<p>  \u041c\u0435\u0442\u043e\u0434 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">internal void ProcessVariables(MathExpression Expression)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\/ &lt;summary&gt;\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445&lt;\/summary&gt; \/\/\/ &lt;param name=&quot;Expression&quot;&gt;\u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435&lt;\/param&gt; internal void ProcessVariables([NotNull] MathExpression Expression) {     Contract.Requires(Expression != null);     var tree_vars = Expression.Tree.Root.GetVariables().ToArray();     Expression.Variable         .Where(v =&gt; !tree_vars.Contains(v))         .ToArray()         .Foreach(v =&gt; Expression.Variable.Remove(v));     foreach(var variable in Expression.Variable.ToArray())     {         if(f_Constans.ContainsKey(variable.Name))         {             Expression.Variable.MoveToConstCollection(variable);             variable.Value = f_Constans[variable.Name];         }         OnVariableProcessing(variable);     } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0415\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043e\u0431\u043e\u0439\u0442\u0438 \u0434\u0435\u0440\u0435\u0432\u043e, \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0435 \u0443\u0437\u043b\u044b-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0438\u0437 \u043d\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432 \u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u044b-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043d\u0430\u0434\u043e \u0438\u0437 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0434\u0435\u0440\u0435\u0432\u0435.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432 \u0434\u0435\u0440\u0435\u0432\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u2014 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043b\u0438 \u0435\u0451 \u0438\u043c\u044f \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u043f\u0430\u0440\u0441\u0435\u0440\u0430. \u0415\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u043e\u043d\u0430 \u0438\u0437\u044b\u043c\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0437\u0430\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c \u043f\u0430\u0440\u0441\u0435\u0440\u0443 \u0438 \u0432 \u043d\u0435\u0439 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u043b\u0430\u0433, \u0447\u0442\u043e \u043e\u043d\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0434\u043b\u044f \u043d\u0435\u0451 \u0432 \u043f\u0430\u0440\u0441\u0435\u0440\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439. \u041f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043b\u0438\u0431\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 ProcessFunctions \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430\u043c\u0438 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">internal void ProcessFunctions(MathExpression Expression)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\/ &lt;summary&gt;\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439&lt;\/summary&gt; \/\/\/ &lt;param name=&quot;Expression&quot;&gt;\u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435&lt;\/param&gt; [SuppressMessage(&quot;ReSharper&quot;, &quot;CyclomaticComplexity&quot;)] internal void ProcessFunctions([NotNull] MathExpression Expression) {     Contract.Requires(Expression != null);     foreach(var function in Expression.Functions)         switch(function.Name)         {             case &quot;Sin&quot;:             case &quot;SIN&quot;:             case &quot;sin&quot;:                 if(function.Arguments.Length != 1)                     goto default;                 function.Delegate = new Func&lt;double, double&gt;(Math.Sin);                 break;             case &quot;COS&quot;:             case &quot;Cos&quot;:             case &quot;cos&quot;:                 if(function.Arguments.Length != 1)                     goto default;                 function.Delegate = new Func&lt;double, double&gt;(Math.Cos);                 break;             case &quot;TAN&quot;:             case &quot;Tan&quot;:             case &quot;tan&quot;:             case &quot;tn&quot;:                 if(function.Arguments.Length != 1)                     goto default;                 function.Delegate = new Func&lt;double, double&gt;(Math.Tan);                 break;             case &quot;ATAN&quot;:             case &quot;ATan&quot;:             case &quot;Atan&quot;:             case &quot;atan&quot;:             case &quot;atn&quot;:             case &quot;Atn&quot;:                 if(function.Arguments.Length == 1)                     function.Delegate = new Func&lt;double, double&gt;(Math.Atan);                 else if(function.Arguments.Length == 2)                     function.Delegate = new Func&lt;double, double, double&gt;(Math.Atan2);                 else goto default;                 break;             case &quot;Atan2&quot;:             case &quot;atan2&quot;:                 if(function.Arguments.Length != 2)                     goto default;                 function.Delegate = new Func&lt;double, double, double&gt;(Math.Atan2);                 break;             case &quot;CTG&quot;:             case &quot;Ctg&quot;:             case &quot;ctg&quot;:                 if(function.Arguments.Length != 1)                     goto default;                 function.Delegate = new Func&lt;double, double&gt;(x =&gt; 1 \/ Math.Tan(x));                 break;             case &quot;Sign&quot;:             case &quot;sign&quot;:                 if(function.Arguments.Length != 1)                     goto default;                 function.Delegate = new Func&lt;double, double&gt;(x =&gt; Math.Sign(x));                 break;             case &quot;Abs&quot;:             case &quot;abs&quot;:                 if(function.Arguments.Length != 1)                     goto default;                 function.Delegate = new Func&lt;double, double&gt;(Math.Abs);                 break;             case &quot;Exp&quot;:             case &quot;EXP&quot;:             case &quot;exp&quot;:                 if(function.Arguments.Length != 1)                     goto default;                 function.Delegate = new Func&lt;double, double&gt;(Math.Exp);                 break;             case &quot;Sqrt&quot;:             case &quot;SQRT&quot;:             case &quot;\u221a&quot;:             case &quot;sqrt&quot;:                 if(function.Arguments.Length != 1)                     goto default;                 function.Delegate = new Func&lt;double, double&gt;(Math.Sqrt);                 break;             case &quot;log10&quot;:             case &quot;Log10&quot;:             case &quot;LOG10&quot;:             case &quot;lg&quot;:             case &quot;Lg&quot;:             case &quot;LG&quot;:                 if(function.Arguments.Length != 1)                     goto default;                 function.Delegate = new Func&lt;double, double&gt;(Math.Log10);                 break;             case &quot;loge&quot;:             case &quot;Loge&quot;:             case &quot;LOGe&quot;:             case &quot;ln&quot;:             case &quot;Ln&quot;:             case &quot;LN&quot;:                 if(function.Arguments.Length != 1)                     goto default;                 function.Delegate = new Func&lt;double, double&gt;(Math.Log);                 break;             case &quot;log&quot;:             case &quot;Log&quot;:             case &quot;LOG&quot;:                 if(function.Arguments.Length != 2)                     goto default;                 function.Delegate = new Func&lt;double, double, double&gt;(Math.Log);                 break;             default:                 var f = OnFunctionFind(function.Name, function.Arguments);                 if(f == null)                     throw new NotSupportedException($&quot;\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 {function.Name} \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f&quot;);                 function.Delegate = f;                 break;         } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0415\u0441\u043b\u0438 \u0438\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0440\u0435\u0434\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 case, \u0442\u043e \u043f\u0440\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0447\u0438\u0441\u043b\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0435\u0439 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u0435\u043b\u0435\u0433\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430, \u0442\u043e \u0434\u0435\u043b\u0435\u0433\u0430\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432 \u0440\u0435\u0430\u043a\u0446\u0438\u0438 \u043d\u0430 \u044d\u0442\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0435 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 (\u0438 \u0438\u043c\u0435\u043d\u0430\u043c) \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0439 \u0434\u0435\u043b\u0435\u0433\u0430\u0442.<\/p>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f.<\/p>\n<h3>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435<\/h3>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 A*cos(2*x)\/pi+G(x\/2) \u0434\u0435\u043b\u0451\u043d\u044b\u0439 \u043d\u0430 \u0410 \u0438 + 1, \u0433\u0434\u0435 G(x)=2cos(x). \u041f\u0440\u0438 \u0410, \u0441\u043a\u0430\u0436\u0435\u043c, \u0440\u0430\u0432\u043d\u043e\u0439 5. \u0418 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b \u043d\u0430\u0434\u043e \u0432\u0437\u044f\u0442\u044c \u0441 \u0448\u0430\u0433\u043e\u043c 0,05.<\/p>\n<pre><code class=\"cs\">var parser = new ExpressionParser(); parser .FindFunction += (s, e) =&gt; {       if(e.SignatureEqual(name: &quot;G&quot;, ArgumentsCount: 1))           e.Function = new Func&lt;double, double&gt;(x =&gt; 2 * Math.Cos(x)); }; var expr = parser.Parse(@&quot;Int[x=-10..10;dx=0.05]{A*cos(2x) + G(x\/2)}\/A + 1&quot;); expr.Variable[&quot;A&quot;] = 5; var y = expr.Compute(); \/\/y = 0.30928806858920344  var f = expr.Compile(); var y2 = f(); \/\/y = 0.30928806858920344 <\/code><\/pre>\n<p>  <\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u043e\u0431\u044a\u0451\u043c \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0441\u0442\u0430\u0432\u043b\u044e \u0437\u0434\u0435\u0441\u044c\u2026 \u043d\u0435 \u0442\u043e\u0447\u043a\u0443, \u0430 \u0442\u043e\u0447\u043a\u0443 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u044b\u0448\u0435\u0438\u0437\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0434\u0430\u043b\u043e\u0441\u044c:<\/p>\n<ol>\n<li>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0431\u0449\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e \u043c\u0435\u0442\u043e\u0434\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438;<\/li>\n<li>\u0421\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0441\u0430\u043c\u043e\u0433\u043e \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0435\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430;<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435;<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0434\u0435\u0440\u0435\u0432\u0430 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043a\u043e\u0431\u043e\u043a, \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 (\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u0432);<\/li>\n<li>\u041e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u044d\u0442\u0430\u043f\u0430\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u043c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441\u043e\u0431\u044b\u0442\u0438\u0439;<\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/li>\n<\/ol>\n<p>  \u0427\u0435\u0433\u043e \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435:<\/p>\n<ol>\n<li>\u041b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 (\u0438\u0445 \u0442\u0438\u043f\u044b \u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0438\u0445 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0437\u0430\u043c\u0435\u043d\u044b);<\/li>\n<li>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442, \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f;<\/li>\n<li>\u041c\u0435\u0442\u043e\u0434 \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0443\u0442\u0451\u043c \u043e\u0431\u0445\u043e\u0434\u0430 \u0435\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430;<\/li>\n<li>\u041c\u0435\u0442\u043e\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0434\u0435\u0440\u0435\u0432\u0430 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0434\u0435\u043b\u0435\u0433\u0430\u0442.<\/li>\n<\/ol>\n<p>  \u0427\u0435\u0433\u043e \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043a\u0430 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0430\u0440\u0441\u0435\u0440\u0430:<\/p>\n<ol>\n<li>\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0435\u0440\u0435\u0432\u0430 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f;<\/li>\n<li>\u0423\u0431\u0440\u0430\u0442\u044c \u043a\u043e\u0441\u0442\u044b\u043b\u0438 \u0438\u0437 \u0440\u044f\u0434\u0430 \u043c\u0435\u0441\u0442;<\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0443 \u043c\u0430\u0442.\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f;<\/li>\n<li>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043e\u0447\u0435\u0440\u0442\u0438\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u044d\u0442\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430;<\/li>\n<li>\u041f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u043a\u043e\u0434\u0430 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u043c\u0438 \u0442\u0435\u0441\u0442\u0430\u043c\u0438;<\/li>\n<li>\u041f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043a\u0430\u043a \u044d\u0442\u0430\u043f\u043e\u0432 \u0440\u0430\u0437\u0431\u043e\u0440\u0430, \u0442\u0430\u043a \u0438 \u044d\u0442\u0430\u043f\u043e\u0432 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f.<\/li>\n<\/ol>\n<p>  \u0412 \u0446\u0435\u043b\u043e\u043c, \u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0430\u0434 \u044d\u0442\u0438\u043c \u043a\u043e\u0434\u043e\u043c \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u043d\u043e\u0441\u0438\u0442 \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440 \u0438 \u0434\u043b\u0438\u0442\u044c\u0441\u044f \u0443\u0436\u0435 \u043f\u0430\u0440\u0443 \u043b\u0435\u0442, \u043d\u043e \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043e\u043d \u0443\u0436\u0435 \u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0434 \u043d\u0438\u043c \u0437\u0430\u0434\u0430\u0447\u0438. \u0425\u043e\u0442\u044f \u0432 \u0442\u0435\u043f\u0435\u0440\u0435\u0448\u043d\u0435\u043c \u0432\u0438\u0434\u0435 \u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d \u043d\u0435\u043b\u044c\u0437\u044f.<\/p>\n<p>  \u041f\u043e\u043b\u043d\u044b\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/bitbucket.org\/Infarh\/mathservice.net\/src\/fe7e46426521a6b9759de1c297986bb22b80abe7\/MathService\/MathParser\/?at=MathParser\">\u0442\u0443\u0442<\/a>.       <\/p>\n<div class=\"clear\"><\/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=\"https:\/\/habrahabr.ru\/post\/281495\/\"> https:\/\/habrahabr.ru\/post\/281495\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<br \/>\n<blockquote><p>\u041a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u2014 \u043a\u0430\u043a \u0441\u043b\u043e\u0436\u043d\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u044f\u0442\u044c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430. \u041f\u043e \u0441\u0443\u0442\u0438, \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043c\u0430\u0448\u0438\u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u0442\u044b \u043e\u0442 \u043d\u0435\u0451 \u0445\u043e\u0447\u0435\u0448\u044c \u043d\u0430 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u043c \u0435\u0439 \u044f\u0437\u044b\u043a\u0435.<\/p><\/blockquote>\n<p>  <\/p>\n<h1>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f<\/h1>\n<p>  \u041f\u043e \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435, \u0434\u0430 \u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0445\u043e\u0431\u0431\u0438, \u044f \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u043c\u0438. \u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u0431\u044b\u043b\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u041f\u041e, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438\u043c\u0435\u043b \u0431\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u0440\u0430\u0441\u0447\u0451\u0442\u0435, \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0410 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0441\u0432\u043e\u044e \u043f\u0440\u0438\u0440\u043e\u0434\u043d\u0443\u044e \u043b\u0435\u043d\u044c \u0438 \u043d\u0435\u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043a\u043e\u0434\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u0440\u0438\u0448\u043b\u0430 \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 \u043c\u044b\u0441\u043b\u044c \u2014 \u0430 \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0440\u0435\u0434\u043e\u0432\u0443\u044e \u0441\u0442\u0443\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u0434\u0435\u044e, \u0438 \u043d\u0435 \u0438\u0437\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434 \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0432\u0437\u044f\u0442\u044c\u0441\u044f \u0437\u0430 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 (\u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u0432 \u0432\u0438\u0434\u0443 \u0432\u0441\u0435\u043b\u0435\u043d\u0441\u043a\u043e\u0439 \u043b\u0435\u043d\u0438), \u0431\u044b\u043b\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u043b\u0433\u043e\u0435 \u0438\u0437\u043d\u0430\u0441\u0438\u043b\u043e\u0432\u0430\u043d\u0438\u0435 \u042f\u043d\u0434\u0435\u043a\u0441\u0430 \u0438 \u0413\u0443\u0433\u043b\u0430 \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439. \u0418 \u0438\u0445 \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043d\u0435 \u043c\u0430\u043b\u043e. \u041d\u043e \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0442\u043e\u0433\u043e, \u0447\u0435\u0433\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c. \u0410 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0431\u044b\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435:<\/p>\n<ul>\n<li>\u041f\u0430\u0440\u0441\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043f\u043e\u0434 .NET \u043d\u0435 \u0441\u0442\u0430\u0440\u0448\u0435 4.0;<\/li>\n<li>\u041e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b (+,-,*,\/,^, \u0438 \u0442.\u043f.) \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0438\u0445 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432 \u0438 \u0441\u043a\u043e\u0431\u043e\u043a \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0438\u0434\u043e\u0432;<\/li>\n<li>\u041e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0432\u0440\u043e\u0434\u0435 sin, cos), \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0441\u0432\u043e\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0449\u0438\u0445 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445);<\/li>\n<li>\u0414\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043f\u0430\u0440\u0441\u0435\u0440\u0443 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442, \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0445 \u0441 \u0441\u043f\u0438\u0441\u043e\u043a, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043f\u0440\u0438 \u0440\u0430\u0437\u0431\u043e\u0440\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f;<\/li>\n<li>\u0414\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432: \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043b\u0438\u0431\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043a\u043e\u0434 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u0430;<\/li>\n<li>\u0414\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u0432 (\u043c\u0438\u043d\u0438\u043c\u0443\u043c \u2014 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0441\u0443\u043c\u043c\u0430 \u0440\u044f\u0434\u0430 \u0438 \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435)<\/li>\n<li>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430;<\/li>\n<li>\u0421\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0434\u0435\u0440\u0435\u0432\u043e Linq.Expression \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0435\u0439 \u0435\u0433\u043e \u0432 \u0434\u0435\u043b\u0435\u0433\u0430\u0442, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0439 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0441\u0430\u043c\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b .NET.<\/li>\n<\/ul>\n<p>  <\/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-278192","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/278192","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=278192"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/278192\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=278192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=278192"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=278192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}