{"id":379627,"date":"2024-06-25T03:15:30","date_gmt":"2024-06-25T03:15:30","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=379627"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=379627","title":{"rendered":"<span>LR-\u043f\u0430\u0440\u0441\u0435\u0440\u044b<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><em>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!<\/em><\/p>\n<p><strong>LR-\u043f\u0430\u0440\u0441\u0435\u0440\u044b<\/strong> \u2013 \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. LR \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 <em>Left-to-right, <\/em>\u0441\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e \u0438 <em>Rightmost<\/em> derivation, \u043f\u0440\u0430\u0432\u043e\u0435 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f. LR \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0441\u043d\u0438\u0437\u0443 \u0432\u0432\u0435\u0440\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 LL-\u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437.<\/p>\n<p>\u041e\u0434\u043d\u0430 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0444\u0438\u0447 LR-\u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 &#8212; \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e-\u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a. <\/p>\n<h3>\u0422\u0438\u043f\u044b LR-\u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432<\/h3>\n<h4>LR(0) \u043f\u0430\u0440\u0441\u0435\u0440\u044b<\/h4>\n<p>LR(0) \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u2014 \u044d\u0442\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0442\u0438\u043f LR-\u043f\u0430\u0440\u0441\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0443\u043b\u0435\u0432\u043e\u0435 \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u043f\u0435\u0440\u0435\u0434, \u0442.\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430\u0445 \u0438 \u0440\u0435\u0434\u0443\u043a\u0446\u0438\u044f\u0445, \u043d\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p>LR(0) \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0431\u0430\u0437\u043e\u0439 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432. \u041e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u0442\u0435\u043a \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.<\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u043f\u0435\u0440\u0435\u0434, \u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u0434\u0432\u0443\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 LR(0) \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 \u2014 \u044d\u0442\u043e \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b shift\/reduce \u0438 reduce\/reduce, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0442\u044c \u0438\u0437-\u0437\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u0445.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0443:<\/p>\n<pre><code>S \u2192 A A \u2192 aA | b<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0441\u0442\u0440\u043e\u043a\u0438 &#171;aab&#187;, LR(0) \u043f\u0430\u0440\u0441\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438:<\/p>\n<ol>\n<li>\n<p>Shift: \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 <code>a<\/code> \u0432 \u0441\u0442\u0435\u043a.<\/p>\n<\/li>\n<li>\n<p>Shift: \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u0442\u043e\u0440\u043e\u0433\u043e <code>a<\/code> \u0432 \u0441\u0442\u0435\u043a.<\/p>\n<\/li>\n<li>\n<p>Reduce: \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>aA<\/code> \u0432 <code>A<\/code>.<\/p>\n<\/li>\n<li>\n<p>Shift: \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 <code>b<\/code> \u0432 \u0441\u0442\u0435\u043a.<\/p>\n<\/li>\n<li>\n<p>Reduce: \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>A<\/code> \u0432 <code>S<\/code>.<\/p>\n<\/li>\n<\/ol>\n<h4>SLR (Simple LR) \u043f\u0430\u0440\u0441\u0435\u0440\u044b<\/h4>\n<p>SLR \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u0430\u043f\u0434\u0435\u0439\u0442 \u0432\u0435\u0440\u0441\u0438\u044e LR(0) \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u043f\u0435\u0440\u0435\u0434 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p>SLR \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u0440\u0435\u0448\u0430\u044e\u0442 \u043c\u043d\u043e\u0433\u0438\u0435 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b, \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432 LR(0) \u043f\u0430\u0440\u0441\u0435\u0440\u0430\u0445, \u043f\u0443\u0442\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430.<\/p>\n<p>\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0434\u043b\u044f SLR \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0443 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 LR(1) \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u0445 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0439 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0439 \u0436\u0435 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438:<\/p>\n<pre><code>S \u2192 A A \u2192 aA | b<\/code><\/pre>\n<p>SLR \u043f\u0430\u0440\u0441\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u043f\u0435\u0440\u0435\u0434 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f, \u043a\u0430\u043a\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0432\u0443\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h4>LALR (Look-Ahead LR) \u043f\u0430\u0440\u0441\u0435\u0440\u044b<\/h4>\n<p>LALR \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u2014 \u044d\u0442\u043e \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0448\u0430\u0433 \u0432 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438 LR-\u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0441\u043e\u0431\u043e\u0439 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441 \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<p>LALR \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0435 LR(1) \u043f\u0430\u0440\u0441\u0435\u0440\u044b, \u043d\u043e \u0441 \u043c\u0435\u043d\u044c\u0448\u0438\u043c\u0438 \u0437\u0430\u0442\u0440\u0430\u0442\u0430\u043c\u0438 \u043d\u0430 \u043f\u0430\u043c\u044f\u0442\u044c.<\/p>\n<p>\u0422\u0430\u0431\u043b\u0438\u0446\u044b LALR \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b, \u0447\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e\u043b\u043d\u044b\u0445 LR(1) \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0443:<\/p>\n<pre><code>S \u2192 E E \u2192 E + T | T T \u2192 T * F | F F \u2192 ( E ) | id<\/code><\/pre>\n<p>LALR \u043f\u0430\u0440\u0441\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u043f\u0435\u0440\u0435\u0434 \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u044f \u0434\u0432\u0443\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432.<\/p>\n<h4>Canonical LR(1) \u043f\u0430\u0440\u0441\u0435\u0440\u044b<\/h4>\n<p>Canonical LR(1) \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043c\u043e\u0449\u043d\u044b\u0439 \u0442\u0438\u043f LR-\u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e-\u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0435 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438 \u0431\u0435\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0442\u0438 \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u0430\u044f LR-\u043f\u0430\u0440\u0441\u0435\u0440\u043d\u0430\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0430.<\/p>\n<p>\u0422\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0434\u043b\u044f LR(1) \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0443 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 LR-\u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432.<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0439 \u0436\u0435 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438:<\/p>\n<pre><code>S \u2192 E E \u2192 E + T | T T \u2192 T * F | F F \u2192 ( E ) | id<\/code><\/pre>\n<p>Canonical LR(1) \u043f\u0430\u0440\u0441\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0442\u043e\u0447\u043d\u044b\u0439 \u043f\u0430\u0440\u0441\u0438\u043d\u0433.<\/p>\n<h3>\u0418\u0437 \u0447\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u0442 LR-\u043f\u0430\u0440\u0441\u0435\u0440\u0441\u044b \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u044b<\/h3>\n<h4>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b LR-\u043f\u0430\u0440\u0441\u0435\u0440\u0430<\/h4>\n<ol>\n<li>\n<p><strong>\u0421\u0442\u0435\u043a<\/strong>:<br \/>\u0421\u0442\u0435\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u0430\u0440\u0441\u0435\u0440 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u0442\u0435\u043a\u043e\u043c \u0438 \u0432\u0445\u043e\u0434\u043d\u044b\u043c \u0431\u0443\u0444\u0435\u0440\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440<\/strong>:<br \/> \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0440\u043e\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u0430. \u0421\u0442\u0440\u043e\u043a\u0430 \u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u043a\u043e\u043d\u0446\u0430 ($).<\/p>\n<\/li>\n<li>\n<p><strong>Action table<\/strong>:<br \/>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u0430\u0440\u0441\u0435\u0440\u0430 (shift, reduce, accept, \u0438\u043b\u0438 error) \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u0441\u0442\u0435\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>Goto table<\/strong>:<br \/>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0430\u0440\u0441\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f reduce-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0431\u044b\u043b\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0430 \u0440\u0435\u0434\u0443\u043a\u0446\u0438\u044f.<\/p>\n<\/li>\n<\/ol>\n<h4>\u0428\u0430\u0433\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430<\/h4>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c LR-\u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u0448\u0430\u0433\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 shift \u0438 reduce:<\/p>\n<ol>\n<li>\n<p><strong>Shift<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0437 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u0432 \u0441\u0442\u0435\u043a.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Reduce<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438 \u043a \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u0441\u0442\u0435\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043c\u0435\u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043d\u0430 \u043b\u0435\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0432 \u0441\u0442\u0435\u043a\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0448\u0430\u0433\u043e\u0432 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430:<\/p>\n<p>\u0413\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0430:<\/p>\n<pre><code>E \u2192 E + T | T T \u2192 T * F | F F \u2192 ( E ) | id<\/code><\/pre>\n<p>\u0412\u0445\u043e\u0434\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430: <code>id + id * id<\/code><\/p>\n<p><strong>\u0428\u0430\u0433\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/strong>:<\/p>\n<ol>\n<li>\n<p><strong>Shift<\/strong>: <code>id<\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u043a, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>Reduce<\/strong>: <code>id<\/code> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 <code>F<\/code>, \u0437\u0430\u0442\u0435\u043c <code>F<\/code> \u0432 <code>T<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Shift<\/strong>: <code>+<\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u043a.<\/p>\n<\/li>\n<li>\n<p><strong>Shift<\/strong>: \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 <code>id<\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u043a, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>Reduce<\/strong>: <code>id<\/code> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 <code>F<\/code>, \u0437\u0430\u0442\u0435\u043c <code>F<\/code> \u0432 <code>T<\/code>, \u0438 <code>T<\/code> \u0432 <code>E<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Shift<\/strong>: <code>*<\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u043a.<\/p>\n<\/li>\n<li>\n<p><strong>Shift<\/strong>: \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 <code>id<\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u043a, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>Reduce<\/strong>: <code>id<\/code> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 <code>F<\/code>, \u0437\u0430\u0442\u0435\u043c <code>F<\/code> \u0432 <code>T<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Reduce<\/strong>: <code>T * F<\/code> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 <code>T<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Reduce<\/strong>: <code>E + T<\/code> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 <code>E<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Accept<\/strong>: \u0441\u0442\u0440\u043e\u043a\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u0430.<\/p>\n<\/li>\n<\/ol>\n<h3>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430<\/h3>\n<h4>LR(0) \u043f\u0430\u0440\u0441\u0435\u0440<\/h4>\n<pre><code class=\"python\">class LR0Parser:     def __init__(self, grammar, parsing_table):         self.grammar = grammar         self.parsing_table = parsing_table      def parse(self, input_string):         stack = [0]         input_string = input_string.split() + ['$']         cursor = 0          while True:             state = stack[-1]             lookahead = input_string[cursor]             action = self.parsing_table[state][lookahead]              if action.startswith('s'):                 stack.append(lookahead)                 stack.append(int(action[1:]))                 cursor += 1             elif action.startswith('r'):                 production = self.grammar[int(action[1:])]                 for _ in range(2 * len(production[1])):                     stack.pop()                 state = stack[-1]                 stack.append(production[0])                 stack.append(self.parsing_table[state][production[0]])             elif action == 'accept':                 print(\"Parsing completed successfully!\")                 return True             else:                 print(\"Error: Invalid syntax\")                 return False  grammar = [     ('S', ['A']),     ('A', ['a', 'A']),     ('A', ['b']) ]  parsing_table = {     0: {'a': 's2', 'b': 's3', 'S': 1, 'A': 4},     2: {'a': 's2', 'b': 's3', 'A': 5},     3: {'$': 'r2'},     4: {'$': 'accept'},     5: {'a': 's2', 'b': 's3', 'A': 6},     6: {'$': 'r1'} }  parser = LR0Parser(grammar, parsing_table) parser.parse('a a b')<\/code><\/pre>\n<h4>SLR \u043f\u0430\u0440\u0441\u0435\u0440<\/h4>\n<pre><code class=\"python\">class SLRParser:     def __init__(self, grammar, parsing_table, follow_set):         self.grammar = grammar         self.parsing_table = parsing_table         self.follow_set = follow_set      def parse(self, input_string):         stack = [0]         input_string = input_string.split() + ['$']         cursor = 0          while True:             state = stack[-1]             lookahead = input_string[cursor]             action = self.parsing_table[state].get(lookahead, None)              if action is None:                 print(\"Error: Invalid syntax\")                 return False             elif action.startswith('s'):                 stack.append(lookahead)                 stack.append(int(action[1:]))                 cursor += 1             elif action.startswith('r'):                 production = self.grammar[int(action[1:])]                 for _ in range(2 * len(production[1])):                     stack.pop()                 state = stack[-1]                 stack.append(production[0])                 stack.append(self.parsing_table[state][production[0]])             elif action == 'accept':                 print(\"Parsing completed successfully!\")                 return True             else:                 print(\"Error: Invalid syntax\")                 return False  grammar = [     ('S', ['E']),     ('E', ['E', '+', 'T']),     ('E', ['T']),     ('T', ['T', '*', 'F']),     ('T', ['F']),     ('F', ['(', 'E', ')']),     ('F', ['id']) ]  parsing_table = {     0: {'id': 's5', '(': 's4', 'E': 1, 'T': 2, 'F': 3},     1: {'+': 's6', '$': 'accept'},     2: {'+': 'r2', '*': 's7', '$': 'r2'},     3: {'+': 'r4', '*': 'r4', '$': 'r4'},     4: {'id': 's5', '(': 's4', 'E': 8, 'T': 2, 'F': 3},     5: {'+': 'r6', '*': 'r6', '$': 'r6'},     6: {'id': 's5', '(': 's4', 'T': 9, 'F': 3},     7: {'id': 's5', '(': 's4', 'F': 10},     8: {')': 's11', '+': 's6'},     9: {'+': 'r1', '*': 's7', '$': 'r1'},     10: {'+': 'r3', '*': 'r3', '$': 'r3'},     11: {'+': 'r5', '*': 'r5', '$': 'r5'} }  follow_set = {     'S': ['$'],     'E': ['$', '+', ')'],     'T': ['$', '+', '*', ')'],     'F': ['$', '+', '*', ')'] }  parser = SLRParser(grammar, parsing_table, follow_set) parser.parse('id + id * id')<\/code><\/pre>\n<h4>LALR \u043f\u0430\u0440\u0441\u0435\u0440<\/h4>\n<pre><code class=\"python\">class LALRParser:     def __init__(self, grammar, parsing_table):         self.grammar = grammar         self.parsing_table = parsing_table      def parse(self, input_string):         stack = [0]         input_string = input_string.split() + ['$']         cursor = 0          while True:             state = stack[-1]             lookahead = input_string[cursor]             action = self.parsing_table[state].get(lookahead, None)              if action is None:                 print(\"Error: Invalid syntax\")                 return False             elif action.startswith('s'):                 stack.append(lookahead)                 stack.append(int(action[1:]))                 cursor += 1             elif action.startswith('r'):                 production = self.grammar[int(action[1:])]                 for _ in range(2 * len(production[1])):                     stack.pop()                 state = stack[-1]                 stack.append(production[0])                 stack.append(self.parsing_table[state][production[0]])             elif action == 'accept':                 print(\"Parsing completed successfully!\")                 return True             else:                 print(\"Error: Invalid syntax\")                 return False  grammar = [     ('E', ['E', '+', 'T']),     ('E', ['T']),     ('T', ['T', '*', 'F']),     ('T', ['F']),     ('F', ['(', 'E', ')']),     ('F', ['id']) ]  parsing_table = {     0: {'id': 's5', '(': 's4', 'E': 1, 'T': 2, 'F': 3},     1: {'+': 's6', '$': 'accept'},     2: {'+': 'r2', '*': 's7', '$': 'r2'},     3: {'+': 'r4', '*': 'r4', '$': 'r4'},     4: {'id': 's5', '(': 's4', 'E': 8, 'T': 2, 'F': 3},     5: {'+': 'r6', '*': 'r6', '$': 'r6'},     6: {'id': 's5', '(': 's4', 'T': 9, 'F': 3},     7: {'id': 's5', '(': 's4', 'F': 10},     8: {')': 's11', '+': 's6'},     9: {'+': 'r1', '*': 's7', '$': 'r1'},     10: {'+': 'r3', '*': 'r3', '$': 'r3'},     11: {'+': 'r5', '*': 'r5', '$': 'r5'} }  parser = LALRParser(grammar, parsing_table) parser.parse('id + id * id')<\/code><\/pre>\n<h4>Canonical LR(1) \u043f\u0430\u0440\u0441\u0435\u0440<\/h4>\n<pre><code class=\"python\">class LR1Parser:     def __init__(self, grammar, parsing_table):         self.grammar = grammar         self.parsing_table = parsing_table      def parse(self, input_string):         stack = [0]         input_string = input_string.split() + ['$']         cursor = 0          while True:             state = stack[-1]             lookahead = input_string[cursor]             action = self.parsing_table[state].get(lookahead, None)              if action is None:                 print(\"Error: Invalid syntax\")                 return False             elif action.startswith('s'):                 stack.append(lookahead)                 stack.append(int(action[1:]))                 cursor += 1             elif action.startswith('r'):                 production = self.grammar[int(action[1:])]                 for _ in range(2 * len(production[1])):                     stack.pop()                 state = stack[-1]                 stack.append(production[0])                 stack.append(self.parsing_table[state][production[0]])             elif action == 'accept':                 print(\"Parsing completed successfully!\")                 return True             else:                 print(\"Error: Invalid syntax\")                 return False  grammar = [     ('E', ['E', '+', 'T']),     ('E', ['T']),     ('T', ['T', '*', 'F']),     ('T', ['F']),     ('F', ['(', 'E', ')']),     ('F', ['id']) ]  parsing_table = {     0: {'id': 's5', '(': 's4', 'E': 1, 'T': 2, 'F': 3},     1: {'+': 's6', '$': 'accept'},     2: {'+': 'r2', '*': 's7', '$': 'r2'},     3: {'+': 'r4', '*': 'r4', '$': 'r4'},     4: {'id': 's5', '(': 's4', 'E': 8, 'T': 2, 'F': 3},     5: {'+': 'r6', '*': 'r6', '$': 'r6'},     6: {'id': 's5', '(': 's4', 'T': 9, 'F': 3},     7: {'id': 's5', '(': 's4', 'F': 10},     8: {')': 's11', '+': 's6'},     9: {'+': 'r1', '*': 's7', '$': 'r1'},     10: {'+': 'r3', '*': 'r3', '$': 'r3'},     11: {'+': 'r5', '*': 'r5', '$': 'r5'} }  parser = LR1Parser(grammar, parsing_table) parser.parse('id + id * id'<\/code><\/pre>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443, \u0441\u043b\u0435\u0434\u0443\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438, \u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 shift \u0438 reduce \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0434\u0435\u0440\u0435\u0432\u0430 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0438\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0435. <\/p>\n<hr\/>\n<p>\u0412 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u043f\u043e\u043c\u043d\u044e \u043e \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0443\u0440\u043e\u043a\u0430\u0445:<\/p>\n<ul>\n<li>\n<p>13 \u0438\u044e\u043d\u044f, \u00ab\u042d\u0442\u0430\u043f\u044b, \u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u0432\u0438\u0434\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u00bb: \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c, \u043a\u0430\u043a \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f. <a href=\"https:\/\/otus.pw\/YpEK\/\">\u0417\u0430\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435<\/a><\/p>\n<\/li>\n<li>\n<p>19 \u0438\u044e\u043d\u044f, \u00abEvent storming \u043a\u0430\u043a \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438\u00bb. <a href=\"https:\/\/otus.pw\/g0NG\/\">\u0417\u0430\u043f\u0438\u0441\u044c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/819841\/\"> https:\/\/habr.com\/ru\/articles\/819841\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><em>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!<\/em><\/p>\n<p><strong>LR-\u043f\u0430\u0440\u0441\u0435\u0440\u044b<\/strong> \u2013 \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. LR \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 <em>Left-to-right, <\/em>\u0441\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e \u0438 <em>Rightmost<\/em> derivation, \u043f\u0440\u0430\u0432\u043e\u0435 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f. LR \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0441\u043d\u0438\u0437\u0443 \u0432\u0432\u0435\u0440\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 LL-\u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437.<\/p>\n<p>\u041e\u0434\u043d\u0430 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0444\u0438\u0447 LR-\u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 &#8212; \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e-\u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a. <\/p>\n<h3>\u0422\u0438\u043f\u044b LR-\u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432<\/h3>\n<h4>LR(0) \u043f\u0430\u0440\u0441\u0435\u0440\u044b<\/h4>\n<p>LR(0) \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u2014 \u044d\u0442\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0442\u0438\u043f LR-\u043f\u0430\u0440\u0441\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0443\u043b\u0435\u0432\u043e\u0435 \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u043f\u0435\u0440\u0435\u0434, \u0442.\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430\u0445 \u0438 \u0440\u0435\u0434\u0443\u043a\u0446\u0438\u044f\u0445, \u043d\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p>LR(0) \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0431\u0430\u0437\u043e\u0439 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432. \u041e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u0442\u0435\u043a \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.<\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u043f\u0435\u0440\u0435\u0434, \u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u0434\u0432\u0443\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 LR(0) \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 \u2014 \u044d\u0442\u043e \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b shift\/reduce \u0438 reduce\/reduce, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0442\u044c \u0438\u0437-\u0437\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u0445.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0443:<\/p>\n<pre><code>S \u2192 A A \u2192 aA | b<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0441\u0442\u0440\u043e\u043a\u0438 &#171;aab&#187;, LR(0) \u043f\u0430\u0440\u0441\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438:<\/p>\n<ol>\n<li>\n<p>Shift: \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 <code>a<\/code> \u0432 \u0441\u0442\u0435\u043a.<\/p>\n<\/li>\n<li>\n<p>Shift: \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u0442\u043e\u0440\u043e\u0433\u043e <code>a<\/code> \u0432 \u0441\u0442\u0435\u043a.<\/p>\n<\/li>\n<li>\n<p>Reduce: \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>aA<\/code> \u0432 <code>A<\/code>.<\/p>\n<\/li>\n<li>\n<p>Shift: \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 <code>b<\/code> \u0432 \u0441\u0442\u0435\u043a.<\/p>\n<\/li>\n<li>\n<p>Reduce: \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>A<\/code> \u0432 <code>S<\/code>.<\/p>\n<\/li>\n<\/ol>\n<h4>SLR (Simple LR) \u043f\u0430\u0440\u0441\u0435\u0440\u044b<\/h4>\n<p>SLR \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u0430\u043f\u0434\u0435\u0439\u0442 \u0432\u0435\u0440\u0441\u0438\u044e LR(0) \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u043f\u0435\u0440\u0435\u0434 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p>SLR \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u0440\u0435\u0448\u0430\u044e\u0442 \u043c\u043d\u043e\u0433\u0438\u0435 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b, \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432 LR(0) \u043f\u0430\u0440\u0441\u0435\u0440\u0430\u0445, \u043f\u0443\u0442\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430.<\/p>\n<p>\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0434\u043b\u044f SLR \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0443 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 LR(1) \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u0445 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0439 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0439 \u0436\u0435 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438:<\/p>\n<pre><code>S \u2192 A A \u2192 aA | b<\/code><\/pre>\n<p>SLR \u043f\u0430\u0440\u0441\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u043f\u0435\u0440\u0435\u0434 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f, \u043a\u0430\u043a\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0432\u0443\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h4>LALR (Look-Ahead LR) \u043f\u0430\u0440\u0441\u0435\u0440\u044b<\/h4>\n<p>LALR \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u2014 \u044d\u0442\u043e \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0448\u0430\u0433 \u0432 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438 LR-\u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0441\u043e\u0431\u043e\u0439 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441 \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<p>LALR \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0435 LR(1) \u043f\u0430\u0440\u0441\u0435\u0440\u044b, \u043d\u043e \u0441 \u043c\u0435\u043d\u044c\u0448\u0438\u043c\u0438 \u0437\u0430\u0442\u0440\u0430\u0442\u0430\u043c\u0438 \u043d\u0430 \u043f\u0430\u043c\u044f\u0442\u044c.<\/p>\n<p>\u0422\u0430\u0431\u043b\u0438\u0446\u044b LALR \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b, \u0447\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e\u043b\u043d\u044b\u0445 LR(1) \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0443:<\/p>\n<pre><code>S \u2192 E E \u2192 E + T | T T \u2192 T * F | F F \u2192 ( E ) | id<\/code><\/pre>\n<p>LALR \u043f\u0430\u0440\u0441\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u043f\u0435\u0440\u0435\u0434 \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u044f \u0434\u0432\u0443\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432.<\/p>\n<h4>Canonical LR(1) \u043f\u0430\u0440\u0441\u0435\u0440\u044b<\/h4>\n<p>Canonical LR(1) \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043c\u043e\u0449\u043d\u044b\u0439 \u0442\u0438\u043f LR-\u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e-\u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0435 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438 \u0431\u0435\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0442\u0438 \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u0430\u044f LR-\u043f\u0430\u0440\u0441\u0435\u0440\u043d\u0430\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0430.<\/p>\n<p>\u0422\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0434\u043b\u044f LR(1) \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0443 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 LR-\u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432.<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0439 \u0436\u0435 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438:<\/p>\n<pre><code>S \u2192 E E \u2192 E + T | T T \u2192 T * F | F F \u2192 ( E ) | id<\/code><\/pre>\n<p>Canonical LR(1) \u043f\u0430\u0440\u0441\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0442\u043e\u0447\u043d\u044b\u0439 \u043f\u0430\u0440\u0441\u0438\u043d\u0433.<\/p>\n<h3>\u0418\u0437 \u0447\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u0442 LR-\u043f\u0430\u0440\u0441\u0435\u0440\u0441\u044b \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u044b<\/h3>\n<h4>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b LR-\u043f\u0430\u0440\u0441\u0435\u0440\u0430<\/h4>\n<ol>\n<li>\n<p><strong>\u0421\u0442\u0435\u043a<\/strong>:<br \/>\u0421\u0442\u0435\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u0430\u0440\u0441\u0435\u0440 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u0442\u0435\u043a\u043e\u043c \u0438 \u0432\u0445\u043e\u0434\u043d\u044b\u043c \u0431\u0443\u0444\u0435\u0440\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440<\/strong>:<br \/> \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0440\u043e\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u0430. \u0421\u0442\u0440\u043e\u043a\u0430 \u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u043a\u043e\u043d\u0446\u0430 ($).<\/p>\n<\/li>\n<li>\n<p><strong>Action table<\/strong>:<br \/>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u0430\u0440\u0441\u0435\u0440\u0430 (shift, reduce, accept, \u0438\u043b\u0438 error) \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u0441\u0442\u0435\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>Goto table<\/strong>:<br \/>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0430\u0440\u0441\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f reduce-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0431\u044b\u043b\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0430 \u0440\u0435\u0434\u0443\u043a\u0446\u0438\u044f.<\/p>\n<\/li>\n<\/ol>\n<h4>\u0428\u0430\u0433\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430<\/h4>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c LR-\u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u0448\u0430\u0433\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 shift \u0438 reduce:<\/p>\n<ol>\n<li>\n<p><strong>Shift<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0437 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u0432 \u0441\u0442\u0435\u043a.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Reduce<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438 \u043a \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u0441\u0442\u0435\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043c\u0435\u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043d\u0430 \u043b\u0435\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0432 \u0441\u0442\u0435\u043a\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0448\u0430\u0433\u043e\u0432 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430:<\/p>\n<p>\u0413\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0430:<\/p>\n<pre><code>E \u2192 E + T | T T \u2192 T * F | F F \u2192 ( E ) | id<\/code><\/pre>\n<p>\u0412\u0445\u043e\u0434\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430: <code>id + id * id<\/code><\/p>\n<p><strong>\u0428\u0430\u0433\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/strong>:<\/p>\n<ol>\n<li>\n<p><strong>Shift<\/strong>: <code>id<\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u043a, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>Reduce<\/strong>: <code>id<\/code> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 <code>F<\/code>, \u0437\u0430\u0442\u0435\u043c <code>F<\/code> \u0432 <code>T<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Shift<\/strong>: <code>+<\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u043a.<\/p>\n<\/li>\n<li>\n<p><strong>Shift<\/strong>: \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 <code>id<\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u043a, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>Reduce<\/strong>: <code>id<\/code> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 <code>F<\/code>, \u0437\u0430\u0442\u0435\u043c <code>F<\/code> \u0432 <code>T<\/code>, \u0438 <code>T<\/code> \u0432 <code>E<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Shift<\/strong>: <code>*<\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u043a.<\/p>\n<\/li>\n<li>\n<p><strong>Shift<\/strong>: \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 <code>id<\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u043a, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>Reduce<\/strong>: <code>id<\/code> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 <code>F<\/code>, \u0437\u0430\u0442\u0435\u043c <code>F<\/code> \u0432 <code>T<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Reduce<\/strong>: <code>T * F<\/code> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 <code>T<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Reduce<\/strong>: <code>E + T<\/code> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 <code>E<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Accept<\/strong>: \u0441\u0442\u0440\u043e\u043a\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u0430.<\/p>\n<\/li>\n<\/ol>\n<h3>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430<\/h3>\n<h4>LR(0) \u043f\u0430\u0440\u0441\u0435\u0440<\/h4>\n<pre><code class=\"python\">class LR0Parser:     def __init__(self, grammar, parsing_table):         self.grammar = grammar         self.parsing_table = parsing_table      def parse(self, input_string):         stack = [0]         input_string = input_string.split() + ['$']         cursor = 0          while True:             state = stack[-1]             lookahead = input_string[cursor]             action = self.parsing_table[state][lookahead]              if action.startswith('s'):                 stack.append(lookahead)                 stack.append(int(action[1:]))                 cursor += 1             elif action.startswith('r'):                 production = self.grammar[int(action[1:])]                 for _ in range(2 * len(production[1])):                     stack.pop()                 state = stack[-1]                 stack.append(production[0])                 stack.append(self.parsing_table[state][production[0]])             elif action == 'accept':                 print(\"Parsing completed successfully!\")                 return True             else:                 print(\"Error: Invalid syntax\")                 return False  grammar = [     ('S', ['A']),     ('A', ['a', 'A']),     ('A', ['b']) ]  parsing_table = {     0: {'a': 's2', 'b': 's3', 'S': 1, 'A': 4},     2: {'a': 's2', 'b': 's3', 'A': 5},     3: {'$': 'r2'},     4: {'$': 'accept'},     5: {'a': 's2', 'b': 's3', 'A': 6},     6: {'$': 'r1'} }  parser = LR0Parser(grammar, parsing_table) parser.parse('a a b')<\/code><\/pre>\n<h4>SLR \u043f\u0430\u0440\u0441\u0435\u0440<\/h4>\n<pre><code class=\"python\">class SLRParser:     def __init__(self, grammar, parsing_table, follow_set):         self.grammar = grammar         self.parsing_table = parsing_table         self.follow_set = follow_set      def parse(self, input_string):         stack = [0]         input_string = input_string.split() + ['$']         cursor = 0          while True:             state = stack[-1]             lookahead = input_string[cursor]             action = self.parsing_table[state].get(lookahead, None)              if action is None:                 print(\"Error: Invalid syntax\")                 return False             elif action.startswith('s'):                 stack.append(lookahead)                 stack.append(int(action[1:]))                 cursor += 1             elif action.startswith('r'):                 production = self.grammar[int(action[1:])]                 for _ in range(2 * len(production[1])):                     stack.pop()                 state = stack[-1]                 stack.append(production[0])                 stack.append(self.parsing_table[state][production[0]])             elif action == 'accept':                 print(\"Parsing completed successfully!\")                 return True             else:                 print(\"Error: Invalid syntax\")                 return False  grammar = [     ('S', ['E']),     ('E', ['E', '+', 'T']),     ('E', ['T']),     ('T', ['T', '*', 'F']),     ('T', ['F']),     ('F', ['(', 'E', ')']),     ('F', ['id']) ]  parsing_table = {     0: {'id': 's5', '(': 's4', 'E': 1, 'T': 2, 'F': 3},     1: {'+': 's6', '$': 'accept'},     2: {'+': 'r2', '*': 's7', '$': 'r2'},     3: {'+': 'r4', '*': 'r4', '$': 'r4'},     4: {'id': 's5', '(': 's4', 'E': 8, 'T': 2, 'F': 3},     5: {'+': 'r6', '*': 'r6', '$': 'r6'},     6: {'id': 's5', '(': 's4', 'T': 9, 'F': 3},     7: {'id': 's5', '(': 's4', 'F': 10},     8: {')': 's11', '+': 's6'},     9: {'+': 'r1', '*': 's7', '$': 'r1'},     10: {'+': 'r3', '*': 'r3', '$': 'r3'},     11: {'+': 'r5', '*': 'r5', '$': 'r5'} }  follow_set = {     'S': ['$'],     'E': ['$', '+', ')'],     'T': ['$', '+', '*', ')'],     'F': ['$', '+', '*', ')'] }  parser = SLRParser(grammar, parsing_table, follow_set) parser.parse('id + id * id')<\/code><\/pre>\n<h4>LALR \u043f\u0430\u0440\u0441\u0435\u0440<\/h4>\n<pre><code class=\"python\">class LALRParser:     def __init__(self, grammar, parsing_table):         self.grammar = grammar         self.parsing_table = parsing_table      def parse(self, input_string):         stack = [0]         input_string = input_string.split() + ['$']         cursor = 0          while True:             state = stack[-1]             lookahead = input_string[cursor]             action = self.parsing_table[state].get(lookahead, None)              if action is None:                 print(\"Error: Invalid syntax\")                 return False             elif action.startswith('s'):                 stack.append(lookahead)                 stack.append(int(action[1:]))                 cursor += 1             elif action.startswith('r'):                 production = self.grammar[int(action[1:])]                 for _ in range(2 * len(production[1])):                     stack.pop()                 state = stack[-1]                 stack.append(production[0])                 stack.append(self.parsing_table[state][production[0]])             elif action == 'accept':                 print(\"Parsing completed successfully!\")                 return True             else:                 print(\"Error: Invalid syntax\")                 return False  grammar = [     ('E', ['E', '+', 'T']),     ('E', ['T']),     ('T', ['T', '*', 'F']),     ('T', ['F']),     ('F', ['(', 'E', ')']),     ('F', ['id']) ]<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-379627","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/379627","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=379627"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/379627\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=379627"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=379627"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=379627"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}